LINUX.ORG.RU

История изменений

Исправление KennyMinigun, (текущая версия) :

Ищешь чем: программа, API?

Опишу для C API, как наиболее универсальный:

/* вот тут наши группы */
char base[] = "dc=my-domain,dc=ru"; 
/* ишем только группы в которых есть юзеры */
char filter[] = "(& (objectClass=groupOfUniqueNames) (uniqueMember=*))";
/* нам нужен только uniqueMember */
char uniqMembr[] = "uniqueMember";
char *attrs[] = { uniqMembr, NULL };
/* результат */
LDAPMessage *res;

int err = ldap_search_s(ld, /* = ldap_init(...) */
                      base, 
                      LDAP_SCOPE_ONELEVEL, /* полагаю вложенных групп нет? */
                      filter, attrs, 0, &res);
if (err && err != LDAP_SIZELIMIT_EXCEEDED) {
    fprintf(stderr, "ldap error: %s", ldap_err2string(err));
    exit(EXIT_FAILURE);
}

LDAPMessage *msg = ldap_first_entry(ld, res);
while (msg) {
    char **values = ldap_get_values(ld, msg, uniqMembr);
    for (char **i = values; *i; i++) {
        printf("member: %s\n", *i);
    }
    ldap_value_free(values);

    msg = ldap_next_entry(ld, msg);
}

ldap_msgfee(res);

Исправление KennyMinigun, :

Ищешь чем: программа, API?

Опишу для C API, как наиболее универсальный:

/* вот тут наши группы */
char base[] = "dc=my-domain,dc=ru"; 
/* ишем только группы в которых есть юзеры */
char filter[] = "(& (objectClass=groupOfUniqueNames) (uniqueMember=*))";
/* нам нужен только uniqueMember */
char uniqMembr[] = "uniqueMember";
char *attrs[] = { uniqMembr, NULL };
/* результат */
LDAPMessage *res;

int err = ldap_search(ld, /* = ldap_init(...) */
                      base, 
                      LDAP_SCOPE_ONELEVEL, /* полагаю вложенных групп нет? */
                      filter, attrs, 0, &res);
if (err && err != LDAP_SIZELIMIT_EXCEEDED) {
    fprintf(stderr, "ldap error: %s", ldap_err2string(err));
    exit(EXIT_FAILURE);
}

LDAPMessage *msg = ldap_first_entry(ld, res);
while (msg) {
    char **values = ldap_get_values(ld, msg, uniqMembr);
    for (char **i = values; *i; i++) {
        printf("member: %s\n", *i);
    }
    ldap_value_free(values);

    msg = ldap_next_entry(ld, msg);
}

ldap_msgfee(res);

Исправление KennyMinigun, :

Ищешь чем: программа, API?

Опишу для C API, как наиболее универсальный:

/* вот тут наши группы */
char base[] = "dc=my-domain,dc=ru"; 
/* ишем только группы в которых есть юзеры */
char filter[] = "(& (objectClass=groupOfUniqueNames) (uniqueMember=*))";
/* нам нужен только uniqueMember */
char uniqMembr[] = "uniqueMember";
char *attrs[] = { uniqMembr, NULL };
/* результат */
LDAPMessage *res;

int err = ldap_search(ld, /* = ldap_init(...) */
                      base, 
                      LDAP_SCOPE_ONELEVEL, /* полагаю вложенных групп нет? */
                      filter, attrs, 0, &res);
if (err && err != SIZE_LIMIT_EXCEEDED) {
    fprintf(stderr, "ldap error: %s", ldap_err2string(err));
    exit(EXIT_FAILURE);
}

LDAPMessage *msg = ldap_first_entry(ld, res);
while (msg) {
    char **values = ldap_get_values(ld, msg, uniqMembr);
    for (char **i = values; *i; i++) {
        printf("member: %s\n", *i);
    }
    ldap_value_free(values);

    msg = ldap_next_entry(ld, msg);
}

ldap_msgfee(res);

Исправление KennyMinigun, :

Ищешь чем: программа, API?

Опишу для C API, как наиболее универсальный:

/* вот тут наши группы */
char base[] = "dc=my-domain,dc=ru"; 
/* ишем только группы в которых есть юзеры */
char filter[] = "(& (objectClass=groupOfUniqueNames) (uniqueMember=*))";
/* нам нужен только uniqueMember */
char uniqMembr[] = "uniqueMember";
char *attrs[] = { uniqMembr, NULL };
/* результат */
LDAPMessage *res;

int err = ldap_search(ld, /* = ldap_init(...) */
                      base, 
                      LDAP_SCOPE_ONELEVEL, /* полагаю вложенных групп нет? */
                      filter, attrs, 0, &res);
if (err && err != SIZE_LIMIT_EXCEEDED) {
    fprintf(stderr, "ldap error: %s", ldap_err2string(err));
    exit(EXIT_FAILURE);
}

LDAPMessage *msg = ldap_first_entry(ld, res);
while (msg) {
    char **values = ldap_get_values(ld, msg, uniqMembr);
    for (char **i = values; *i; i++) {
        printf("member: %s\n", *i);
    }
    ldap_value_free(values);

    msg = ldap_next_entry(ld, msg);
}

ldap_msgfee(msg);

Исходная версия KennyMinigun, :

Ищешь чем: программа, API?

Опишу для C API, как наиболее универсальный:

/* вот тут наши группы */
char base[] = "dc=my-domain,dc=ru"; 
/* ишем только группы в которых есть юзеры */
char filter[] = "(& (objectClass=groupOfUniqueNames) (uniqueMember=*))";
/* нам нужен только uniqueMember */
char uniqMembr[] = "uniqueMember";
char *attrs[] = { uniqMembr, NULL };
/* результат */
LDAPMessage *res;

int err = ldap_search(ld, /* = ldap_init(...) */
                      base, 
                      LDAP_SCOPE_ONELEVEL, /* полагаю вложенных групп нет? */
                      filter, attrs, 0, &res);
if (err && err != SIZE_LIMIT_EXCEEDED) {
    fprintf(stderr, "ldap error: %s", ldap_err2string(err));
    exit(EXIT_FAILURE);
}

LDAPMessage *msg = ldap_first_entry(ld, res);
do {
    char **values = ldap_get_values(ld, msg, uniqMembr);
    for (char **i = values; *i; i++) {
        printf("member: %s\n", *i);
    }
    ldap_value_free(values);

    msg = ldap_next_entry(ld, msg);
} while (msg);
ldap_msgfee(msg);