diff options
Diffstat (limited to 'mail/imap-uw/files/patch-src_ipopd_ipop3d.c')
-rw-r--r-- | mail/imap-uw/files/patch-src_ipopd_ipop3d.c | 122 |
1 files changed, 1 insertions, 121 deletions
diff --git a/mail/imap-uw/files/patch-src_ipopd_ipop3d.c b/mail/imap-uw/files/patch-src_ipopd_ipop3d.c index a9f3715c6158..0b3fb92483ee 100644 --- a/mail/imap-uw/files/patch-src_ipopd_ipop3d.c +++ b/mail/imap-uw/files/patch-src_ipopd_ipop3d.c @@ -1,86 +1,6 @@ --- src/ipopd/ipop3d.c.orig 2008-06-04 20:18:34.000000000 +0200 +++ src/ipopd/ipop3d.c 2009-01-16 10:19:50.000000000 +0100 -@@ -34,6 +34,11 @@ - #include <time.h> - #include "c-client.h" - -+#ifdef DRAC_AUTH -+#include <netinet/in.h> -+#include <arpa/inet.h> -+#include <stdlib.h> -+#endif /* DRAC_AUTH */ - - #define CRLF PSOUT ("\015\012") /* primary output terpri */ - -@@ -59,6 +64,12 @@ - - /* Global storage */ - -+#ifdef DRAC_AUTH -+#define DRACTIMEOUT 10*60 /* check every 10 minutes */ -+time_t lastdrac = 0; /* time of last drac check */ -+extern char *getenv (); -+#endif /* DRAC_AUTH */ -+ - char *version = "104"; /* edit number of this server */ - short state = AUTHORIZATION; /* server state */ - short critical = NIL; /* non-zero if in critical code */ -@@ -100,7 +111,53 @@ - int mbxopen (char *mailbox); - long blat (char *text,long lines,unsigned long size,STRING *st); - void rset (); -- -+#ifdef DRAC_AUTH -+void drac_auth(); -+#endif /* DRAC_AUTH */ -+ -+#ifdef DRAC_AUTH -+/* DRAC Authorization -+ */ -+void drac_auth () -+{ -+ if (time (0) > lastdrac + DRACTIMEOUT) -+ { -+ FILE *dracconf; -+ char host[100]; -+ char *drachost; -+ char *err; -+ char *p; -+ -+ if ( (dracconf = fopen(ETC_DIR "/dracd.host", "r")) == NULL) -+ { -+ syslog (LOG_INFO, "dracd: error opening %s/dracd.host config file",ETC_DIR); -+ exit(1); -+ } -+ -+ fgets(host, 100, dracconf); -+ p = strchr(host, '\n'); -+ if(p != NULL) -+ *p = '\0'; -+ fclose(dracconf); -+ -+ if( drachost = (host) ) -+ { -+ struct sockaddr_in sin; -+ int sinlen = sizeof (struct sockaddr_in); -+ char *client = getpeername (0,(struct sockaddr *) &sin,(void *) &sinlen) ? -+ "UNKNOWN" : inet_ntoa (sin.sin_addr); -+ -+ lastdrac = time(0); -+ -+ if (dracauth(drachost, inet_addr(client), &err) != 0) -+ syslog (LOG_INFO, err); -+ else -+ syslog (LOG_INFO, "dracd: authorized ip %s", client); -+ } -+ } -+} -+#endif /* DRAC_AUTH */ -+ - /* Main program */ - - int main (int argc,char *argv[]) -@@ -113,7 +170,7 @@ +@@ -113,7 +113,7 @@ (((s = strrchr (argv[0],'/')) || (s = strrchr (argv[0],'\\'))) ? s+1 : argv[0]) : "ipop3d"; /* set service name before linkage */ @@ -89,43 +9,3 @@ #include "linkage.c" /* initialize server */ server_init (pgmname,"pop3","pop3s",clkint,kodint,hupint,trmint,NIL); -@@ -228,9 +285,13 @@ - syslog (LOG_INFO,"AUTHENTICATE %s failure host=%.80s",s, - tcp_clienthost ()); - } -- else if ((state = mbxopen ("INBOX")) == TRANSACTION) -+ else if ((state = mbxopen ("INBOX")) == TRANSACTION) { -+ #ifdef DRAC_AUTH -+ drac_auth(); -+ #endif /* DRAC_AUTH */ - syslog (LOG_INFO,"Auth user=%.80s host=%.80s nmsgs=%lu/%lu", - user,tcp_clienthost (),nmsgs,stream->nmsgs); -+ } - else syslog (LOG_INFO,"Auth user=%.80s host=%.80s no mailbox", - user,tcp_clienthost ()); - } -@@ -260,9 +321,13 @@ - PSOUT ("-ERR Missing APOP argument\015\012"); - else if (!(user = apop_login (challenge,s,t,argc,argv))) - PSOUT ("-ERR Bad APOP\015\012"); -- else if ((state = mbxopen ("INBOX")) == TRANSACTION) -+ else if ((state = mbxopen ("INBOX")) == TRANSACTION) { -+ #ifdef DRAC_AUTH -+ drac_auth(); -+ #endif /* DRAC_AUTH */ - syslog (LOG_INFO,"APOP user=%.80s host=%.80s nmsgs=%lu/%lu", - user,tcp_clienthost (),nmsgs,stream->nmsgs); -+ } - else syslog (LOG_INFO,"APOP user=%.80s host=%.80s no mailbox", - user,tcp_clienthost ()); - } -@@ -665,6 +730,9 @@ - /* attempt the login */ - if (server_login (user,pass,t,argc,argv)) { - int ret = mbxopen ("INBOX"); -+ #ifdef DRAC_AUTH -+ drac_auth(); -+ #endif /* DRAC_AUTH */ - if (ret == TRANSACTION) /* mailbox opened OK? */ - syslog (LOG_INFO,"%sLogin user=%.80s host=%.80s nmsgs=%lu/%lu", - t ? "Admin " : "",user,tcp_clienthost (),nmsgs,stream->nmsgs); |