From 8b8ed36516e9a40df6ac9ac46ab355fee0e5b5f0 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 14 Nov 2018 14:37:31 +0100 Subject: Support generating uidNumbers on proxy --- server.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) (limited to 'server.c') diff --git a/server.c b/server.c index f22c5bf..54fd154 100644 --- a/server.c +++ b/server.c @@ -4,6 +4,7 @@ #include "epoll.h" #include "tmpbuffer.h" #include "openssl.h" +#include "uidmap.h" #include #include #include @@ -41,6 +42,13 @@ static inline uint32_t msgId() return id; } +static BOOL parseBool(const char *str) +{ + return atoi(str) != 0 || strcmp(str, "true") == 0 + || strcmp(str, "True") == 0 || strcmp(str, "TRUE") == 0 + || strcmp(str, "on") == 0 || strcmp(str, "On") == 0; +} + // Setting up server(s) void server_setPort(const char *server, const char *portStr) @@ -59,15 +67,30 @@ void server_setPlainLdap(const char *server, const char *enabledStr) { server_t *entry = server_create(server); if (entry == NULL) return; - entry->plainLdap = atoi(enabledStr) != 0 || strcmp(enabledStr, "true") == 0 - || strcmp(enabledStr, "True") == 0 || strcmp(enabledStr, "TRUE") == 0; + entry->plainLdap = parseBool(enabledStr); } void server_setFixNumeric(const char *server, const char *enabledStr) { server_t *entry = server_create(server); if (entry == NULL) return; - entry->fixNumeric = *enabledStr != '\0' || atoi(enabledStr) != 0; + entry->fixNumeric = parseBool(enabledStr); +} + +void server_setUidMapStore(const char *server, const char *fileName) +{ + server_t *entry = server_create(server); + if (entry == NULL) return; + if (fileName == NULL || *fileName == '\0') return; + entry->uidmap.fileName = strdup(fileName); +} + +void server_setGenUidNumber(const char *server, const char *enabledStr) +{ + server_t *entry = server_create(server); + if (entry == NULL) return; + entry->genUidNumber = parseBool(enabledStr); + plog(DEBUG_VERBOSE, "Using UID mapping for %s: %d", server, (int)entry->genUidNumber); } static void strtolower(char *str) @@ -226,6 +249,32 @@ void server_setFingerprint(const char *server, const char *fingerprint) ssl_init(); } +/** + * Initialize hashmaps for uid mapping. + * Returns TRUE if at least one server is + * configured to use uid mapping. + */ +BOOL server_initUidMaps() +{ + BOOL ret = FALSE; + for (int i = 0; i < serverCount; ++i) { + if (servers[i].genUidNumber) { + uidmap_init(&servers[i].uidmap); + ret = TRUE; + } + } + return ret; +} + +void server_saveUidMaps() +{ + for (int i = 0; i < serverCount; ++i) { + if (servers[i].genUidNumber) { + uidmap_cleanupSave(&servers[i].uidmap); + } + } +} + BOOL server_initServers() { int i; -- cgit v1.2.3-55-g7522