>From 2d58e76d1300dd5d7457642d3a0dc54ee1f8e81f Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Wed, 2 Sep 2009 11:58:17 +0200 Subject: [PATCH] adding domain-type config option --- server/Makefile.am | 2 + server/confdb/confdb.c | 1 - server/confdb/confdb.h | 1 + server/confdb/confdb_setup.c | 7 ++ server/confdb/domain_defaults.c | 118 +++++++++++++++++++++++++++++++++++++++ server/confdb/domain_defaults.h | 32 +++++++++++ 6 files changed, 160 insertions(+), 1 deletions(-) create mode 100644 server/confdb/domain_defaults.c create mode 100644 server/confdb/domain_defaults.h diff --git a/server/Makefile.am b/server/Makefile.am index 12ec4b1..a06761e 100644 --- a/server/Makefile.am +++ b/server/Makefile.am @@ -222,6 +222,7 @@ dist_noinst_HEADERS = \ providers/data_provider.h \ providers/dp_interfaces.h \ providers/dp_backend.h \ + confdb/domain_defaults.h \ providers/providers.h \ providers/krb5/krb5_auth.h \ providers/ldap/sdap.h \ @@ -239,6 +240,7 @@ dist_noinst_HEADERS = \ sssd_SOURCES = \ monitor/monitor.c \ confdb/confdb_setup.c \ + confdb/domain_defaults.c \ $(SSSD_UTIL_OBJ) sssd_LDADD = \ $(SSSD_LIBS) diff --git a/server/confdb/confdb.c b/server/confdb/confdb.c index 72e5eeb..865e044 100644 --- a/server/confdb/confdb.c +++ b/server/confdb/confdb.c @@ -28,7 +28,6 @@ #include "util/btreemap.h" #include "db/sysdb.h" -#define CONFDB_DOMAINS_PATH "config/domains" #define CONFDB_DOMAIN_BASEDN "cn=domains,cn=config" #define CONFDB_DOMAIN_ATTR "cn" #define CONFDB_MPG "magicPrivateGroups" diff --git a/server/confdb/confdb.h b/server/confdb/confdb.h index f565088..565edfc 100644 --- a/server/confdb/confdb.h +++ b/server/confdb/confdb.h @@ -34,6 +34,7 @@ #define CONFDB_DEFAULT_CONFIG_FILE SSSD_CONF_DIR"/sssd.conf" #define SSSD_MIN_ID 1000 +#define CONFDB_DOMAINS_PATH "config/domains" #define SERVICE_CONF_ENTRY "config/services" struct confdb_ctx; diff --git a/server/confdb/confdb_setup.c b/server/confdb/confdb_setup.c index 00bba7f..95ae728 100644 --- a/server/confdb/confdb_setup.c +++ b/server/confdb/confdb_setup.c @@ -26,6 +26,7 @@ #include "confdb.h" #include "confdb_private.h" #include "confdb_setup.h" +#include "domain_defaults.h" #include "collection.h" #include "collection_tools.h" #include "ini_config.h" @@ -348,6 +349,12 @@ int confdb_init_db(const char *config_file, struct confdb_ctx *cdb) ldb_ldif_read_free(cdb->ldb, ldif); } + ret = set_domain_defaults(tmp_ctx, cdb); + if (ret != EOK) { + DEBUG(1, ("set_domain_defaults failed.\n")); + goto done; + } + /* now store the lastUpdate time so that we do not re-init if nothing * changed on restart */ diff --git a/server/confdb/domain_defaults.c b/server/confdb/domain_defaults.c new file mode 100644 index 0000000..299b00e --- /dev/null +++ b/server/confdb/domain_defaults.c @@ -0,0 +1,118 @@ +/* + SSSD + + Data Provider Backend -- Domain Defaults + + Copyright (C) Sumit Bose 2008 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "confdb/domain_defaults.h" + +struct domain_defaults { + const char *name; + const char *value; +}; + +struct domain_defaults ipa_defaults[] = { + {"provider", "ldap"}, + {"enumerate", "true"}, + {"auth-module", "krb5"}, + {"chpass-module", "krb5"}, + {"access-module", "ipa"}, + {"ldapSchema", "rfc2307bis"}, + {NULL, NULL} +}; + +errno_t set_domain_defaults(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb) +{ + int ret; + int i; + int d; + char *conf_path = NULL; + char **get_values = NULL; + const char *val[2]; + val[1] = NULL; + char **domlist = NULL; + struct domain_defaults *defaults = NULL; + + ret = confdb_get_string_as_list(cdb, mem_ctx, CONFDB_DOMAINS_PATH, + "domains", &domlist); + if (ret != EOK ) { + DEBUG(0, ("Fatal error retrieving domains list!\n")); + goto done; + } + + for (d = 0; domlist[d] != NULL; d++) { + conf_path = talloc_asprintf(mem_ctx, "config/domains/%s", domlist[d]); + if (conf_path == NULL) { + DEBUG(1, ("talloc_asprintf failed.\n")); + ret = ENOMEM; + goto done; + } + + ret = confdb_get_param(cdb, mem_ctx, conf_path, "domain-type", + &get_values); + if (ret != EOK) { + DEBUG(1, ("Failed to get domain_type.\n")); + goto done; + } + if (get_values[0] == NULL) { + DEBUG(9, ("Domain [%s] has no domain type defined.\n", domlist[d])); + continue; + } + + if (strcasecmp(get_values[0], "ipa") == 0) { + DEBUG(5, ("Setting defaults for IPA domain\n")); + defaults = ipa_defaults; + } else { + DEBUG(1, ("Unsupported domain type [%s].\n", get_values[0])); + ret = EINVAL; + goto done; + } + talloc_zfree(get_values); + + for (i = 0; defaults[i].name != NULL; i++) { + ret = confdb_get_param(cdb, mem_ctx,conf_path, defaults[i].name, + &get_values); + if (ret != EOK) { + DEBUG(1, ("Failed to get [%s].\n", defaults[i].name)); + goto done; + } + if (get_values[0] != NULL) { + DEBUG(9 ,("Leaving attribute [%s] set to [%s].\n", + defaults[i].name, get_values[0])); + talloc_zfree(get_values); + continue; + } + talloc_zfree(get_values); + + val[0] = defaults[i].value; + DEBUG(9, ("Setting [%s] to [%s].\n", defaults[i].name, val[0])); + ret = confdb_add_param(cdb, true, conf_path, defaults[i].name, val); + if (ret != EOK) { + DEBUG(1, ("Failed to set [%s] to [%s].\n", defaults[i].name, + val[0])); + goto done; + } + } + } + + ret = EOK; +done: + talloc_zfree(domlist); + talloc_zfree(conf_path); + return ret; +} diff --git a/server/confdb/domain_defaults.h b/server/confdb/domain_defaults.h new file mode 100644 index 0000000..d1ac65e --- /dev/null +++ b/server/confdb/domain_defaults.h @@ -0,0 +1,32 @@ +/* + SSSD + + Data Provider Backend -- Domain Defaults header file + + Copyright (C) Sumit Bose 2008 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef __DOMAIN_DEFAULTS_H__ +#define __DOMAIN_DEFAULTS_H__ + +#include "util/util.h" +#include "confdb/confdb.h" +#include "confdb/confdb_private.h" +#include "providers/dp_backend.h" + +errno_t set_domain_defaults(TALLOC_CTX *mem_ctx, struct confdb_ctx *cdb); + +#endif /* __DOMAIN_DEFAULTS_H__ */ -- 1.6.2.5