src/server/daemon/config.c

changeset 62
c47e081b6c0f
parent 61
c858850f3d3a
child 63
66442f81f823
--- a/src/server/daemon/config.c	Thu May 09 13:19:51 2013 +0200
+++ b/src/server/daemon/config.c	Thu May 09 19:41:11 2013 +0200
@@ -473,6 +473,39 @@
         free(name.ptr);
         */
         
+    } else if(!sstrcmp(type, sstr("keyfile"))) {
+        // we only need the file parameter
+        sstr_t file = cfg_directivelist_get_str(
+                obj->directives,
+                sstr("File"));
+        if(file.length == 0) {
+            log_ereport(
+                    LOG_MISCONFIG,
+                    "missing File parameter for keyfile authdb");
+            return 1;
+        }
+        
+        // load keyfile
+        ConfigFile *f = cfgmgr_get_file(file);
+        if(f == NULL) {
+            f = malloc(sizeof(ConfigFile));
+            f->data = NULL;
+            f->file = sstrdup(file);
+            f->reload = keyfile_reload;
+            //f->reload(f, cfg);
+            if(cfgmgr_reload_file(f, cfg, NULL)) {
+                free(f->file.ptr);
+                free(f);
+                return -1;
+            }
+            cfgmgr_attach_file(f);
+        }
+        
+        // add keyfile authdb
+        Keyfile *keyfile = f->data;
+        keyfile->authdb.name = sstrdup(name).ptr;
+        printf("authdb: %d\n", keyfile);
+        ucx_map_sstr_put(cfg->authdbs, name, keyfile);
     }
 
     return 0;
@@ -833,3 +866,33 @@
     
     return &acllist->acl;
 }
+
+int keyfile_reload(ConfigFile *file, ServerConfiguration *cfg) {
+    KeyfileConfig *conf = load_keyfile_config(file->file.ptr);
+    if(!conf) {
+        return 1;
+    }
+    
+    Keyfile *keyfile = keyfile_new();
+    
+    UCX_FOREACH(UcxList*, conf->users, elm) {
+        KeyfileEntry *user = elm->data;
+        keyfile_add_user(
+                keyfile,
+                user->name,
+                user->hashtype,
+                user->hashdata,
+                user->groups,
+                user->numgroups);
+    }
+    
+    free_keyfile_config(conf);
+    
+    Keyfile *old_data = file->data;
+    file->data = keyfile;
+    if(old_data) {
+        keyfile_unref(old_data);
+    }
+    
+    return 0;
+}

mercurial