dovecot-2.0: auth: Code cleanup.
dovecot at dovecot.org
dovecot at dovecot.org
Wed Apr 7 01:49:34 EEST 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/88a7e034ebc1
changeset: 11084:88a7e034ebc1
user: Timo Sirainen <tss at iki.fi>
date: Wed Apr 07 00:45:00 2010 +0300
description:
auth: Code cleanup.
diffstat:
src/auth/auth-worker-client.c | 122 +++++++++++++++++-----------------------
1 files changed, 52 insertions(+), 70 deletions(-)
diffs (234 lines):
diff -r 1735958db2f1 -r 88a7e034ebc1 src/auth/auth-worker-client.c
--- a/src/auth/auth-worker-client.c Tue Apr 06 23:22:29 2010 +0300
+++ b/src/auth/auth-worker-client.c Wed Apr 07 00:45:00 2010 +0300
@@ -56,10 +56,10 @@
static struct auth_request *
worker_auth_request_new(struct auth_worker_client *client, unsigned int id,
- const char *args)
+ const char *const *args)
{
struct auth_request *auth_request;
- const char *key, *value, *const *tmp;
+ const char *key, *value;
auth_request = auth_request_new_dummy();
@@ -67,15 +67,10 @@
auth_request->context = client;
auth_request->id = id;
- if (args != NULL) {
- for (tmp = t_strsplit(args, "\t"); *tmp != NULL; tmp++) {
- value = strchr(*tmp, '=');
- if (value == NULL)
- continue;
-
- key = t_strdup_until(*tmp, value);
- value++;
-
+ for (; *args != NULL; args++) {
+ value = strchr(*args, '=');
+ if (value != NULL) {
+ key = t_strdup_until(*args, value++);
(void)auth_request_import(auth_request, key, value);
}
}
@@ -147,7 +142,7 @@
static bool
auth_worker_handle_passv(struct auth_worker_client *client,
- unsigned int id, const char *args)
+ unsigned int id, const char *const *args)
{
/* verify plaintext password */
struct auth_request *auth_request;
@@ -155,19 +150,15 @@
const char *password;
unsigned int passdb_id;
- passdb_id = atoi(t_strcut(args, '\t'));
- args = strchr(args, '\t');
- if (args == NULL) {
+ /* <passdb id> <password> [<args>] */
+ if (args[1] == NULL) {
i_error("BUG: Auth worker server sent us invalid PASSV");
return FALSE;
}
- args++;
+ passdb_id = atoi(args[0]);
+ password = args[1];
- password = t_strcut(args, '\t');
- args = strchr(args, '\t');
- if (args != NULL) args++;
-
- auth_request = worker_auth_request_new(client, id, args);
+ auth_request = worker_auth_request_new(client, id, args + 2);
auth_request->mech_password =
p_strdup(auth_request->pool, password);
@@ -257,26 +248,22 @@
static bool
auth_worker_handle_passl(struct auth_worker_client *client,
- unsigned int id, const char *args)
+ unsigned int id, const char *const *args)
{
/* lookup credentials */
struct auth_request *auth_request;
const char *scheme;
unsigned int passdb_id;
- passdb_id = atoi(t_strcut(args, '\t'));
- args = strchr(args, '\t');
- if (args == NULL) {
+ /* <passdb id> <scheme> [<args>] */
+ if (args[1] == NULL) {
i_error("BUG: Auth worker server sent us invalid PASSL");
return FALSE;
}
- args++;
+ passdb_id = atoi(args[0]);
+ scheme = args[1];
- scheme = t_strcut(args, '\t');
- args = strchr(args, '\t');
- if (args != NULL) args++;
-
- auth_request = worker_auth_request_new(client, id, args);
+ auth_request = worker_auth_request_new(client, id, args + 2);
auth_request->credentials_scheme = p_strdup(auth_request->pool, scheme);
if (auth_request->user == NULL || auth_request->service == NULL) {
@@ -324,26 +311,21 @@
static bool
auth_worker_handle_setcred(struct auth_worker_client *client,
- unsigned int id, const char *args)
+ unsigned int id, const char *const *args)
{
struct auth_request *auth_request;
unsigned int passdb_id;
- const char *data;
+ const char *creds;
- passdb_id = atoi(t_strcut(args, '\t'));
- args = strchr(args, '\t');
- if (args == NULL) {
+ /* <passdb id> <credentials> [<args>] */
+ if (args[1] == NULL) {
i_error("BUG: Auth worker server sent us invalid SETCRED");
return FALSE;
}
- args++;
+ passdb_id = atoi(args[0]);
+ creds = args[1];
- data = t_strcut(args, '\t');
- args = strchr(args, '\t');
- if (args != NULL) args++;
-
- auth_request = worker_auth_request_new(client, id, args);
-
+ auth_request = worker_auth_request_new(client, id, args + 2);
if (auth_request->user == NULL || auth_request->service == NULL) {
i_error("BUG: SETCRED had missing parameters");
auth_request_unref(&auth_request);
@@ -360,7 +342,7 @@
}
auth_request->passdb->passdb->iface.
- set_credentials(auth_request, data, set_credentials_callback);
+ set_credentials(auth_request, creds, set_credentials_callback);
return TRUE;
}
@@ -418,18 +400,16 @@
static bool
auth_worker_handle_user(struct auth_worker_client *client,
- unsigned int id, const char *args)
+ unsigned int id, const char *const *args)
{
/* lookup user */
struct auth_request *auth_request;
unsigned int userdb_id;
- userdb_id = atoi(t_strcut(args, '\t'));
- args = strchr(args, '\t');
- if (args != NULL) args++;
+ /* <userdb id> [<args>] */
+ userdb_id = atoi(args[0]);
- auth_request = worker_auth_request_new(client, id, args);
-
+ auth_request = worker_auth_request_new(client, id, args + 1);
if (auth_request->user == NULL || auth_request->service == NULL) {
i_error("BUG: USER had missing parameters");
auth_request_unref(&auth_request);
@@ -520,12 +500,12 @@
static bool
auth_worker_handle_list(struct auth_worker_client *client,
- unsigned int id, const char *args)
+ unsigned int id, const char *const *args)
{
struct auth_worker_list_context *ctx;
struct auth_userdb *userdb;
- userdb = auth_userdb_find_by_id(client->auth->userdbs, atoi(args));
+ userdb = auth_userdb_find_by_id(client->auth->userdbs, atoi(args[0]));
if (userdb == NULL) {
i_error("BUG: LIST had invalid userdb ID");
return FALSE;
@@ -549,29 +529,31 @@
static bool
auth_worker_handle_line(struct auth_worker_client *client, const char *line)
{
- const char *p;
+ const char *const *args;
unsigned int id;
bool ret = FALSE;
- p = strchr(line, '\t');
- if (p == NULL)
+ args = t_strsplit(line, "\t");
+ if (args[0] == NULL || args[1] == NULL || args[2] == NULL) {
+ i_error("BUG: Invalid input: %s", line);
return FALSE;
+ }
- id = (unsigned int)strtoul(t_strdup_until(line, p), NULL, 10);
- line = p + 1;
-
- if (strncmp(line, "PASSV\t", 6) == 0)
- ret = auth_worker_handle_passv(client, id, line + 6);
- else if (strncmp(line, "PASSL\t", 6) == 0)
- ret = auth_worker_handle_passl(client, id, line + 6);
- else if (strncmp(line, "SETCRED\t", 8) == 0)
- ret = auth_worker_handle_setcred(client, id, line + 8);
- else if (strncmp(line, "USER\t", 5) == 0)
- ret = auth_worker_handle_user(client, id, line + 5);
- else if (strncmp(line, "LIST\t", 5) == 0)
- ret = auth_worker_handle_list(client, id, line + 5);
- else
- i_error("BUG: Auth-worker received unknown command: %s", line);
+ id = (unsigned int)strtoul(args[0], NULL, 10);
+ if (strcmp(args[1], "PASSV") == 0)
+ ret = auth_worker_handle_passv(client, id, args + 2);
+ else if (strcmp(args[1], "PASSL") == 0)
+ ret = auth_worker_handle_passl(client, id, args + 2);
+ else if (strcmp(args[1], "SETCRED") == 0)
+ ret = auth_worker_handle_setcred(client, id, args + 2);
+ else if (strcmp(args[1], "USER") == 0)
+ ret = auth_worker_handle_user(client, id, args + 2);
+ else if (strcmp(args[1], "LIST") == 0)
+ ret = auth_worker_handle_list(client, id, args + 2);
+ else {
+ i_error("BUG: Auth-worker received unknown command: %s",
+ args[1]);
+ }
return ret;
}
More information about the dovecot-cvs
mailing list