sdap_async_groups.c revision 3931c6612fae5ad32ad81a59f77d77c2d896ebe1
553N/A along with this program. If not, see <http://www.gnu.org/licenses/>.
0N/A#include "providers/ldap/sdap_async_private.h"
0N/A#include "providers/ldap/ldap_common.h"
0N/A#include "providers/ldap/sdap_idmap.h"
0N/A#include "providers/ad/ad_common.h"
0N/A char *sanitized_dn;
0N/A const char *objectclass;
return EOK;
return ret;
if (!localdn) {
return ENOMEM;
for (i=0; i < count; i++) {
if (!localdn[i]) {
return ENOMEM;
return EOK;
static errno_t
&gid);
*_count = 0;
return EOK;
return ret;
return EOK;
char *member)
char **userdns,
for (i=0; i < nuserdns; i++) {
int num_values,
char **userdns,
int ret;
if (ret) {
goto done;
goto done;
for (i = 0; i < num_values; i++) {
NULL);
goto done;
goto done;
done:
return ret;
static errno_t
const char *name,
bool posix_group,
if (!posix_group) {
if (ret) {
return ret;
if (ret) {
return ret;
return ret;
static errno_t
bool populate_members,
bool store_original_member,
int hret;
return ret;
false, &memberel);
return ENOMEM;
return ret;
if (store_original_member) {
if (ret) {
return ret;
if (populate_members) {
return ret;
return ret;
return ENOMEM;
return EFAULT;
return ENOMEM;
return EOK;
bool populate_members,
bool store_original_member,
char **_usn_value,
bool posix_group;
bool use_id_mapping;
bool need_filter;
char *sid_str;
if (!tmpctx) {
goto done;
goto done;
&sid_str);
goto done;
sid_str);
if (subdomain) {
goto done;
posix_group = true;
&need_filter);
goto done;
if (need_filter) {
posix_group = false;
gid = 0;
goto done;
if (posix_group) {
sid_str);
if (use_id_mapping) {
posix_group = true;
goto done;
goto done;
goto done;
if (ret) {
goto done;
posix_group = true;
goto done;
goto done;
&gid);
goto done;
if (posix_group) {
goto done;
goto done;
goto done;
if (ret) {
goto done;
if (ret) {
goto done;
if (!usn_value) {
goto done;
goto done;
goto done;
if (ret) {
goto done;
if (_usn_value) {
done:
if (ret) {
return ret;
static errno_t
bool result;
return EINVAL;
return EINVAL;
return EOK;
static errno_t
const char *group_name,
const char *group_sid,
char ***_userdns,
bool same_domain;
size_t i, n;
return ENOMEM;
goto done;
nuserdns++;
goto done;
done:
return ret;
const char *group_sid;
const char *group_name;
int ret;
return EOK;
&group_name);
goto fail;
goto fail;
goto fail;
if (!group_attrs) {
goto fail;
if (ret) {
goto fail;
if (ret) {
goto fail;
return EOK;
fail:
return ret;
int num_groups,
bool populate_members,
bool save_orig_member,
char **_usn_value)
char *usn_value;
bool twopass;
bool has_nesting = false;
int ret;
int nsaved_groups = 0;
bool in_transaction = false;
case SDAP_SCHEMA_RFC2307:
twopass = false;
case SDAP_SCHEMA_RFC2307BIS:
case SDAP_SCHEMA_IPA_V1:
case SDAP_SCHEMA_AD:
twopass = true;
has_nesting = true;
return EINVAL;
if (!tmpctx) {
return ENOMEM;
if (ret) {
goto done;
in_transaction = true;
if (!saved_groups) {
goto done;
for (i = 0; i < num_groups; i++) {
if (ret) {
if (usn_value) {
if (higher_usn) {
for (i = 0; i < nsaved_groups; i++) {
if (ret) {
if (ret) {
goto done;
in_transaction = false;
if (_usn_value) {
done:
if (in_transaction) {
return ret;
struct sdap_process_group_state {
char **queued_members;
int queue_len;
const char **attrs;
const char *filter;
bool enumeration;
return ENOMEM;
return ENOMEM;
return EOK;
static struct tevent_req *
bool enumeration)
const char **attrs;
char* filter;
int ret;
struct sdap_process_group_state);
if (ret) {
goto done;
if (!filter) {
return NULL;
&el);
if (ret) {
goto done;
goto done;
&ghostel);
if (ret) {
goto done;
&el);
goto done;
goto done;
goto done;
case SDAP_SCHEMA_RFC2307:
case SDAP_SCHEMA_IPA_V1:
case SDAP_SCHEMA_AD:
case SDAP_SCHEMA_RFC2307BIS:
done:
return req;
char *user_dn,
unsigned num_users)
return ENOMEM;
if (!subreq) {
return ENOMEM;
return EOK;
char *member_dn;
char *strdn;
int ret;
int nesting_level;
bool is_group;
&strdn,
&is_group);
i, member_dn);
return ret;
return ret;
return ret;
const char *username)
return ENOMEM;
return EOK;
char *member_name)
int ret;
const char *filter;
const char *username;
const char *user_dn;
if (!filter) {
goto done;
goto done;
goto done;
return ENOMEM;
done:
return ret;
char *member_attr_val;
char *member_name;
char *userdn;
int ret;
return ENOMEM;
return ENOMEM;
goto done;
i, member_name);
i, member_name);
goto done;
goto done;
done:
return ret;
int ret;
if (ret) {
goto next;
goto next;
if (ret) {
goto next;
next:
if (ret) {
if (!subreq) {
&el);
return EOK;
struct sdap_get_groups_state {
const char **attrs;
const char *base_filter;
char *filter;
int timeout;
bool no_members;
char *higher_usn;
const char **attrs,
const char *filter,
int timeout,
bool no_members)
goto done;
goto done;
goto done;
req);
return req;
done:
return req;
int ret;
int dp_error;
bool need_paging = false;
int sizelimit = 0;
return ENOMEM;
case SDAP_LOOKUP_SINGLE:
case SDAP_LOOKUP_WILDCARD:
need_paging = true;
case SDAP_LOOKUP_ENUMERATE:
need_paging = true;
if (!subreq) {
return ENOMEM;
return EOK;
int ret;
bool next_base = false;
char **groupnamelist;
if (ret) {
count == 0) {
next_base = true;
if (count > 0) {
struct sysdb_attrs *,
if (next_base) {
* for RFC2307bis/FreeIPA/ActiveDirectory
if (!subreq) {
if (!subreq) {
req);
if (ret) {
if (!subreq) {
bool filter;
int ret;
if (ret) {
if (ret) {
int num_users,
struct sdap_get_groups_state);
size_t i;
goto done;
goto done;
if (!tmp_ctx) {
goto done;
&ghosts);
goto done;
goto done;
for (i = 0; i < count; i++) {
&orig_dn_el);
goto done;
goto done;
done:
struct sdap_get_groups_state);
if (usn_value) {
return EOK;
unsigned long user_count;
unsigned long group_count;
bool in_transaction = false;
struct tevent_req);
struct sdap_get_groups_state);
goto fail;
goto fail;
in_transaction = true;
goto fail;
goto fail;
goto fail;
in_transaction = false;
goto fail;
fail:
if (in_transaction) {
struct tevent_req);
struct sdap_get_groups_state);
int num_users,
const char *username;
char *clean_orig_dn;
const char *original_dn;
char *filter;
const char *sysdb_name;
bool in_transaction = false;
return EINVAL;
if (num_users == 0) {
return EOK;
goto done;
if (ret) {
goto done;
in_transaction = true;
for (i = 0; i < num_users; i++) {
goto done;
goto done;
if (!filter) {
goto done;
goto done;
if (!attrs) {
goto done;
goto done;
if (ret) {
goto done;
in_transaction = false;
done:
if (in_transaction) {
return ret;