summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOpenGnSys Support Team <soporte-og@soleta.eu>2024-09-04 11:43:09 +0200
committerOpenGnSys Support Team <soporte-og@soleta.eu>2024-09-04 12:19:58 +0200
commit4567bce90b38280dc6a217e5dfe2af20b3bdf95f (patch)
tree6eaa4f77ba6b20f906c03348d8c5040ba9691837 /src
parent7977711ee96b308d289fca1b20665e8a8e836786 (diff)
src: fallback to use first repository/server foundv1.2.5-19
use first repository/server in the list in case no specific repository/server is found in the same network, this is a fallback that works if repository/server is reachable through gateway.
Diffstat (limited to 'src')
-rw-r--r--src/dbi.c42
1 files changed, 30 insertions, 12 deletions
diff --git a/src/dbi.c b/src/dbi.c
index 8122e6e..78485a6 100644
--- a/src/dbi.c
+++ b/src/dbi.c
@@ -270,7 +270,7 @@ bool og_dbi_get_image(struct og_dbi *dbi, struct og_image *image)
int og_dbi_get_server_ip(const struct og_dbi *dbi, const char *client_ip,
char *res_server_ip)
{
- const char *msglog, *netmask_ip, *server_ip;
+ const char *msglog, *netmask_ip, *server_ip, *first_server_ip = NULL;
struct in_addr client, netmask, server;
bool found = false;
dbi_result result;
@@ -321,6 +321,9 @@ int og_dbi_get_server_ip(const struct og_dbi *dbi, const char *client_ip,
while (dbi_result_next_row(result) > 0) {
server_ip = dbi_result_get_string(result, "ipserveradm");
+ if (server_ip[0] && !first_server_ip)
+ first_server_ip = server_ip;
+
if (inet_aton(server_ip, &server) < 0) {
syslog(LOG_ERR, "failed to get repository IP (%s:%d)\n",
__func__, __LINE__);
@@ -336,26 +339,32 @@ int og_dbi_get_server_ip(const struct og_dbi *dbi, const char *client_ip,
break;
}
- if (!found) {
+ if (!first_server_ip) {
syslog(LOG_ERR,
- "cannot find server IP for client %s (%s:%d)\n",
+ "cannot find any server IP for client %s (%s:%d)\n",
client_ip, __func__, __LINE__);
dbi_result_free(result);
return -1;
}
+ if (found) {
+ syslog(LOG_INFO, "using server IP %s for client %s\n",
+ server_ip, client_ip);
+ } else {
+ server_ip = first_server_ip;
+ syslog(LOG_INFO, "falling back to server %s for client %s\n",
+ server_ip, client_ip);
+ }
+
snprintf(res_server_ip, OG_DB_IP_MAXLEN + 1, "%s", server_ip);
dbi_result_free(result);
- syslog(LOG_INFO, "using server IP %s for computer %s\n",
- res_server_ip, client_ip);
-
return 0;
}
int og_dbi_get_repository_ip(const struct og_dbi *dbi, const uint32_t repo_id,
const char *client_ip, char *repository_ip)
{
- const char *msglog, *netmask_ip, *repo_ip;
+ const char *msglog, *netmask_ip, *repo_ip, *first_repo_ip = NULL;
struct in_addr client, netmask, repo;
bool found = false;
dbi_result result;
@@ -407,6 +416,9 @@ int og_dbi_get_repository_ip(const struct og_dbi *dbi, const uint32_t repo_id,
while (dbi_result_next_row(result) > 0) {
repo_ip = dbi_result_get_string(result, "ip");
+ if (repo_ip[0] && !first_repo_ip)
+ first_repo_ip = repo_ip;
+
if (inet_aton(repo_ip, &repo) < 0) {
syslog(LOG_ERR, "failed to get repository IP (%s:%d)\n",
__func__, __LINE__);
@@ -422,19 +434,25 @@ int og_dbi_get_repository_ip(const struct og_dbi *dbi, const uint32_t repo_id,
break;
}
- if (!found) {
+ if (!first_repo_ip) {
syslog(LOG_ERR,
- "cannot find repository IP with repository ID %u for client %s (%s:%d)\n",
+ "cannot find any repository with ID %u for client %s (%s:%d)\n",
repo_id, client_ip, __func__, __LINE__);
dbi_result_free(result);
return -1;
}
+ if (found) {
+ syslog(LOG_INFO, "using repository with ID %u and IP %s for client %s\n",
+ repo_id, repo_ip, client_ip);
+ } else {
+ repo_ip = first_repo_ip;
+ syslog(LOG_INFO, "falling back to repository wth ID %u and IP %s for client %s\n",
+ repo_id, repo_ip, client_ip);
+ }
+
snprintf(repository_ip, OG_DB_IP_MAXLEN + 1, "%s", repo_ip);
dbi_result_free(result);
- syslog(LOG_INFO, "using repository with ID %u and IP %s for computer %s\n",
- repo_id, repository_ip, client_ip);
-
return 0;
}