diff options
| author | FlorianMickler | 2020-02-26 00:59:12 +0100 | 
|---|---|---|
| committer | GitHub | 2020-02-26 00:59:12 +0100 | 
| commit | d553cb68f8c4b37a2251b57f662006c87be5131c (patch) | |
| tree | cf15fa1c36842eb4625b19c765e3391122981042 | |
| parent | 3beecc4b3822b86a7abd11c8ba2dba545ff94dd8 (diff) | |
| download | courier-libs-d553cb68f8c4b37a2251b57f662006c87be5131c.tar.bz2 | |
fix ssl client cert authentication (EXTERNAL)
The connect_callback verify_connection does setenv(TLS_SUBJECT_*) by calling dump_to_fp.  These Environment variables are needed to do "AUTHENTICATE EXTERNAL" by doing a user lookup with one of the TLS_SUBJECT_* Variables (specified in the config file via TLS_EXTERNAL). 
If we call startclient() after the ssl connection has established, we actually do the fork()/exec with the updated environment and thus imapdlogin can do authentication. 
This error was not producing any error messages besides LOGIN FAILED.  :(
With this change, i was able to connect with openssl s_client, run "AUTHENTICATE EXTERNAL" and have a successfull login. No further testing was done.
| -rw-r--r-- | tcpd/starttls.c | 4 | 
1 files changed, 2 insertions, 2 deletions
| diff --git a/tcpd/starttls.c b/tcpd/starttls.c index cb3bd2c..94cb3ac 100644 --- a/tcpd/starttls.c +++ b/tcpd/starttls.c @@ -542,8 +542,6 @@ static int dossl(int fd, int argn, int argc, char **argv)  	stdin_fd=0;  	stdout_fd=1; -	startclient(argn, argc, argv, fd, &stdin_fd, &stdout_fd); -  	if (username)  		libmail_changeusername(username, 0); @@ -566,6 +564,8 @@ static int dossl(int fd, int argn, int argc, char **argv)  		return 1;  	} +	startclient(argn, argc, argv, fd, &stdin_fd, &stdout_fd); +  	docopy(ssl, fd, stdin_fd, stdout_fd);  	tls_disconnect(ssl, fd); | 
