ports/mail/imap-uw/files/patch-ah
Anders Nordby 58547ee729 Correct PAM service name for ipop3d to pop3 instead of pop like we've
used to have it for a long time.

Update PAM info to reflect that the session service is now used.

Bump PORTREVISION as this affects ipop3d runtime usage (need to do it on
cclient as well since we expect their versions to match exactly).

PR:		ports/52798
2003-06-01 20:49:37 +00:00

131 lines
3.8 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 Jun 2 02:47:10 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[])
@@ -101,7 +158,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);
@@ -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);