1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-31 10:46:16 +00:00
freebsd-ports/mail/panda-imap/files/patch-src_ipopd_ipop3d.c
Thierry Thomas 69d0a0a258 Adding mail/panda-cclient and mail/panda-imap.
Since Mark Crispin left the UW, development on UW-IMAP paused. Mark
however continued developing the toolkit under the name Panda-IMAP.
Since Mark passed, Jonathan Abbey created a project on GitHub, by
concatenating all of the public releases of UW IMAP with the last
version of Panda IMAP.

Add conflict lines with the original ports.
2014-12-14 17:56:14 +00:00

132 lines
3.8 KiB
C
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 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);