ports/mail/imap-uw/files/patch-ah
Anders Nordby a5dc544c95 Update to 2002c1.
PR:		51754
Submitted by:	Oliver Eikemeier <eikemeier@fillmore-labs.com>
2003-05-21 00:13:49 +00:00

122 lines
3.4 KiB
Text
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--- src/ipopd/ipop3d.c.orig Fri Jan 17 18:17:58 2003
+++ src/ipopd/ipop3d.c Mon May 19 22:18:28 2003
@@ -28,6 +28,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 */
@@ -57,6 +62,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 = "2003.83"; /* server version */
short state = AUTHORIZATION; /* server state */
short critical = NIL; /* non-zero if in critical code */
@@ -88,7 +99,53 @@
int mbxopen (char *mailbox);
long blat (char *text,long lines,unsigned long size);
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[])
@@ -209,9 +266,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=%ld/%ld",
user,tcp_clienthost (),nmsgs,stream->nmsgs);
+ }
else syslog (LOG_INFO,"Auth user=%.80s host=%.80s no mailbox",
user,tcp_clienthost ());
}
@@ -248,9 +309,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=%ld/%ld",
user,tcp_clienthost (),nmsgs,stream->nmsgs);
+ }
else syslog (LOG_INFO,"APOP user=%.80s host=%.80s no mailbox",
user,tcp_clienthost ());
}
@@ -580,6 +645,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=%ld/%ld",
t ? "Admin " : "",user,tcp_clienthost (),nmsgs,stream->nmsgs);