diff options
Diffstat (limited to 'src/providers/files/files_init.c')
-rw-r--r-- | src/providers/files/files_init.c | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/providers/files/files_init.c b/src/providers/files/files_init.c new file mode 100644 index 000000000..b91dfbac9 --- /dev/null +++ b/src/providers/files/files_init.c @@ -0,0 +1,92 @@ +/* + SSSD + + files_init.c - Initialization of the files provider + + Copyright (C) 2016 Red Hat + + 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 <http://www.gnu.org/licenses/>. +*/ + +#include "providers/data_provider/dp.h" +#include "providers/files/files_private.h" + +int sssm_files_init(TALLOC_CTX *mem_ctx, + struct be_ctx *be_ctx, + struct data_provider *provider, + const char *module_name, + void **_module_data) +{ + struct files_id_ctx *ctx; + int ret; + const char *passwd_file = NULL; + const char *group_file = NULL; + + /* So far this is mostly useful for tests */ + passwd_file = getenv("SSS_FILES_PASSWD"); + if (passwd_file == NULL) { + passwd_file = "/etc/passwd"; + } + + group_file = getenv("SSS_FILES_GROUP"); + if (group_file == NULL) { + group_file = "/etc/group"; + } + + ctx = talloc_zero(mem_ctx, struct files_id_ctx); + if (ctx == NULL) { + return ENOMEM; + } + ctx->be = be_ctx; + ctx->domain = be_ctx->domain; + ctx->passwd_file = passwd_file; + ctx->group_file = group_file; + + ctx->fctx = sf_init(ctx, be_ctx->ev, + ctx->passwd_file, ctx->group_file, + ctx); + if (ctx->fctx == NULL) { + ret = ENOMEM; + goto done; + } + + *_module_data = ctx; + ret = EOK; +done: + if (ret != EOK) { + talloc_free(ctx); + } + return ret; +} + +int sssm_files_id_init(TALLOC_CTX *mem_ctx, + struct be_ctx *be_ctx, + void *module_data, + struct dp_method *dp_methods) +{ + struct files_id_ctx *ctx; + + ctx = talloc_get_type(module_data, struct files_id_ctx); + if (ctx == NULL) { + return EINVAL; + } + + dp_set_method(dp_methods, DPM_ACCOUNT_HANDLER, + files_account_info_handler_send, + files_account_info_handler_recv, + ctx, struct files_id_ctx, + struct dp_id_data, struct dp_reply_std); + + return EOK; +} |