c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek/*
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek SSSD
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek files_init.c - Initialization of the files provider
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek Copyright (C) 2016 Red Hat
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek This program is free software; you can redistribute it and/or modify
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek it under the terms of the GNU General Public License as published by
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek the Free Software Foundation; either version 3 of the License, or
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek (at your option) any later version.
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek This program is distributed in the hope that it will be useful,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek but WITHOUT ANY WARRANTY; without even the implied warranty of
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek GNU General Public License for more details.
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek You should have received a copy of the GNU General Public License
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek along with this program. If not, see <http://www.gnu.org/licenses/>.
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek*/
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek#include "providers/data_provider/dp.h"
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek#include "providers/files/files_private.h"
c1208b485924964a7a4fcf19562964acb47fc214Justin Stephenson#include "util/util.h"
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson#define DEFAULT_PASSWD_FILE "/etc/passwd"
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson#define DEFAULT_GROUP_FILE "/etc/group"
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephensonstatic errno_t files_init_file_sources(TALLOC_CTX *mem_ctx,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson struct be_ctx *be_ctx,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson const char ***_passwd_files,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson const char ***_group_files)
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson{
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson TALLOC_CTX *tmp_ctx = NULL;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson char *conf_passwd_files;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson char *conf_group_files;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson char **passwd_list = NULL;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson char **group_list = NULL;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson int num_passwd_files = 0;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson int num_group_files = 0;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson const char **passwd_files = NULL;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson const char **group_files = NULL;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson const char *dfl_passwd_files = NULL;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson const char *env_group_files = NULL;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson int i;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson errno_t ret;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson tmp_ctx = talloc_new(NULL);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (tmp_ctx == NULL) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = ENOMEM;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson dfl_passwd_files = getenv("SSS_FILES_PASSWD");
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (dfl_passwd_files) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson sss_log(SSS_LOG_ALERT,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "Defaulting to %s for the passwd file, "
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "this should only be used for testing!\n",
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson dfl_passwd_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson } else {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson dfl_passwd_files = DEFAULT_PASSWD_FILE;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_TRACE_FUNC,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "Using default passwd file: [%s].\n", dfl_passwd_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson env_group_files = getenv("SSS_FILES_GROUP");
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (env_group_files) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson sss_log(SSS_LOG_ALERT,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "Defaulting to %s for the group file, "
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "this should only be used for testing!\n",
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson env_group_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson } else {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson env_group_files = DEFAULT_GROUP_FILE;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_TRACE_FUNC,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "Using default group file: [%s].\n", DEFAULT_GROUP_FILE);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = confdb_get_string(be_ctx->cdb, tmp_ctx, be_ctx->conf_path,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson CONFDB_FILES_PASSWD, dfl_passwd_files,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson &conf_passwd_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (ret != EOK) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_CRIT_FAILURE, "Failed to retrieve confdb passwd files!\n");
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = confdb_get_string(be_ctx->cdb, tmp_ctx, be_ctx->conf_path,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson CONFDB_FILES_GROUP, env_group_files,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson &conf_group_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (ret != EOK) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_CRIT_FAILURE, "Failed to retrieve confdb group files!\n");
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = split_on_separator(tmp_ctx, conf_passwd_files, ',', true, true,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson &passwd_list, &num_passwd_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (ret != EOK) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_CRIT_FAILURE,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "Failed to parse passwd list!\n");
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson passwd_files = talloc_zero_array(tmp_ctx, const char *,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson num_passwd_files + 1);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (passwd_files == NULL) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_CRIT_FAILURE, "talloc_zero_array() failed\n");
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = ENOMEM;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson for (i = 0; i < num_passwd_files; i++) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_TRACE_FUNC,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "Using passwd file: [%s].\n", passwd_list[i]);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson passwd_files[i] = talloc_strdup(passwd_files, passwd_list[i]);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (passwd_files[i] == NULL) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = ENOMEM;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson /* Retrieve list of group files */
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = split_on_separator(tmp_ctx, conf_group_files, ',', true, true,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson &group_list, &num_group_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (ret != EOK) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_CRIT_FAILURE,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "Failed to parse group files!\n");
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson group_files = talloc_zero_array(tmp_ctx, const char *,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson num_group_files + 1);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (group_files == NULL) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_CRIT_FAILURE, "talloc_zero_array() failed\n");
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = ENOMEM;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson for (i = 0; i < num_group_files; i++) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_TRACE_FUNC,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson "Using group file: [%s].\n", group_list[i]);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson group_files[i] = talloc_strdup(group_files, group_list[i]);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (group_files[i] == NULL) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = ENOMEM;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson *_passwd_files = talloc_steal(mem_ctx, passwd_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson *_group_files = talloc_steal(mem_ctx, group_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = EOK;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephensondone:
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson talloc_free(tmp_ctx);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson return ret;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson}
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozekint sssm_files_init(TALLOC_CTX *mem_ctx,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek struct be_ctx *be_ctx,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek struct data_provider *provider,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek const char *module_name,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek void **_module_data)
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek{
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek struct files_id_ctx *ctx;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson errno_t ret;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek ctx = talloc_zero(mem_ctx, struct files_id_ctx);
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek if (ctx == NULL) {
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek return ENOMEM;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek }
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek ctx->be = be_ctx;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek ctx->domain = be_ctx->domain;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ret = files_init_file_sources(ctx, be_ctx,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson &ctx->passwd_files,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson &ctx->group_files);
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson if (ret != EOK) {
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson DEBUG(SSSDBG_CRIT_FAILURE, "Cannot initialize the passwd/group source files\n");
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson goto done;
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson }
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek ctx->fctx = sf_init(ctx, be_ctx->ev,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ctx->passwd_files,
0d6d493f68bb83a046d351cb3035b08ef5456b50Justin Stephenson ctx->group_files,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek ctx);
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek if (ctx->fctx == NULL) {
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek ret = ENOMEM;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek goto done;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek }
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek *_module_data = ctx;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek ret = EOK;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozekdone:
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek if (ret != EOK) {
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek talloc_free(ctx);
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek }
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek return ret;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek}
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozekint sssm_files_id_init(TALLOC_CTX *mem_ctx,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek struct be_ctx *be_ctx,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek void *module_data,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek struct dp_method *dp_methods)
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek{
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek struct files_id_ctx *ctx;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek ctx = talloc_get_type(module_data, struct files_id_ctx);
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek if (ctx == NULL) {
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek return EINVAL;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek }
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek dp_set_method(dp_methods, DPM_ACCOUNT_HANDLER,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek files_account_info_handler_send,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek files_account_info_handler_recv,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek ctx, struct files_id_ctx,
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek struct dp_id_data, struct dp_reply_std);
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek
c0f9f5a0f6d71a1596ee3cef549b4b02295313c3Jakub Hrozek dp_set_method(dp_methods, DPM_ACCT_DOMAIN_HANDLER,
c0f9f5a0f6d71a1596ee3cef549b4b02295313c3Jakub Hrozek default_account_domain_send,
c0f9f5a0f6d71a1596ee3cef549b4b02295313c3Jakub Hrozek default_account_domain_recv,
c0f9f5a0f6d71a1596ee3cef549b4b02295313c3Jakub Hrozek NULL, void,
c0f9f5a0f6d71a1596ee3cef549b4b02295313c3Jakub Hrozek struct dp_get_acct_domain_data, struct dp_reply_std);
c0f9f5a0f6d71a1596ee3cef549b4b02295313c3Jakub Hrozek
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek return EOK;
c71e0a6710418991d759a329b8dcb77c7ad3e16eJakub Hrozek}