[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