diff options
Diffstat (limited to 'mail/imap-uw/files/patch-ah')
-rw-r--r-- | mail/imap-uw/files/patch-ah | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/mail/imap-uw/files/patch-ah b/mail/imap-uw/files/patch-ah new file mode 100644 index 000000000000..87f47a8dcfa9 --- /dev/null +++ b/mail/imap-uw/files/patch-ah @@ -0,0 +1,83 @@ +--- src/ipopd/ipop3d.c.old Wed Oct 25 01:15:46 2000 ++++ src/ipopd/ipop3d.c Sun Jan 7 21:40:25 2001 +@@ -35,6 +35,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 */ + + /* Autologout timer */ + #define KODTIMEOUT 60*5 +@@ -61,6 +66,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 = "2000.69"; /* server version */ + short state = AUTHORIZATION; /* server state */ + short critical = NIL; /* non-zero if in critical code */ +@@ -104,7 +115,7 @@ + #include "linkage.c" + /* initialize server */ + server_init ((s = strrchr (argv[0],'/')) ? s + 1 : argv[0], +- "pop3","pop3s","pop",clkint,kodint,hupint,trmint); ++ "pop3","pop3s","pop3",clkint,kodint,hupint,trmint); + challenge[0] = '\0'; /* find the CRAM-MD5 authenticator */ + if (i = mail_lookup_auth_name ("CRAM-MD5",NIL)) { + AUTHENTICATOR *a = mail_lookup_auth (i); +@@ -692,6 +703,46 @@ + } + sprintf (tmp,"+OK Mailbox open, %lu messages\015\012",nmsgs); + PSOUT (tmp); ++ { ++ #ifdef 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 /etc/mail/dracd.host config file"); ++ 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 */ ++ } ++ + return TRANSACTION; + } + else sayonara = "-ERR Can't get lock. Mailbox in use\015\012"; |