diff -uPr courier-imap-2.1.2.orig/README.DRAC courier-imap-2.1.2/README.DRAC --- courier-imap-2.1.2.orig/README.DRAC 1970-01-01 01:00:00.000000000 +0100 +++ courier-imap-2.1.2/README.DRAC 2003-10-22 19:25:03.000000000 +0200 @@ -0,0 +1,10 @@ +Dynamic Relay Authorization Control and Courier-IMAP + +The patch is NOT WARRANTED to work, compile, solve issues with your significant other, or ANYTHING ELSE. If you use it, you are on your own. + +The use of DRAC is controlled via the environment variable DRACHOST. +As DRAC only supports IPv4 ? this patch will only affect IPv4 logins. +As my courier gets compiled with IPv6 support i don't know if it actually works +for IPv4-only systems. + +Erich Schubert diff -uPr courier-imap-2.1.2.orig/imap/Makefile.am courier-imap-2.1.2/imap/Makefile.am --- courier-imap-2.1.2.orig/imap/Makefile.am 2003-08-01 20:30:52.000000000 +0200 +++ courier-imap-2.1.2/imap/Makefile.am 2003-10-22 19:15:51.000000000 +0200 @@ -58,7 +58,7 @@ outbox.c outbox.h \ thread.c thread.h \ search.c searchinfo.c searchinfo.h \ - storeinfo.c storeinfo.h + storeinfo.c storeinfo.h dracauth.c imapd_DEPENDENCIES=libimapd.a ../rfc2045/librfc2045.a ../maildir/libmaildir.a \ ../unicode/libunicode.a ../authlib/libauthmod.a ../authlib/libauth.a \ @@ -68,7 +68,7 @@ imapd_LDADD=libimapd.a ../rfc2045/librfc2045.a ../maildir/libmaildir.a \ ../unicode/libunicode.a ../authlib/libauthmod.a ../authlib/libauth.a \ ../rfc822/librfc822.a ../liblock/liblock.a ../numlib/libnumlib.a \ - `cat ../maildir/maildir.libdeps` \ + `cat ../maildir/maildir.libdeps` -ldrac\ @dblibrary@ @LIBDB@ @LIBGDBM@ @DEBUGLIB@ pop3login_SOURCES=pop3login.c pop3dcapa.c @@ -79,11 +79,11 @@ ../random128/librandom128.a ../md5/libmd5.a \ ../rfc2045/librfc2045.a ../tcpd/libspipe.a -pop3d_SOURCES=pop3dserver.c pop3dcapa.c +pop3d_SOURCES=pop3dserver.c pop3dcapa.c dracauth.c pop3d_DEPENDENCIES=../authlib/libauthmod.a ../authlib/libauth.a \ ../maildir/libmaildir.a ../rfc822/librfc822.a ../numlib/libnumlib.a pop3d_LDADD=../authlib/libauthmod.a ../authlib/libauth.a \ - ../maildir/libmaildir.a ../rfc822/librfc822.a ../numlib/libnumlib.a + ../maildir/libmaildir.a ../rfc822/librfc822.a ../numlib/libnumlib.a -ldrac HTML2TXT=`which lynx 2>/dev/null && echo "lynx -dump -nolist" && exit; echo "links -dump"` diff -uPr courier-imap-2.1.2.orig/imap/Makefile.in courier-imap-2.1.2/imap/Makefile.in --- courier-imap-2.1.2.orig/imap/Makefile.in 2003-09-07 22:48:20.000000000 +0200 +++ courier-imap-2.1.2/imap/Makefile.in 2003-10-22 19:14:05.000000000 +0200 @@ -157,7 +157,7 @@ outbox.c outbox.h \ thread.c thread.h \ search.c searchinfo.c searchinfo.h \ - storeinfo.c storeinfo.h + storeinfo.c storeinfo.h dracauth.c imapd_DEPENDENCIES = libimapd.a ../rfc2045/librfc2045.a ../maildir/libmaildir.a \ @@ -169,7 +169,7 @@ imapd_LDADD = libimapd.a ../rfc2045/librfc2045.a ../maildir/libmaildir.a \ ../unicode/libunicode.a ../authlib/libauthmod.a ../authlib/libauth.a \ ../rfc822/librfc822.a ../liblock/liblock.a ../numlib/libnumlib.a \ - `cat ../maildir/maildir.libdeps` \ + `cat ../maildir/maildir.libdeps` -ldrac \ @dblibrary@ @LIBDB@ @LIBGDBM@ @DEBUGLIB@ @@ -183,12 +183,12 @@ ../rfc2045/librfc2045.a ../tcpd/libspipe.a -pop3d_SOURCES = pop3dserver.c pop3dcapa.c +pop3d_SOURCES = pop3dserver.c pop3dcapa.c dracauth.c pop3d_DEPENDENCIES = ../authlib/libauthmod.a ../authlib/libauth.a \ ../maildir/libmaildir.a ../rfc822/librfc822.a ../numlib/libnumlib.a pop3d_LDADD = ../authlib/libauthmod.a ../authlib/libauth.a \ - ../maildir/libmaildir.a ../rfc822/librfc822.a ../numlib/libnumlib.a + ../maildir/libmaildir.a ../rfc822/librfc822.a ../numlib/libnumlib.a -ldrac HTML2TXT = `which lynx 2>/dev/null && echo "lynx -dump -nolist" && exit; echo "links -dump"` @@ -214,7 +214,7 @@ imapscanclient.$(OBJEXT) mailboxlist.$(OBJEXT) \ msgbodystructure.$(OBJEXT) msgenvelope.$(OBJEXT) \ mysignal.$(OBJEXT) outbox.$(OBJEXT) thread.$(OBJEXT) \ - search.$(OBJEXT) searchinfo.$(OBJEXT) storeinfo.$(OBJEXT) + search.$(OBJEXT) searchinfo.$(OBJEXT) storeinfo.$(OBJEXT) dracauth.o imapd_OBJECTS = $(am_imapd_OBJECTS) imapd_LDFLAGS = @HAVE_AUTH_TRUE@am__objects_1 = authenticate_auth.$(OBJEXT) @@ -222,7 +222,7 @@ am_imaplogin_OBJECTS = imaplogin.$(OBJEXT) $(am__objects_1) imaplogin_OBJECTS = $(am_imaplogin_OBJECTS) imaplogin_LDFLAGS = -am_pop3d_OBJECTS = pop3dserver.$(OBJEXT) pop3dcapa.$(OBJEXT) +am_pop3d_OBJECTS = pop3dserver.$(OBJEXT) pop3dcapa.$(OBJEXT) dracauth.o pop3d_OBJECTS = $(am_pop3d_OBJECTS) pop3d_LDFLAGS = am_pop3login_OBJECTS = pop3login.$(OBJEXT) pop3dcapa.$(OBJEXT) diff -uPr courier-imap-2.1.2.orig/imap/dracauth.c courier-imap-2.1.2/imap/dracauth.c --- courier-imap-2.1.2.orig/imap/dracauth.c 1970-01-01 01:00:00.000000000 +0100 +++ courier-imap-2.1.2/imap/dracauth.c 2003-10-22 19:25:03.000000000 +0200 @@ -0,0 +1,33 @@ +#include "netinet/in.h" +#include "arpa/inet.h" +#include +#include + +extern int dracauth(char *host, unsigned long ip, char **errmsg); + +void drac_update_tcpremoteip() { + char *err; + char *drachost; + struct in6_addr ip6; + struct in_addr ip4; + + /* if the DRACHOST env is not set, return silently */ + drachost = getenv("DRACHOST"); + if (!drachost || !*drachost) return; + + //syslog(LOG_INFO,"drac_update() called: DRACHOST=%s user=%s",getenv("DRACHOST"),getenv("TCPREMOTEIP")); + + if (inet_pton(AF_INET6, getenv("TCPREMOTEIP"), &ip6) <= 0) { + syslog(LOG_ALERT,"drac_update() Error: could not convert TCPREMOTEIP %s",getenv("TCPREMOTEIP")); + return; + } + if (IN6_IS_ADDR_V4MAPPED(&ip6)) { + ip4.s_addr=ip6.s6_addr32[3]; + if (dracauth(getenv("DRACHOST"), ip4.s_addr, &err) != 0) + syslog(LOG_ALERT,"dracauth() Error \"%s\" for user %s",err,getenv("TCPREMOTEIP")); + } else { + syslog(LOG_NOTICE,"drac_update() doesn't support IPv6 yet."); + } + return; +} + diff -uPr courier-imap-2.1.2.orig/imap/imapd.c courier-imap-2.1.2/imap/imapd.c --- courier-imap-2.1.2.orig/imap/imapd.c 2003-09-01 21:26:50.000000000 +0200 +++ courier-imap-2.1.2/imap/imapd.c 2003-10-22 19:21:57.000000000 +0200 @@ -2252,7 +2252,7 @@ if (curtoken->tokentype != IT_ATOM) return (-1); /* Commands that work in authenticated state */ - + drac_update_tcpremoteip(); if (strcmp(curtoken->tokenbuf, "CAPABILITY") == 0) { if (nexttoken()->tokentype != IT_EOL) return (-1); @@ -4072,6 +4072,8 @@ if ((tag=getenv("IMAPLOGINTAG")) != 0) { + + drac_update_tcpremoteip(); writes(tag); writes(" OK LOGIN Ok.\r\n"); } diff -uPr courier-imap-2.1.2.orig/imap/pop3dserver.c courier-imap-2.1.2/imap/pop3dserver.c --- courier-imap-2.1.2.orig/imap/pop3dserver.c 2003-07-19 21:55:54.000000000 +0200 +++ courier-imap-2.1.2/imap/pop3dserver.c 2003-10-22 19:23:30.000000000 +0200 @@ -1017,6 +1017,8 @@ scancur(); sortmsgs(); printf("+OK logged in.\r\n"); + drac_update_tcpremoteip(); + fflush(stdout); loop(); return (0);