summaryrefslogtreecommitdiffstats
path: root/server.c
diff options
context:
space:
mode:
authorSimon Rettberg2018-11-14 14:37:31 +0100
committerSimon Rettberg2018-11-14 14:37:31 +0100
commit8b8ed36516e9a40df6ac9ac46ab355fee0e5b5f0 (patch)
treeb0267df71f0807319e7e80cf18a27dde1382cc90 /server.c
parentStarted work on proxy-side uid generation/tracking (diff)
downloadldadp-8b8ed36516e9a40df6ac9ac46ab355fee0e5b5f0.tar.gz
ldadp-8b8ed36516e9a40df6ac9ac46ab355fee0e5b5f0.tar.xz
ldadp-8b8ed36516e9a40df6ac9ac46ab355fee0e5b5f0.zip
Support generating uidNumbers on proxy
Diffstat (limited to 'server.c')
-rw-r--r--server.c55
1 files changed, 52 insertions, 3 deletions
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 <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;