summaryrefslogtreecommitdiff
path: root/src/analysis/db/server.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-04-11 00:36:41 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-04-11 00:36:41 (GMT)
commit30009c26869094699c93ff5d922405e3a13fd26f (patch)
tree4bc9160061d1ab4dc1f8250185242fee1b348439 /src/analysis/db/server.c
parent3fbcabfd38e58dc4c47c9cd6ad95acb82e6e352b (diff)
Moved all the temporary creations in a temporary directory.
Diffstat (limited to 'src/analysis/db/server.c')
-rw-r--r--src/analysis/db/server.c50
1 files changed, 13 insertions, 37 deletions
diff --git a/src/analysis/db/server.c b/src/analysis/db/server.c
index 6455fda..1565501 100644
--- a/src/analysis/db/server.c
+++ b/src/analysis/db/server.c
@@ -31,8 +31,6 @@
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
-#include <sys/socket.h>
-#include <sys/un.h>
#include <i18n.h>
@@ -65,10 +63,6 @@ typedef union _gen_sockaddr_t
} gen_sockaddr_t;
-#ifndef UNIX_PATH_MAX
-# define UNIX_PATH_MAX 108
-#endif
-
/* Assure que le point de connexion est vierge. */
typedef bool (* clean_server_socket_cb) (GDbServer *);
@@ -176,6 +170,8 @@ static void g_db_server_init(GDbServer *server)
{
server->fd = -1;
+ server->basedir = NULL;
+
g_mutex_init(&server->mutex);
}
@@ -199,6 +195,9 @@ static void g_db_server_finalize(GDbServer *server)
free(server->desc);
+ if (server->basedir != NULL)
+ free(server->basedir);
+
G_OBJECT_CLASS(g_db_server_parent_class)->finalize(G_OBJECT(server));
}
@@ -221,9 +220,6 @@ GDbServer *g_db_server_new_internal(const char *author, char *kfile)
{
GDbServer *result; /* Adresse à retourner */
bool status; /* Bilan d'un chargement */
- char *suffix; /* Suffixe pour un fichier */
- size_t sock_length; /* Taille du chemin complet */
- char *sock_path; /* Chemin vers le canal UNIX */
result = g_object_new(G_TYPE_DB_SERVER, NULL);
@@ -236,33 +232,14 @@ GDbServer *g_db_server_new_internal(const char *author, char *kfile)
result->domain = AF_UNIX;
- asprintf(&suffix, "chrysalide" G_DIR_SEPARATOR_S ".internal_server.%d", getpid());
- sock_path = get_xdg_config_dir(suffix);
- free(suffix);
-
- sock_length = strlen(sock_path) + 1;
-
- if (sock_length > UNIX_PATH_MAX)
- {
- log_variadic_message(LMT_ERROR,
- _("Impossible to use '%s' for the internal server: path is too long ! (%zu vs %u)\n"),
- sock_path, sock_length, UNIX_PATH_MAX);
-
- goto gdsni_too_long;
- }
-
- memset(&result->addr, 0, sizeof(struct sockaddr_un));
-
- result->addr.unix_addr.sun_family = AF_UNIX;
- strncpy(result->addr.unix_addr.sun_path, sock_path, UNIX_PATH_MAX - 1);
-
- free(sock_path);
+ status = build_tmp_socket("internal-server", &result->addr.unix_addr);
+ if (!status) goto gdsni_error;
result->sock_len = sizeof(struct sockaddr_un);
/* Désignation humaine */
- asprintf(&result->desc, "unix://.internal_server.%d", getpid());
+ asprintf(&result->desc, "unix://%s", result->addr.unix_addr.sun_path);
/* Aide pour une sortie propre ? */
@@ -274,10 +251,6 @@ GDbServer *g_db_server_new_internal(const char *author, char *kfile)
return result;
- gdsni_too_long:
-
- free(sock_path);
-
gdsni_error:
g_object_unref(G_OBJECT(result));
@@ -351,6 +324,8 @@ GDbServer *g_db_server_new_remote(const char *conf)
struct hostent *hp; /* Informations sur l'hôte */
size_t desclen; /* Taille de désignation */
const char *ip; /* Adresse IPv4 ou IPv6 */
+ const char *tmpdir; /* Répertoire de travail */
+ bool status; /* Bilan d'un consultation */
result = g_object_new(G_TYPE_DB_SERVER, NULL);
@@ -404,9 +379,10 @@ GDbServer *g_db_server_new_remote(const char *conf)
/* Répertoire de stockage */
+ status = g_generic_config_get_value(get_main_configuration(), MPK_TMPDIR, &tmpdir);
+ if (!status) goto gdsn_error;
- result->basedir = strdup("/tmp/"); /* TODO */
-
+ result->basedir = strdup(tmpdir);
return result;