int sysdb_getgrnam_sync(TALLOC_CTX *mem_ctx, const char *name, struct ops_ctx *out) { struct ldb_result *res; const char *str; int ret; out->sysdb_fqname = sss_create_internal_fqname(out, name, out->domain->name); if (out->sysdb_fqname == NULL) { return ENOMEM; } ret = sysdb_getgrnam(mem_ctx, out->domain, out->sysdb_fqname, &res); if (ret) { return ret; } switch (res->count) { case 0: DEBUG(SSSDBG_CRIT_FAILURE, "No result for sysdb_getgrnam call\n"); return ENOENT; 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); ret = sss_parse_internal_fqname(out, str, &out->name, NULL); if (ret != EOK) { return ENOMEM; } if (out->name == NULL) { return ENOMEM; } break; default: DEBUG(SSSDBG_CRIT_FAILURE, "More than one result for sysdb_getgrnam call\n"); return EIO; } return EOK; }
int sysdb_getgrnam_sync(TALLOC_CTX *mem_ctx, struct sysdb_ctx *sysdb, const char *name, struct ops_ctx *out) { struct ldb_result *res; const char *str; int ret; ret = sysdb_getgrnam(mem_ctx, sysdb, name, &res); if (ret) { return ret; } switch (res->count) { case 0: DEBUG(1, ("No result for sysdb_getgrnam call\n")); return ENOENT; 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; default: DEBUG(1, ("More than one result for sysdb_getgrnam call\n")); return EIO; } return EOK; }