summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNalin Dahyabhai <nalin@dahyabhai.net>2013-08-27 13:13:34 -0400
committerNalin Dahyabhai <nalin@dahyabhai.net>2013-08-27 13:13:34 -0400
commitdab89acaacfc083b9e1141afd69fa98dfe0e9e39 (patch)
treea0c75c925885c875d31ffdc9e6fe3f45ec8a5b93 /src
parent62fa6090c6f7ecb7861814cb5f6e7677235f9de5 (diff)
downloadslapi-nis-dab89acaacfc083b9e1141afd69fa98dfe0e9e39.tar.gz
slapi-nis-dab89acaacfc083b9e1141afd69fa98dfe0e9e39.tar.xz
slapi-nis-dab89acaacfc083b9e1141afd69fa98dfe0e9e39.zip
Break out passwd-to-slapi_entry conversion
Break out a backend_make_user_entry_from_nsswitch_passwd function for converting a passwd structure to an entry, and rename the helper for groups to match it.
Diffstat (limited to 'src')
-rw-r--r--src/back-sch-nss.c125
1 files changed, 70 insertions, 55 deletions
diff --git a/src/back-sch-nss.c b/src/back-sch-nss.c
index 4c8eb0c..fd13c8e 100644
--- a/src/back-sch-nss.c
+++ b/src/back-sch-nss.c
@@ -178,61 +178,30 @@ backend_build_dn(const char *attribute, const char *value,
}
static Slapi_Entry *
-backend_retrieve_user_entry_from_nsswitch(char *user_name, bool_t is_uid,
- char *container_sdn,
- struct backend_search_cbdata *cbdata)
+backend_make_user_entry_from_nsswitch_passwd(struct passwd *pwd,
+ char *container_sdn,
+ struct backend_search_cbdata *cbdata)
{
- struct passwd pwd, *result;
Slapi_Entry *entry;
- int rc;
+ int rc, i;
char *name;
char *dn = NULL;
- char *buf = NULL;
#ifdef HAVE_SSS_NSS_IDMAP
enum sss_id_type id_type;
char *sid_str;
#endif
-repeat:
- if (cbdata->nsswitch_buffer == NULL) {
- return NULL;
- }
-
- if (is_uid) {
- rc = getpwuid_r((uid_t) atoll(user_name), &pwd,
- cbdata->nsswitch_buffer,
- cbdata->nsswitch_buffer_len, &result);
- } else {
- rc = getpwnam_r(user_name, &pwd,
- cbdata->nsswitch_buffer,
- cbdata->nsswitch_buffer_len, &result);
- }
- if ((result == NULL) || (rc != 0)) {
- if (rc == ERANGE) {
- buf = realloc(cbdata->nsswitch_buffer, cbdata->nsswitch_buffer_len * 2);
- if (buf != NULL) {
- cbdata->nsswitch_buffer = buf;
- goto repeat;
- }
- }
- return NULL;
- }
-
- if (pwd.pw_uid < cbdata->nsswitch_min_id) {
- return NULL;
- }
-
entry = slapi_entry_alloc();
if (entry == NULL) {
return NULL;
}
- dn = backend_build_dn("uid", pwd.pw_name, container_sdn);
+ dn = backend_build_dn("uid", pwd->pw_name, container_sdn);
if (dn == NULL) {
slapi_log_error(SLAPI_LOG_FATAL,
cbdata->state->plugin_desc->spd_id,
"error building DN for uid=%s,%s skipping\n",
- pwd.pw_name, container_sdn);
+ pwd->pw_name, container_sdn);
slapi_entry_free(entry);
return NULL;
}
@@ -244,32 +213,32 @@ repeat:
slapi_entry_add_string(entry,
"objectClass", "extensibleObject");
slapi_entry_add_string(entry,
- "uid", pwd.pw_name);
+ "uid", pwd->pw_name);
slapi_entry_attr_set_uint(entry,
- "uidNumber", pwd.pw_uid);
+ "uidNumber", pwd->pw_uid);
slapi_entry_attr_set_uint(entry,
- "gidNumber", pwd.pw_gid);
+ "gidNumber", pwd->pw_gid);
slapi_entry_add_string(entry,
- "gecos", pwd.pw_gecos);
- if (strlen(pwd.pw_gecos) > 0) {
+ "gecos", pwd->pw_gecos);
+ if (strlen(pwd->pw_gecos) > 0) {
slapi_entry_add_string(entry,
- "cn", pwd.pw_gecos);
+ "cn", pwd->pw_gecos);
} else {
slapi_entry_add_string(entry,
- "cn", pwd.pw_name);
+ "cn", pwd->pw_name);
}
slapi_entry_add_string(entry,
- "homeDirectory", pwd.pw_dir);
- if ((pwd.pw_shell != NULL) && (strlen(pwd.pw_shell) > 0)) {
+ "homeDirectory", pwd->pw_dir);
+ if ((pwd->pw_shell != NULL) && (strlen(pwd->pw_shell) > 0)) {
slapi_entry_add_string(entry,
- "loginShell", pwd.pw_shell);
+ "loginShell", pwd->pw_shell);
}
slapi_entry_set_dn(entry, dn);
#ifdef HAVE_SSS_NSS_IDMAP
- rc = sss_nss_getsidbyid(pwd.pw_uid, &sid_str, &id_type);
+ rc = sss_nss_getsidbyid(pwd->pw_uid, &sid_str, &id_type);
if ((rc == 0) && (sid_str != NULL)) {
slapi_entry_add_string(entry, "ipaNTSecurityIdentifier", sid_str);
free(sid_str);
@@ -280,9 +249,55 @@ repeat:
}
static Slapi_Entry *
-backend_retrieve_group_entry_from_nsswitch_helper(struct group *grp,
- char *container_sdn,
- struct backend_search_cbdata *cbdata)
+backend_retrieve_user_entry_from_nsswitch(char *user_name, bool_t is_uid,
+ char *container_sdn,
+ struct backend_search_cbdata *cbdata)
+{
+ struct passwd pwd, *result;
+ Slapi_Entry *entry;
+ int rc;
+ char *name;
+ char *buf = NULL;
+
+repeat:
+ if (cbdata->nsswitch_buffer == NULL) {
+ return NULL;
+ }
+
+ if (is_uid) {
+ rc = getpwuid_r((uid_t) atoll(user_name), &pwd,
+ cbdata->nsswitch_buffer,
+ cbdata->nsswitch_buffer_len, &result);
+ } else {
+ rc = getpwnam_r(user_name, &pwd,
+ cbdata->nsswitch_buffer,
+ cbdata->nsswitch_buffer_len, &result);
+ }
+ if ((result == NULL) || (rc != 0)) {
+ if (rc == ERANGE) {
+ buf = realloc(cbdata->nsswitch_buffer, cbdata->nsswitch_buffer_len * 2);
+ if (buf != NULL) {
+ cbdata->nsswitch_buffer = buf;
+ goto repeat;
+ }
+ }
+ return NULL;
+ }
+
+ if (pwd.pw_uid < cbdata->nsswitch_min_id) {
+ return NULL;
+ }
+
+ entry = backend_make_user_entry_from_nsswitch_passwd(&pwd, container_sdn,
+ cbdata);
+
+ return entry;
+}
+
+static Slapi_Entry *
+backend_make_group_entry_from_nsswitch_group(struct group *grp,
+ char *container_sdn,
+ struct backend_search_cbdata *cbdata)
{
Slapi_Entry *entry;
int rc, i;
@@ -376,8 +391,8 @@ repeat:
return NULL;
}
- entry = backend_retrieve_group_entry_from_nsswitch_helper(&grp, container_sdn,
- cbdata);
+ entry = backend_make_group_entry_from_nsswitch_group(&grp, container_sdn,
+ cbdata);
return entry;
}
@@ -416,8 +431,8 @@ repeat:
return NULL;
}
- entry = backend_retrieve_group_entry_from_nsswitch_helper(&grp, container_sdn,
- cbdata);
+ entry = backend_make_group_entry_from_nsswitch_group(&grp, container_sdn,
+ cbdata);
return entry;
}