]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Fixed userdb tempfail to work with blocking userdbs.
authorTimo Sirainen <tss@iki.fi>
Wed, 14 Apr 2010 13:06:59 +0000 (16:06 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 14 Apr 2010 13:06:59 +0000 (16:06 +0300)
--HG--
branch : HEAD

src/auth/auth-request.c
src/auth/auth-stream.c
src/auth/auth-worker-client.c
src/auth/userdb-blocking.c

index e95fc7ace474dd391c3ca1683ed220eb620a30cb..bff76fc4bc1ab46ad7b50bef4067b2edd11b8df9 100644 (file)
@@ -1198,6 +1198,7 @@ void auth_request_set_userdb_field(struct auth_request *request,
                value = dec2str(gid);
        } else if (strcmp(name, "tempfail") == 0) {
                request->userdb_lookup_failed = TRUE;
+               return;
        } else if (strcmp(name, "user") == 0) {
                auth_request_change_userdb_user(request, value);
                return;
index 631505b9c315d077e4eaf9c29508cbb32f5f4a2c..d94e51e252873323bca1dc6c9ef827b5cbca3e92 100644 (file)
@@ -97,6 +97,10 @@ const char *auth_stream_reply_find(struct auth_stream_reply *reply,
                return NULL;
        else {
                keylen = strlen(key);
+               if (len == keylen) {
+                       /* key without =value */
+                       return "";
+               }
                i_assert(len > keylen);
                idx += keylen + 1;
                len -= keylen + 1;
index 62c893f78e28bc6f399a41e6e619aeead9c63891..16cd67d0a651cb537edcd21804a12467d502d8af 100644 (file)
@@ -335,21 +335,12 @@ lookup_user_callback(enum userdb_result result,
        struct auth_worker_client *client = auth_request->context;
        struct auth_stream_reply *reply = auth_request->userdb_reply;
        string_t *str;
-       const char *value;
-
-       if (auth_request->userdb_lookup_failed)
-               result = USERDB_RESULT_INTERNAL_FAILURE;
 
        str = t_str_new(128);
        str_printfa(str, "%u\t", auth_request->id);
        switch (result) {
        case USERDB_RESULT_INTERNAL_FAILURE:
                str_append(str, "FAIL\t");
-               if (auth_request->userdb_lookup_failed) {
-                       value = auth_stream_reply_find(reply, "reason");
-                       if (value != NULL)
-                               str_printfa(str, "reason=%s", value);
-               }
                break;
        case USERDB_RESULT_USER_UNKNOWN:
                str_append(str, "NOTFOUND\t");
@@ -357,6 +348,8 @@ lookup_user_callback(enum userdb_result result,
        case USERDB_RESULT_OK:
                str_append(str, "OK\t");
                str_append(str, auth_stream_reply_export(reply));
+               if (auth_request->userdb_lookup_failed)
+                       str_append(str, "\ttempfail");
                break;
        }
        str_append_c(str, '\n');
index 90e2a03ad21919d2dbb6d0858b5a4e25ec99dae6..c70e1d2be1c992597f4dfa7e3964eefebd1d0c36 100644 (file)
@@ -39,6 +39,9 @@ static bool user_callback(const char *reply, void *context)
        if (*args != '\0') {
                request->userdb_reply = auth_stream_reply_init(request->pool);
                auth_stream_reply_import(request->userdb_reply, args);
+               if (auth_stream_reply_find(request->userdb_reply,
+                                          "tempfail") != NULL)
+                       request->userdb_lookup_failed = TRUE;
        }
 
         auth_request_userdb_callback(result, request);