История изменений
Исправление 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);