#include "sha1.h"
#include "hex-binary.h"
#include "str.h"
+#include "array.h"
#include "safe-memset.h"
#include "str-sanitize.h"
#include "strescape.h"
str_append(dest, "\tsuccessful");
if (request->mech_name != NULL)
auth_str_add_keyvalue(dest, "mech", request->mech_name);
+ /* export any userdb fields */
+ if (request->userdb_reply != NULL) {
+ const ARRAY_TYPE(auth_field) *fields = auth_fields_export(request->userdb_reply);
+ const struct auth_field *field;
+ array_foreach(fields, field) {
+ str_printfa(dest, "\tuserdb_%s=", field->key);
+ str_append_tabescaped(dest, field->value);
+ }
+ }
}
bool auth_request_import_info(struct auth_request *request,
request->skip_password_check = TRUE;
else if (strcmp(key, "mech") == 0)
request->mech_name = p_strdup(request->pool, value);
- else
+ else if (strncmp(key, "userdb_", 7) == 0) {
+ if (request->userdb_reply == NULL)
+ request->userdb_reply = auth_fields_init(request->pool);
+ auth_fields_add(request->userdb_reply, key+7, value, 0);
+ } else
return FALSE;
return TRUE;
return FALSE;
}
- auth_request_init_userdb_reply(auth_request);
+ if (auth_request->userdb_reply == NULL)
+ auth_request_init_userdb_reply(auth_request);
auth_request->userdb->userdb->iface->
lookup(auth_request, lookup_user_callback);
return TRUE;
unsigned int id;
bool ret = FALSE;
- args = t_strsplit_tab(line);
+ args = t_strsplit_tabescaped(line);
if (args[0] == NULL || args[1] == NULL || args[2] == NULL ||
str_to_uint(args[0], &id) < 0) {
i_error("BUG: Invalid input: %s", line);