diff options
author | Simon Rettberg | 2018-11-14 14:37:31 +0100 |
---|---|---|
committer | Simon Rettberg | 2018-11-14 14:37:31 +0100 |
commit | 8b8ed36516e9a40df6ac9ac46ab355fee0e5b5f0 (patch) | |
tree | b0267df71f0807319e7e80cf18a27dde1382cc90 /server.c | |
parent | Started work on proxy-side uid generation/tracking (diff) | |
download | ldadp-8b8ed36516e9a40df6ac9ac46ab355fee0e5b5f0.tar.gz ldadp-8b8ed36516e9a40df6ac9ac46ab355fee0e5b5f0.tar.xz ldadp-8b8ed36516e9a40df6ac9ac46ab355fee0e5b5f0.zip |
Support generating uidNumbers on proxy
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 55 |
1 files changed, 52 insertions, 3 deletions
@@ -4,6 +4,7 @@ #include "epoll.h" #include "tmpbuffer.h" #include "openssl.h" +#include "uidmap.h" #include <time.h> #include <stdio.h> #include <stdlib.h> @@ -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; |