[dovecot-cvs] dovecot/src/auth auth-master-connection.c, 1.33,
1.34 auth-request-handler.c, 1.5, 1.6 auth-request.c, 1.20,
1.21 auth-request.h, 1.15, 1.16 auth-worker-client.c, 1.9, 1.10
cras at dovecot.org
cras at dovecot.org
Tue Apr 26 14:43:39 EEST 2005
Update of /var/lib/cvs/dovecot/src/auth
In directory talvi:/tmp/cvs-serv13884/src/auth
Modified Files:
auth-master-connection.c auth-request-handler.c auth-request.c
auth-request.h auth-worker-client.c
Log Message:
USER auth command requires now service parameter and supports also others
parameters. Fixes a crash in dovecot-auth with deliver+mysql.
Index: auth-master-connection.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/auth-master-connection.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -d -r1.33 -r1.34
--- auth-master-connection.c 19 Apr 2005 13:11:12 -0000 1.33
+++ auth-master-connection.c 26 Apr 2005 11:43:36 -0000 1.34
@@ -97,9 +97,9 @@
master_input_user(struct auth_master_connection *conn, const char *args)
{
struct auth_request *auth_request;
- const char *const *list;
+ const char *const *list, *name, *arg;
- /* <id> <userid> */
+ /* <id> <userid> [<parameters>] */
list = t_strsplit(args, "\t");
if (list[0] == NULL || list[1] == NULL) {
i_error("BUG: Master sent broken USER");
@@ -110,6 +110,26 @@
auth_request->id = (unsigned int)strtoul(list[0], NULL, 10);
auth_request->user = p_strdup(auth_request->pool, list[1]);
auth_request->context = conn;
+
+ for (list += 2; *list != NULL; list++) {
+ arg = strchr(*list, '=');
+ if (arg == NULL) {
+ name = *list;
+ arg = "";
+ } else {
+ name = t_strdup_until(*list, arg);
+ arg++;
+ }
+
+ (void)auth_request_import(auth_request, name, arg);
+ }
+
+ if (auth_request->service == NULL) {
+ i_error("BUG: Master sent USER request without service");
+ auth_request_unref(auth_request);
+ return FALSE;
+ }
+
auth_request_lookup_user(auth_request, user_callback);
return TRUE;
}
Index: auth-request-handler.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/auth-request-handler.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- auth-request-handler.c 19 Apr 2005 13:11:12 -0000 1.5
+++ auth-request-handler.c 26 Apr 2005 11:43:36 -0000 1.6
@@ -274,12 +274,8 @@
arg++;
}
- if (strcmp(name, "lip") == 0)
- (void)net_addr2ip(arg, &request->local_ip);
- else if (strcmp(name, "rip") == 0)
- (void)net_addr2ip(arg, &request->remote_ip);
- else if (strcmp(name, "service") == 0)
- request->service = p_strdup(request->pool, arg);
+ if (auth_request_import(request, name, arg))
+ ;
else if (strcmp(name, "resp") == 0)
initial_resp = arg;
else if (strcmp(name, "valid-client-cert") == 0)
Index: auth-request.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/auth-request.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- auth-request.c 23 Apr 2005 09:11:49 -0000 1.20
+++ auth-request.c 26 Apr 2005 11:43:36 -0000 1.21
@@ -101,10 +101,32 @@
str_append(str, request->user);
str_append(str, "\tservice=");
str_append(str, request->service);
- str_append(str, "\tlip=");
- str_append(str, net_ip2addr(&request->local_ip));
- str_append(str, "\trip=");
- str_append(str, net_ip2addr(&request->remote_ip));
+
+ if (request->local_ip.family != 0) {
+ str_append(str, "\tlip=");
+ str_append(str, net_ip2addr(&request->local_ip));
+ }
+ if (request->remote_ip.family != 0) {
+ str_append(str, "\trip=");
+ str_append(str, net_ip2addr(&request->remote_ip));
+ }
+}
+
+int auth_request_import(struct auth_request *request,
+ const char *key, const char *value)
+{
+ if (strcmp(key, "user") == 0)
+ request->user = p_strdup(request->pool, value);
+ if (strcmp(key, "service") == 0)
+ request->service = p_strdup(request->pool, value);
+ else if (strcmp(key, "lip") == 0)
+ net_addr2ip(value, &request->local_ip);
+ else if (strcmp(key, "rip") == 0)
+ net_addr2ip(value, &request->remote_ip);
+ else
+ return FALSE;
+
+ return TRUE;
}
void auth_request_initial(struct auth_request *request,
Index: auth-request.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/auth-request.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- auth-request.h 19 Apr 2005 13:11:12 -0000 1.15
+++ auth-request.h 26 Apr 2005 11:43:36 -0000 1.16
@@ -73,6 +73,8 @@
void auth_request_internal_failure(struct auth_request *request);
void auth_request_export(struct auth_request *request, string_t *str);
+int auth_request_import(struct auth_request *request,
+ const char *key, const char *value);
void auth_request_initial(struct auth_request *request,
const unsigned char *data, size_t data_size);
Index: auth-worker-client.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/auth/auth-worker-client.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- auth-worker-client.c 21 Apr 2005 16:33:47 -0000 1.9
+++ auth-worker-client.c 26 Apr 2005 11:43:36 -0000 1.10
@@ -61,16 +61,7 @@
key = t_strdup_until(*tmp, value);
value++;
- if (strcmp(key, "user") == 0) {
- auth_request->user =
- p_strdup(auth_request->pool, value);
- } else if (strcmp(key, "service") == 0) {
- auth_request->service =
- p_strdup(auth_request->pool, value);
- } else if (strcmp(key, "lip") == 0)
- net_addr2ip(value, &auth_request->local_ip);
- else if (strcmp(key, "rip") == 0)
- net_addr2ip(value, &auth_request->remote_ip);
+ (void)auth_request_import(auth_request, key, value);
}
t_pop();
@@ -135,6 +126,11 @@
auth_request->mech_password =
p_strdup(auth_request->pool, password);
+ if (auth_request->user == NULL || auth_request->service == NULL) {
+ i_error("BUG: PASSV had missing parameters");
+ return;
+ }
+
for (; num > 0; num--) {
auth_request->passdb = auth_request->passdb->next;
if (auth_request->passdb == NULL) {
@@ -200,6 +196,11 @@
auth_request = worker_auth_request_new(client, id, args);
auth_request->credentials = credentials;
+ if (auth_request->user == NULL || auth_request->service == NULL) {
+ i_error("BUG: PASSL had missing parameters");
+ return;
+ }
+
for (; num > 0; num--) {
auth_request->passdb = auth_request->passdb->next;
if (auth_request->passdb == NULL) {
@@ -244,6 +245,11 @@
auth_request = worker_auth_request_new(client, id, args);
+ if (auth_request->user == NULL || auth_request->service == NULL) {
+ i_error("BUG: USER had missing parameters");
+ return;
+ }
+
for (; num > 0; num--) {
auth_request->userdb = auth_request->userdb->next;
if (auth_request->userdb == NULL) {
More information about the dovecot-cvs
mailing list