Example #1
0
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;
}
Example #2
0
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;
}