[dovecot-cvs] dovecot/src/auth passdb-pam.c,1.8,1.9

cras at procontrol.fi cras at procontrol.fi
Thu Jun 26 03:15:37 EEST 2003


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

Modified Files:
	passdb-pam.c 
Log Message:
Using "*" as PAM service name now uses imap/pop3 service.



Index: passdb-pam.c
===================================================================
RCS file: /home/cvs/dovecot/src/auth/passdb-pam.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- passdb-pam.c	25 Jun 2003 16:39:06 -0000	1.8
+++ passdb-pam.c	25 Jun 2003 23:15:35 -0000	1.9
@@ -204,7 +204,8 @@
 }
 
 static void
-pam_verify_plain_child(const char *user, const char *password, int fd)
+pam_verify_plain_child(const char *service, const char *user,
+		       const char *password, int fd)
 {
 	pam_handle_t *pamh;
 	struct pam_userpass userpass;
@@ -221,7 +222,7 @@
 	userpass.user = user;
 	userpass.pass = password;
 
-	status = pam_start(service_name, user, &conv, &pamh);
+	status = pam_start(service, user, &conv, &pamh);
 	if (status != PAM_SUCCESS) {
 		result = PASSDB_RESULT_INTERNAL_FAILURE;
 		str = t_strdup_printf("pam_start(%s) failed: %s",
@@ -323,9 +324,18 @@
 		 verify_plain_callback_t *callback)
 {
         struct pam_auth_request *pam_auth_request;
+	const char *service;
 	int fd[2];
 	pid_t pid;
 
+	service = service_name != NULL ? service_name :
+		request->protocol == AUTH_PROTOCOL_IMAP ? "imap" :
+		request->protocol == AUTH_PROTOCOL_POP3 ? "pop3" : NULL;
+	if (service == NULL) {
+		i_error("Unknown protocol %d in auth request",
+			request->protocol);
+	}
+
 	if (pipe(fd) < 0) {
 		i_error("PAM: pipe() failed: %m");
 		callback(PASSDB_RESULT_INTERNAL_FAILURE, request);
@@ -343,7 +353,7 @@
 
 	if (pid == 0) {
 		(void)close(fd[0]);
-		pam_verify_plain_child(request->user, password, fd[1]);
+		pam_verify_plain_child(service, request->user, password, fd[1]);
 		_exit(0);
 	}
 
@@ -364,7 +374,8 @@
 
 static void pam_init(const char *args)
 {
-	service_name = i_strdup(*args != '\0' ? args : "dovecot");
+	service_name = strcmp(args, "*") == 0 ? NULL :
+		i_strdup(*args != '\0' ? args : "dovecot");
 	to_wait = NULL;
 }
 



More information about the dovecot-cvs mailing list