Mercurial > dovecot > core-2.2
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));