diff options
-rw-r--r-- | server/conf_macros.m4 | 59 | ||||
-rw-r--r-- | server/confdb/confdb.c | 15 | ||||
-rw-r--r-- | server/configure.ac | 6 | ||||
-rw-r--r-- | server/monitor.c | 11 | ||||
-rw-r--r-- | server/nss/nss_ldb.h | 2 | ||||
-rw-r--r-- | server/nss/nsssrv_ldb.c | 10 | ||||
-rw-r--r-- | server/providers/data_provider.c | 68 | ||||
-rw-r--r-- | server/providers/data_provider.h | 6 | ||||
-rw-r--r-- | server/sbus_interfaces.h | 2 | ||||
-rw-r--r-- | server/server.c | 2 | ||||
-rw-r--r-- | server/util/service_helpers.c | 6 | ||||
-rw-r--r-- | server/util/util.h | 2 |
12 files changed, 156 insertions, 33 deletions
diff --git a/server/conf_macros.m4 b/server/conf_macros.m4 new file mode 100644 index 00000000..9aac02c5 --- /dev/null +++ b/server/conf_macros.m4 @@ -0,0 +1,59 @@ +AC_DEFUN(WITH_DB_PATH, + [ AC_ARG_WITH([db-path], + [AC_HELP_STRING([--with-db-path=PATH], + [Path to the SSSD databases [/var/lib/sss/db]] + ) + ] + ) + dbpath="/var/lib/sss/db" + if test x"$with_db_path" != x; then + dbpath=$with_db_path + fi + AC_SUBST(dbpath) + AC_DEFINE_UNQUOTED(DB_PATH, "$dbpath", [Path to the SSSD databases]) + ]) + +AC_DEFUN(WITH_PLUGIN_PATH, + [ AC_ARG_WITH([plugin-path], + [AC_HELP_STRING([--with-plugin-path=PATH], + [Path to the SSSD data provider plugins [/usr/lib/sssd]] + ) + ] + ) + pluginpath="/usr/lib/sssd" + if test x"$with_plugin_path" != x; then + pluginpath=$with_plugin_path + fi + AC_SUBST(pluginpath) + AC_DEFINE_UNQUOTED(DATA_PROVIDER_PLUGINS_PATH, "$pluginpath", [Path to the SSSD data provider plugins]) + ]) + +AC_DEFUN(WITH_PID_PATH, + [ AC_ARG_WITH([pid-path], + [AC_HELP_STRING([--with-pid-path=PATH], + [Where to store pid files for the SSSD [/var/run]] + ) + ] + ) + pidpath="/var/run" + if test x"$with_pid_path" != x; then + pidpath=$with_pid_path + fi + AC_SUBST(pidpath) + AC_DEFINE_UNQUOTED(PID_PATH, "$pidpath", [Where to store pid files for the SSSD]) + ]) + +AC_DEFUN(WITH_PIPE_PATH, + [ AC_ARG_WITH([pipe-path], + [AC_HELP_STRING([--with-pipe-path=PATH], + [Where to store pipe files for the SSSD interconnects [/var/lib/sss/pipes]] + ) + ] + ) + pipepath="/var/lib/sss/pipes" + if test x"$with_pipe_path" != x; then + pipepath=$with_pipe_path + fi + AC_SUBST(pipepath) + AC_DEFINE_UNQUOTED(PIPE_PATH, "$pipepath", [Where to store pipe files for the SSSD interconnects]) + ]) diff --git a/server/confdb/confdb.c b/server/confdb/confdb.c index 3064101a..7d11fae7 100644 --- a/server/confdb/confdb.c +++ b/server/confdb/confdb.c @@ -20,13 +20,14 @@ */ #define _GNU_SOURCE +#include "config.h" #include <string.h> #include <errno.h> #include "ldb.h" #include "ldb_errors.h" #include "util/util.h" #define CONFDB_VERSION "0.1" -#define CONFDB_FILE "/var/lib/sss/db/config.ldb" +#define CONFDB_FILE "config.ldb" #define CONFDB_DOMAIN_BASEDN "cn=domains,cn=config" #define CONFDB_DOMAIN_ATTR "cn" @@ -417,6 +418,7 @@ int confdb_init(TALLOC_CTX *mem_ctx, struct confdb_ctx **cdb_ctx) { struct confdb_ctx *cdb; + char *confdb_location; int ret; cdb = talloc_zero(mem_ctx, struct confdb_ctx); @@ -429,12 +431,21 @@ int confdb_init(TALLOC_CTX *mem_ctx, return EIO; } - ret = ldb_connect(cdb->ldb, CONFDB_FILE, 0, NULL); + confdb_location = talloc_asprintf(cdb,"%s/%s", DB_PATH,CONFDB_FILE); + if (confdb_location == NULL) { + talloc_free(cdb); + return ENOMEM; + } + DEBUG(3, ("CONFDB: %s\n",confdb_location)); + + ret = ldb_connect(cdb->ldb, confdb_location, 0, NULL); if (ret != LDB_SUCCESS) { talloc_free(cdb); return EIO; } + talloc_free(confdb_location); + ret = confdb_test(cdb); if (ret == ENOENT) { ret = confdb_init_db(cdb); diff --git a/server/configure.ac b/server/configure.ac index 1b01a2ec..0862187d 100644 --- a/server/configure.ac +++ b/server/configure.ac @@ -29,6 +29,12 @@ EXTRA_OBJ="" m4_include(build_macros.m4) BUILD_WITH_SHARED_BUILD_DIR +m4_include(conf_macros.m4) +WITH_DB_PATH +WITH_PLUGIN_PATH +WITH_PID_PATH +WITH_PIPE_PATH + m4_include(pkg.m4) m4_include(libpopt.m4) m4_include(libtalloc.m4) diff --git a/server/monitor.c b/server/monitor.c index 4916e448..5c2ec992 100644 --- a/server/monitor.c +++ b/server/monitor.c @@ -114,14 +114,23 @@ static int monitor_dbus_init(struct mt_ctx *ctx) { struct sbus_method_ctx *sd_ctx; char *sbus_address; + char *default_monitor_address; int ret; + default_monitor_address = talloc_asprintf(ctx, "unix:path=%s/%s", + PIPE_PATH, SSSD_SERVICE_PIPE); + if (!default_monitor_address) { + return ENOMEM; + } + ret = confdb_get_string(ctx->cdb, ctx, "config/services/monitor", "sbusAddress", - DEFAULT_SBUS_ADDRESS, &sbus_address); + default_monitor_address, &sbus_address); if (ret != EOK) { + talloc_free(default_monitor_address); return ret; } + talloc_free(default_monitor_address); sd_ctx = talloc_zero(ctx, struct sbus_method_ctx); if (!sd_ctx) { diff --git a/server/nss/nss_ldb.h b/server/nss/nss_ldb.h index b7c2ba7d..3f2d6ea5 100644 --- a/server/nss/nss_ldb.h +++ b/server/nss/nss_ldb.h @@ -2,7 +2,7 @@ #define NSS_LDB_CONF_SECTION "config/services/nss" -#define NSS_DEF_LDB_PATH "/var/lib/sss/db/sssd.ldb" +#define NSS_DEF_LDB_FILE "sssd.ldb" #define NSS_DEF_USER_BASE "cn=users,cn=local" #define NSS_DEF_GROUP_BASE "cn=groups,cn=local" diff --git a/server/nss/nsssrv_ldb.c b/server/nss/nsssrv_ldb.c index 6385c5ac..8ad908a4 100644 --- a/server/nss/nsssrv_ldb.c +++ b/server/nss/nsssrv_ldb.c @@ -675,6 +675,7 @@ static int nss_ldb_read_conf(TALLOC_CTX *mem_ctx, { struct nss_ldb_ctx *ctx; TALLOC_CTX *tmp_ctx; + char *default_ldb_path; int ret; tmp_ctx = talloc_new(mem_ctx); @@ -687,8 +688,15 @@ static int nss_ldb_read_conf(TALLOC_CTX *mem_ctx, goto done; } + default_ldb_path = talloc_asprintf(tmp_ctx, "%s/%s", DB_PATH, NSS_DEF_LDB_FILE); + if (default_ldb_path == NULL) { + ret = ENOMEM; + goto done; + } + nss_ldb_read_var(tmp_ctx, cdb, ctx, "ldbFile", - NSS_DEF_LDB_PATH, &ctx->ldb_file); + default_ldb_path, &ctx->ldb_file); + DEBUG(3, ("NSS LDB Cache Path: %s\n", ctx->ldb_file)); nss_ldb_read_var(tmp_ctx, cdb, ctx, "userBase", NSS_DEF_USER_BASE, &ctx->user_base); diff --git a/server/providers/data_provider.c b/server/providers/data_provider.c index cc78c38c..0af17a7a 100644 --- a/server/providers/data_provider.c +++ b/server/providers/data_provider.c @@ -108,27 +108,45 @@ static int dp_monitor_init(struct dp_ctx *dpctx) static int dp_db_init(struct dp_ctx *dpctx) { + TALLOC_CTX *ctx; char *ldb_file; + char *default_db_file; int ret; - ret = confdb_get_string(dpctx->cdb, dpctx, + ctx = talloc_new(dpctx); + if(ctx == NULL) { + return ENOMEM; + } + + default_db_file = talloc_asprintf(ctx, "%s/%s", DB_PATH, DATA_PROVIDER_DB_FILE); + if (default_db_file == NULL) { + talloc_free(ctx); + return ENOMEM; + } + + ret = confdb_get_string(dpctx->cdb, ctx, DATA_PROVIDER_DB_CONF_SEC, "ldbFile", - DATA_PROVIDER_DEF_DB_FILE, &ldb_file); + default_db_file, &ldb_file); if (ret != EOK) { + talloc_free(ctx); return ret; } - dpctx->ldb = ldb_init(dpctx, dpctx->ev); + dpctx->ldb = ldb_init(ctx, dpctx->ev); if (!dpctx->ldb) { + talloc_free(ctx); return EIO; } ret = ldb_connect(dpctx->ldb, ldb_file, 0, NULL); if (ret != LDB_SUCCESS) { - talloc_free(dpctx->ldb); + talloc_free(ctx); return EIO; } + talloc_steal(dpctx,dpctx->ldb); + talloc_free(ctx); + return EOK; } @@ -173,44 +191,58 @@ static int dbus_dp_init(struct sbus_conn_ctx *conn_ctx, void *data) * Set up the monitor service as a D-BUS Server */ static int dp_srv_init(struct dp_ctx *dpctx) { + TALLOC_CTX *tmp_ctx; struct sbus_method_ctx *sd_ctx; char *dpbus_address; + char *default_dp_address; int ret; + tmp_ctx = talloc_new(dpctx); + if (tmp_ctx == NULL) { + return ENOMEM; + } + DEBUG(3, ("Initializing Data Provider D-BUS Server\n")); + default_dp_address = talloc_asprintf(tmp_ctx, "unix:path=%s/%s", PIPE_PATH, DATA_PROVIDER_PIPE); + if (default_dp_address == NULL) { + ret = ENOMEM; + goto done; + } - ret = confdb_get_string(dpctx->cdb, dpctx, + ret = confdb_get_string(dpctx->cdb, tmp_ctx, "config/services/dataprovider", "dpbusAddress", - DATA_PROVIDER_ADDRESS, &dpbus_address); - if (ret != EOK) { - return ret; - } + default_dp_address, &dpbus_address); + if (ret != EOK) goto done; - sd_ctx = talloc_zero(dpctx, struct sbus_method_ctx); + sd_ctx = talloc_zero(tmp_ctx, struct sbus_method_ctx); if (!sd_ctx) { - talloc_free(dpbus_address); - return ENOMEM; + ret = ENOMEM; + goto done; } /* Set up globally-available D-BUS methods */ sd_ctx->interface = talloc_strdup(sd_ctx, DATA_PROVIDER_DBUS_INTERFACE); if (!sd_ctx->interface) { - talloc_free(dpbus_address); - talloc_free(sd_ctx); - return ENOMEM; + ret = ENOMEM; + goto done; } sd_ctx->path = talloc_strdup(sd_ctx, DATA_PROVIDER_DBUS_PATH); if (!sd_ctx->path) { - talloc_free(dpbus_address); - talloc_free(sd_ctx); - return ENOMEM; + ret = ENOMEM; + goto done; } sd_ctx->methods = dp_sbus_methods; sd_ctx->message_handler = sbus_message_handler; ret = sbus_new_server(dpctx->ev, sd_ctx, dpbus_address, dbus_dp_init, dpctx); + if (ret != EOK) { + goto done; + } + talloc_steal(dpctx, sd_ctx); +done: + talloc_free(tmp_ctx); return ret; } diff --git a/server/providers/data_provider.h b/server/providers/data_provider.h index be00d51d..7df2ce10 100644 --- a/server/providers/data_provider.h +++ b/server/providers/data_provider.h @@ -30,13 +30,11 @@ #define DATA_PROVIDER_VERSION 0x0001 #define DATA_PROVIDER_SERVICE_NAME "dp" -#define DATA_PROVIDER_ADDRESS "unix:path=/var/lib/sss/pipes/private/dbus-dp" +#define DATA_PROVIDER_PIPE "sbus-dp" -#define DATA_PROVIDER_DEF_DB_FILE "/var/lib/sss/db/sssd.ldb" +#define DATA_PROVIDER_DB_FILE "sssd.ldb" #define DATA_PROVIDER_DB_CONF_SEC "config/services/nss" -#define DATA_PROVIDER_PLUGINS_PATH "/usr/lib/sssd" - struct dp_mod_ops { int (*check_online)(void *pvt_data, int *reply); }; diff --git a/server/sbus_interfaces.h b/server/sbus_interfaces.h index b0702309..a6a13ad9 100644 --- a/server/sbus_interfaces.h +++ b/server/sbus_interfaces.h @@ -38,7 +38,7 @@ #define SERVICE_METHOD_IDENTITY "getIdentity" #define SERVICE_METHOD_PING "ping" -#define DEFAULT_SBUS_ADDRESS "unix:path=/var/lib/sss/pipes/private/dbus" +#define SSSD_SERVICE_PIPE "sbus-monitor" /* Data Provider */ diff --git a/server/server.c b/server/server.c index 15dbb8d9..aef1b8d3 100644 --- a/server/server.c +++ b/server/server.c @@ -108,8 +108,6 @@ static void server_stdin_handler(struct event_context *event_ctx, struct fd_even } } -#define PID_PATH "/var/run/" - /* main server. */ diff --git a/server/util/service_helpers.c b/server/util/service_helpers.c index 0c16af89..13cca832 100644 --- a/server/util/service_helpers.c +++ b/server/util/service_helpers.c @@ -40,6 +40,7 @@ struct service_sbus_ctx *sssd_service_sbus_init(TALLOC_CTX *mem_ctx, struct sbus_method_ctx *sm_ctx; TALLOC_CTX *ctx; char *sbus_address; + char *default_monitor_address; DBusConnection *conn; int ret; @@ -49,9 +50,12 @@ struct service_sbus_ctx *sssd_service_sbus_init(TALLOC_CTX *mem_ctx, ss_ctx = talloc_zero(ctx, struct service_sbus_ctx); if (ss_ctx == NULL) return NULL; + default_monitor_address = talloc_asprintf(ctx, "unix:path=%s/%s", PIPE_PATH,SSSD_SERVICE_PIPE); + if (default_monitor_address == NULL) goto error; + ret = confdb_get_string(cdb, ctx, "config/services/monitor", "sbusAddress", - DEFAULT_SBUS_ADDRESS, &sbus_address); + default_monitor_address, &sbus_address); if (ret != EOK) goto error; ss_ctx->ev = ev; diff --git a/server/util/util.h b/server/util/util.h index 897e3541..6e30cfd2 100644 --- a/server/util/util.h +++ b/server/util/util.h @@ -28,8 +28,6 @@ void debug_fn(const char *format, ...); #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x)) -#define PID_DIR "/var/run/sssd" - #define EOK 0 #include "util/dlinklist.h" |