[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