From 25465215742b9c78566d44cd06a886c4a4e43ffa Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Sun, 14 Mar 2010 19:50:53 -0400 Subject: sysdb: convert sysdb_getgrnam --- src/tools/sss_sync_ops.c | 81 ++++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 57 deletions(-) (limited to 'src/tools/sss_sync_ops.c') diff --git a/src/tools/sss_sync_ops.c b/src/tools/sss_sync_ops.c index 70203cf2f..f3721a018 100644 --- a/src/tools/sss_sync_ops.c +++ b/src/tools/sss_sync_ops.c @@ -666,75 +666,42 @@ int sysdb_getpwnam_sync(TALLOC_CTX *mem_ctx, return EOK; } -static void sss_getgrnam_done(void *ptr, int status, - struct ldb_result *lrs); - int sysdb_getgrnam_sync(TALLOC_CTX *mem_ctx, struct tevent_context *ev, struct sysdb_ctx *sysdb, const char *name, struct sss_domain_info *domain, - struct ops_ctx **out) + struct ops_ctx *out) { + struct ldb_result *res; + const char *str; int ret; - struct sync_op_res *res = NULL; - res = talloc_zero(mem_ctx, struct sync_op_res); - if (!res) { - return ENOMEM; - } - - if (out == NULL) { - DEBUG(1, ("NULL passed for storage pointer\n")); - return EINVAL; + ret = sysdb_getgrnam(mem_ctx, sysdb, domain, name, &res); + if (ret) { + return ret; } - res->data = *out; - - ret = sysdb_getgrnam(mem_ctx, - sysdb, - domain, - name, - sss_getgrnam_done, - res); - SYNC_LOOP(res, ret); - - return ret; -} + switch (res->count) { + case 0: + DEBUG(1, ("No result for sysdb_getgrnam call\n")); + return ENOENT; -static void sss_getgrnam_done(void *ptr, int status, - struct ldb_result *lrs) -{ - struct sync_op_res *res = talloc_get_type(ptr, struct sync_op_res ); - const char *str; + case 1: + /* fill ops_ctx */ + out->gid = ldb_msg_find_attr_as_uint64(res->msgs[0], SYSDB_GIDNUM, 0); + str = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_NAME, NULL); + out->name = talloc_strdup(out, str); + if (out->name == NULL) { + return ENOMEM; + } + break; - res->done = true; - - if (status != LDB_SUCCESS) { - res->error = status; - return; - } - - switch (lrs->count) { - case 0: - DEBUG(1, ("No result for sysdb_getgrnam call\n")); - res->error = ENOENT; - break; - - /* sysdb_getgrnam also returns members */ - default: - res->error = EOK; - /* fill ops_ctx */ - res->data->gid = ldb_msg_find_attr_as_uint64(lrs->msgs[0], - SYSDB_GIDNUM, 0); - str = ldb_msg_find_attr_as_string(lrs->msgs[0], - SYSDB_NAME, NULL); - res->data->name = talloc_strdup(res, str); - if (res->data->name == NULL) { - res->error = ENOMEM; - return; - } - break; + default: + DEBUG(1, ("More than one result for sysdb_getgrnam call\n")); + return EIO; } + + return EOK; } -- cgit