ifp_groups.c revision e9a2e7afbd09c23dd8748246e09831ed7b17d7c5
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina Pavel Březina <pbrezina@redhat.com>
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina Copyright (C) 2015 Red Hat
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina This program is free software; you can redistribute it and/or modify
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina it under the terms of the GNU General Public License as published by
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina the Free Software Foundation; either version 3 of the License, or
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina (at your option) any later version.
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina This program is distributed in the hope that it will be useful,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina but WITHOUT ANY WARRANTY; without even the implied warranty of
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina GNU General Public License for more details.
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina You should have received a copy of the GNU General Public License
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina along with this program. If not, see <http://www.gnu.org/licenses/>.
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina#include "responder/common/responder_cache_req.h"
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březinachar * ifp_groups_build_path_from_msg(TALLOC_CTX *mem_ctx,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina const char *gid;
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina gid = ldb_msg_find_attr_as_string(msg, SYSDB_GIDNUM, NULL);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina return sbus_opath_compose(mem_ctx, IFP_PATH_GROUPS, domain->name, gid);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březinastatic errno_t ifp_groups_decompose_path(struct sss_domain_info *domains,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina ret = sbus_opath_decompose_exact(NULL, path, IFP_PATH_GROUPS, 2, &parts);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina domain = find_domain_by_name(domains, parts[0], false);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březinastatic int ifp_groups_list_copy(struct ifp_list_ctx *list_ctx,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina copy_count = ifp_list_ctx_remaining_capacity(list_ctx, result->count);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina for (i = 0; i < copy_count; i++) {
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina ifp_groups_build_path_from_msg(list_ctx->paths,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina if (list_ctx->paths[list_ctx->path_count + i] == NULL) {
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březinastatic void ifp_groups_find_by_name_done(struct tevent_req *req);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březinaint ifp_groups_find_by_name(struct sbus_request *sbus_req,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Invalid pointer!\n");
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina req = cache_req_group_by_name_send(sbus_req, ctx->rctx->ev, ctx->rctx,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina tevent_req_set_callback(req, ifp_groups_find_by_name_done, sbus_req);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březinaifp_groups_find_by_name_done(struct tevent_req *req)
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina sbus_req = tevent_req_callback_data(req, struct sbus_request);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina ret = cache_req_group_by_name_recv(sbus_req, req, &result, &domain, NULL);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina error = sbus_error_new(sbus_req, SBUS_ERROR_NOT_FOUND,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina "Group not found");
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina error = sbus_error_new(sbus_req, DBUS_ERROR_FAILED, "Failed to fetch "
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina object_path = ifp_groups_build_path_from_msg(sbus_req, domain,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina error = sbus_error_new(sbus_req, SBUS_ERROR_INTERNAL,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina "Failed to compose object path");
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina sbus_request_fail_and_finish(sbus_req, error);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina iface_ifp_groups_FindByName_finish(sbus_req, object_path);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březinastatic void ifp_groups_find_by_id_done(struct tevent_req *req);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březinaint ifp_groups_find_by_id(struct sbus_request *sbus_req,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina DEBUG(SSSDBG_CRIT_FAILURE, "Invalid pointer!\n");
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina req = cache_req_group_by_id_send(sbus_req, ctx->rctx->ev, ctx->rctx,
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březina tevent_req_set_callback(req, ifp_groups_find_by_id_done, sbus_req);
d87e960c17d7598781cf032d06ba03a3ecadbfa2Pavel Březinaifp_groups_find_by_id_done(struct tevent_req *req)
char *object_path;
goto done;
goto done;
goto done;
done:
void *data,
const char *filter,
return ERR_INTERNAL;
return ENOMEM;
return ENOMEM;
return EOK;
void *data,
const char *domain,
const char *filter,
return ERR_INTERNAL;
return ENOMEM;
return ENOMEM;
return EOK;
goto done;
goto done;
goto done;
done:
static errno_t
void *data,
return ERR_INTERNAL;
return ret;
return ret;
struct resolv_ghosts_state {
void *data;
const char **ghosts;
int index;
void *data)
const char *name;
return NULL;
goto immediately;
goto immediately;
goto immediately;
goto immediately;
return req;
return req;
goto done;
goto done;
goto done;
goto done;
done:
return EOK;
return ENOMEM;
return EAGAIN;
goto done;
done:
return EOK;
void *data)
return ERR_INTERNAL;
return ENOMEM;
sbus_req);
return EOK;
void *data,
const char **_out)
const char *in_name;
void *data,
*_out = 0;
void *data,
const char **_out)
*_out = 0;
static errno_t
void *data,
const char ***_users,
int *_num_users,
const char ***_groups,
int *_num_groups)
const char *class;
const char **users;
const char **groups;
int num_users;
int num_groups;
return ENOMEM;
goto done;
goto done;
if (num_members == 0) {
num_users = 0;
num_groups = 0;
goto done;
goto done;
goto done;
num_users = 0;
num_groups = 0;
for (i = 0; i < num_members; i++) {
NULL);
goto done;
members[i]);
goto done;
num_users++;
goto done;
num_groups++;
goto done;
done:
return ret;
void *data,
const char ***_out,
int *_size)
*_size = 0;
void *data,
const char ***_out,
int *_size)
*_size = 0;
void *data)
void *data,
const char *domain)
void *data)
void *data)