diff -uNr courier-imap-4.0.6.org/README.DRAC courier-imap-4.0.6/README.DRAC --- courier-imap-4.0.6.org/README.DRAC 1970-01-01 01:00:00.000000000 +0100 +++ courier-imap-4.0.6/README.DRAC 2006-01-16 17:09:13.000000000 +0100 @@ -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 -uNr courier-imap-4.0.6.org/imap/Makefile.am courier-imap-4.0.6/imap/Makefile.am --- courier-imap-4.0.6.org/imap/Makefile.am 2005-07-16 22:04:27.000000000 +0200 +++ courier-imap-4.0.6/imap/Makefile.am 2006-01-16 17:13:51.000000000 +0100 @@ -58,17 +58,17 @@ 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.la \ ../maildir/maildir.libdeps @dblibrary@ -imapd_LDADD=libimapd.la `cat ../maildir/maildir.libdeps` \ +imapd_LDADD=libimapd.la `cat ../maildir/maildir.libdeps` -ldrac \ @dblibrary@ @LIBDB@ @LIBGDBM@ @DEBUGLIB@ @LDAUTH@ -lcourierauth -pop3login_SOURCES=pop3login.c pop3dcapa.c proxy.c proxy.h +pop3login_SOURCES=pop3login.c pop3dcapa.c proxy.c proxy.h dracauth.c pop3login_DEPENDENCIES=../tcpd/libspipe.la -pop3login_LDADD=../tcpd/libspipe.la @LDAUTH@ -lcourierauth -lcourierauthsasl @NETLIBS@ +pop3login_LDADD=../tcpd/libspipe.la @LDAUTH@ -lcourierauth -lcourierauthsasl -ldrac @NETLIBS@ libpop3d_la_SOURCES= libpop3d_la_LIBADD=../maildir/libmaildir.la ../rfc822/librfc822.la \ diff -uNr courier-imap-4.0.6.org/imap/Makefile.in courier-imap-4.0.6/imap/Makefile.in --- courier-imap-4.0.6.org/imap/Makefile.in 2005-09-24 02:46:58.000000000 +0200 +++ courier-imap-4.0.6/imap/Makefile.in 2006-01-16 17:18:55.000000000 +0100 @@ -90,12 +90,12 @@ 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) am_imaplogin_OBJECTS = imaplogin.$(OBJEXT) authenticate_auth.$(OBJEXT) \ proxy.$(OBJEXT) imaplogin_OBJECTS = $(am_imaplogin_OBJECTS) -am_pop3d_OBJECTS = pop3dserver.$(OBJEXT) pop3dcapa.$(OBJEXT) +am_pop3d_OBJECTS = pop3dserver.$(OBJEXT) pop3dcapa.$(OBJEXT) dracauth.o pop3d_OBJECTS = $(am_pop3d_OBJECTS) am_pop3login_OBJECTS = pop3login.$(OBJEXT) pop3dcapa.$(OBJEXT) \ proxy.$(OBJEXT) @@ -297,12 +297,12 @@ 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.la \ ../maildir/maildir.libdeps @dblibrary@ -imapd_LDADD = libimapd.la `cat ../maildir/maildir.libdeps` \ +imapd_LDADD = libimapd.la `cat ../maildir/maildir.libdeps` -ldrac \ @dblibrary@ @LIBDB@ @LIBGDBM@ @DEBUGLIB@ @LDAUTH@ -lcourierauth pop3login_SOURCES = pop3login.c pop3dcapa.c proxy.c proxy.h @@ -314,9 +314,9 @@ libpop3d_la_DEPENDENCIES = $(libpop3d_la_LIBADD) libpop3d_la_LDFLAGS = -static -pop3d_SOURCES = pop3dserver.c pop3dcapa.c +pop3d_SOURCES = pop3dserver.c pop3dcapa.c dracauth.c pop3d_DEPENDENCIES = libpop3d.la -pop3d_LDADD = libpop3d.la @LDAUTH@ -lcourierauth +pop3d_LDADD = libpop3d.la @LDAUTH@ -lcourierauth -ldrac HTML2TXT = links -dump -no-numbering all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am diff -uNr courier-imap-4.0.6.org/imap/dracauth.c courier-imap-4.0.6/imap/dracauth.c --- courier-imap-4.0.6.org/imap/dracauth.c 1970-01-01 01:00:00.000000000 +0100 +++ courier-imap-4.0.6/imap/dracauth.c 2006-01-16 17:09:13.000000000 +0100 @@ -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 -uNr courier-imap-4.0.6.org/imap/imapd.c courier-imap-4.0.6/imap/imapd.c --- courier-imap-4.0.6.org/imap/imapd.c 2005-08-20 15:04:22.000000000 +0200 +++ courier-imap-4.0.6/imap/imapd.c 2006-01-16 17:09:13.000000000 +0100 @@ -3966,7 +3966,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); @@ -6373,6 +6373,8 @@ if ((tag=getenv("IMAPLOGINTAG")) != 0) { + + drac_update_tcpremoteip(); writes(tag); writes(" OK LOGIN Ok.\r\n"); } diff -uNr courier-imap-4.0.6.org/imap/pop3dserver.c courier-imap-4.0.6/imap/pop3dserver.c --- courier-imap-4.0.6.org/imap/pop3dserver.c 2005-03-01 04:13:53.000000000 +0100 +++ courier-imap-4.0.6/imap/pop3dserver.c 2006-01-16 17:09:13.000000000 +0100 @@ -1043,6 +1043,8 @@ } sortmsgs(); printf("+OK logged in.\r\n"); + drac_update_tcpremoteip(); + fflush(stdout); loop(); return (0);