changeset 4557:3da066d844ea HEAD

If password query returns userdb_ prefixed fields (ie. for userdb prefetch) but not userdb_uid or userdb_gid, add them based on the global uid/gid settings.
author Timo Sirainen <tss@iki.fi>
date Thu, 10 Aug 2006 22:44:19 +0300
parents b008e75f650a
children fc58084df7b5
files src/auth/passdb-ldap.c
diffstat 1 files changed, 24 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/passdb-ldap.c	Thu Aug 10 22:15:43 2006 +0300
+++ b/src/auth/passdb-ldap.c	Thu Aug 10 22:44:19 2006 +0300
@@ -44,6 +44,8 @@
 	char *attr, **vals;
 	unsigned int i;
 	string_t *debug = NULL;
+	bool userdb_fields = FALSE;
+	bool add_userdb_uid = FALSE, add_userdb_gid = FALSE;
 
 	attr = ldap_first_attribute(conn->ld, entry, &ber);
 	while (attr != NULL) {
@@ -60,6 +62,19 @@
 				    name != NULL ? name : "?unknown?");
 		}
 
+		if (strncmp(name, "userdb_", 7) == 0) {
+			/* in case we're trying to use prefetch userdb,
+			   see if we need to add global uid/gid */
+			if (!userdb_fields) {
+				add_userdb_uid = add_userdb_gid = TRUE;
+				userdb_fields = TRUE;
+			}
+			if (strcmp(name, "userdb_uid") == 0)
+				add_userdb_uid = FALSE;
+			else if (strcmp(name, "userdb_gid") == 0)
+				add_userdb_gid = FALSE;
+		}
+
 		if (name != NULL && vals != NULL && *name != '\0') {
 			for (i = 0; vals[i] != NULL; i++) {
 				if (debug != NULL) {
@@ -85,6 +100,15 @@
 		attr = ldap_next_attribute(conn->ld, entry, ber);
 	}
 
+	if (add_userdb_uid && conn->set.uid != (uid_t)-1) {
+		auth_request_set_field(auth_request, "userdb_uid",
+				       dec2str(conn->set.uid), NULL);
+	}
+	if (add_userdb_gid && conn->set.gid != (gid_t)-1) {
+		auth_request_set_field(auth_request, "userdb_gid",
+				       dec2str(conn->set.gid), NULL);
+	}
+
 	if (debug != NULL) {
 		auth_request_log_debug(auth_request, "ldap",
 				       "%s", str_c(debug));