--- 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; +}