[dovecot-cvs] dovecot/src/auth db-pgsql.c,1.2,1.3 userdb-pgsql.c,1.2,1.3

cras at procontrol.fi cras at procontrol.fi
Sun Apr 27 04:12:45 EEST 2003


Update of /home/cvs/dovecot/src/auth
In directory danu:/tmp/cvs-serv21496/src/auth

Modified Files:
	db-pgsql.c userdb-pgsql.c 
Log Message:
Fixes and support for system_user, mail and chroot settings 



Index: db-pgsql.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/db-pgsql.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- db-pgsql.c	2 Apr 2003 02:09:41 -0000	1.2
+++ db-pgsql.c	27 Apr 2003 00:12:43 -0000	1.3
@@ -56,17 +56,13 @@
 		i_error("PGSQL: Query \"%s\" failed: %s",
 			query, PQresultErrorMessage(res));
 		failed = TRUE;
-	} else if (PQntuples(res) != 1) {
-		i_error("PGSQL: Query \"%s\" returned %d rows",
-			query, PQntuples(res));
-		failed = TRUE;
 	} else {
 		failed = FALSE;
 	}
 
 	request->callback(conn, request, failed ? NULL : res);
 	PQclear(res);
-
+	i_free(request);
 }
 
 static int pgsql_conn_open(struct pgsql_connection *conn)

Index: userdb-pgsql.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/userdb-pgsql.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- userdb-pgsql.c	2 Apr 2003 02:09:41 -0000	1.2
+++ userdb-pgsql.c	27 Apr 2003 00:12:43 -0000	1.3
@@ -23,6 +23,8 @@
 struct userdb_pgsql_request {
 	struct pgsql_request request;
 	userdb_callback_t *userdb_callback;
+
+	char username[1]; /* variable width */
 };
 
 static struct userdb_pgsql_connection *userdb_pgsql_conn;
@@ -40,11 +42,6 @@
 		return FALSE;
 	}
 
-	if (PQfnumber(res, "home") == -1) {
-		i_error("PGSQL: User query did not return 'home' field");
-		return FALSE;
-	}
-
 	if (PQfnumber(res, "uid") == -1) {
 		i_error("PGSQL: User query did not return 'uid' field");
 		return FALSE;
@@ -58,18 +55,32 @@
 	return TRUE;
 }
 
+static const char *pg_get_str(PGresult *res, const char *field)
+{
+	int fieldnum;
+
+	fieldnum = PQfnumber(res, field);
+	return fieldnum == -1 ? NULL : PQgetvalue(res, 0, fieldnum);
+}
+
 static void pgsql_handle_request(struct pgsql_connection *conn __attr_unused__,
 				 struct pgsql_request *request, PGresult *res)
 {
 	struct userdb_pgsql_request *urequest =
 		(struct userdb_pgsql_request *) request;
 	struct user_data user;
+	const char *str;
 
 	if (res != NULL && is_result_valid(res)) {
 		memset(&user, 0, sizeof(user));
-		user.home = PQgetvalue(res, 0, PQfnumber(res, "home"));
+		user.virtual_user = urequest->username;
+		user.system_user = pg_get_str(res, "system_user");
+		user.home = pg_get_str(res, "home");
+		user.mail = pg_get_str(res, "mail");
 		user.uid = atoi(PQgetvalue(res, 0, PQfnumber(res, "uid")));
 		user.gid = atoi(PQgetvalue(res, 0, PQfnumber(res, "gid")));
+		str = pg_get_str(res, "chroot");
+		user.chroot = str != NULL && (*str == 'Y' || *str == 'y');
 		urequest->userdb_callback(&user, request->context);
 	} else {
 		urequest->userdb_callback(NULL, request->context);
@@ -88,10 +99,11 @@
 	var_expand(str, conn->set.user_query, str_escape(user), NULL);
 	query = str_c(str);
 
-	request = i_new(struct userdb_pgsql_request, 1);
+	request = i_malloc(sizeof(struct userdb_pgsql_request) + strlen(user));
 	request->request.callback = pgsql_handle_request;
 	request->request.context = context;
 	request->userdb_callback = callback;
+	strcpy(request->username, user);
 
 	db_pgsql_query(conn, query, &request->request);
 }




More information about the dovecot-cvs mailing list