summaryrefslogtreecommitdiff
path: root/mail/imap-uw/files/patch-src_ipopd_ipop3d.c
diff options
context:
space:
mode:
authorAdam Weinberger <adamw@FreeBSD.org>2014-07-28 23:20:38 +0000
committerAdam Weinberger <adamw@FreeBSD.org>2014-07-28 23:20:38 +0000
commit8e7fd48a294d7d6e54c6d07989807cff33ab19bd (patch)
tree0e35601cdb966c752e15cc4e5381c7e20e13fd50 /mail/imap-uw/files/patch-src_ipopd_ipop3d.c
parentscience/sigrok-cli: update to 0.5.0 (diff)
Rename mail/ patch-xy patches to reflect the files they modify.
Diffstat (limited to 'mail/imap-uw/files/patch-src_ipopd_ipop3d.c')
-rw-r--r--mail/imap-uw/files/patch-src_ipopd_ipop3d.c131
1 files changed, 131 insertions, 0 deletions
diff --git a/mail/imap-uw/files/patch-src_ipopd_ipop3d.c b/mail/imap-uw/files/patch-src_ipopd_ipop3d.c
new file mode 100644
index 000000000000..a9f3715c6158
--- /dev/null
+++ b/mail/imap-uw/files/patch-src_ipopd_ipop3d.c
@@ -0,0 +1,131 @@
+--- 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 @@
+ (((s = strrchr (argv[0],'/')) || (s = strrchr (argv[0],'\\'))) ?
+ s+1 : argv[0]) : "ipop3d";
+ /* set service name before linkage */
+- mail_parameters (NIL,SET_SERVICENAME,(void *) "pop");
++ mail_parameters (NIL,SET_SERVICENAME,(void *) "pop3");
+ #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);