|
Lines 1-173
Link Here
|
| 1 |
*** src/ipopd/ipop3d.c.orig Tue May 22 01:23:47 2007 |
1 |
--- src/ipopd/ipop3d.c.orig 2008-06-04 20:18:34.000000000 +0200 |
| 2 |
--- src/ipopd/ipop3d.c Mon Jul 23 17:46:53 2007 |
2 |
+++ src/ipopd/ipop3d.c 2009-01-16 10:19:50.000000000 +0100 |
| 3 |
*************** |
3 |
@@ -34,6 +34,11 @@ |
| 4 |
*** 36,41 **** |
4 |
#include <time.h> |
| 5 |
--- 36,46 ---- |
5 |
#include "c-client.h" |
| 6 |
#include <time.h> |
6 |
|
| 7 |
#include "c-client.h" |
7 |
+#ifdef DRAC_AUTH |
| 8 |
|
8 |
+#include <netinet/in.h> |
| 9 |
+ #ifdef DRAC_AUTH |
9 |
+#include <arpa/inet.h> |
| 10 |
+ #include <netinet/in.h> |
10 |
+#include <stdlib.h> |
| 11 |
+ #include <arpa/inet.h> |
11 |
+#endif /* DRAC_AUTH */ |
| 12 |
+ #include <stdlib.h> |
12 |
|
| 13 |
+ #endif /* DRAC_AUTH */ |
13 |
#define CRLF PSOUT ("\015\012") /* primary output terpri */ |
| 14 |
|
14 |
|
| 15 |
#define CRLF PSOUT ("\015\012") /* primary output terpri */ |
15 |
@@ -59,6 +64,12 @@ |
| 16 |
|
16 |
|
| 17 |
*************** |
17 |
/* Global storage */ |
| 18 |
*** 65,70 **** |
18 |
|
| 19 |
--- 70,81 ---- |
19 |
+#ifdef DRAC_AUTH |
| 20 |
|
20 |
+#define DRACTIMEOUT 10*60 /* check every 10 minutes */ |
| 21 |
/* Global storage */ |
21 |
+time_t lastdrac = 0; /* time of last drac check */ |
| 22 |
|
22 |
+extern char *getenv (); |
| 23 |
+ #ifdef DRAC_AUTH |
23 |
+#endif /* DRAC_AUTH */ |
| 24 |
+ #define DRACTIMEOUT 10*60 /* check every 10 minutes */ |
24 |
+ |
| 25 |
+ time_t lastdrac = 0; /* time of last drac check */ |
25 |
char *version = "104"; /* edit number of this server */ |
| 26 |
+ extern char *getenv (); |
26 |
short state = AUTHORIZATION; /* server state */ |
| 27 |
+ #endif /* DRAC_AUTH */ |
27 |
short critical = NIL; /* non-zero if in critical code */ |
| 28 |
+ |
28 |
@@ -100,7 +111,53 @@ |
| 29 |
char *version = "98"; /* edit number of this server */ |
29 |
int mbxopen (char *mailbox); |
| 30 |
short state = AUTHORIZATION; /* server state */ |
30 |
long blat (char *text,long lines,unsigned long size,STRING *st); |
| 31 |
short critical = NIL; /* non-zero if in critical code */ |
31 |
void rset (); |
| 32 |
*************** |
32 |
- |
| 33 |
*** 98,104 **** |
33 |
+#ifdef DRAC_AUTH |
| 34 |
int mbxopen (char *mailbox); |
34 |
+void drac_auth(); |
| 35 |
long blat (char *text,long lines,unsigned long size,STRING *st); |
35 |
+#endif /* DRAC_AUTH */ |
| 36 |
void rset (); |
36 |
+ |
| 37 |
! |
37 |
+#ifdef DRAC_AUTH |
| 38 |
/* Main program */ |
38 |
+/* DRAC Authorization |
| 39 |
|
39 |
+ */ |
| 40 |
int main (int argc,char *argv[]) |
40 |
+void drac_auth () |
| 41 |
--- 109,161 ---- |
41 |
+{ |
| 42 |
int mbxopen (char *mailbox); |
42 |
+ if (time (0) > lastdrac + DRACTIMEOUT) |
| 43 |
long blat (char *text,long lines,unsigned long size,STRING *st); |
43 |
+ { |
| 44 |
void rset (); |
44 |
+ FILE *dracconf; |
| 45 |
! #ifdef DRAC_AUTH |
45 |
+ char host[100]; |
| 46 |
! void drac_auth(); |
46 |
+ char *drachost; |
| 47 |
! #endif /* DRAC_AUTH */ |
47 |
+ char *err; |
| 48 |
! |
48 |
+ char *p; |
| 49 |
! #ifdef DRAC_AUTH |
49 |
+ |
| 50 |
! /* DRAC Authorization |
50 |
+ if ( (dracconf = fopen(ETC_DIR "/dracd.host", "r")) == NULL) |
| 51 |
! */ |
51 |
+ { |
| 52 |
! void drac_auth () |
52 |
+ syslog (LOG_INFO, "dracd: error opening %s/dracd.host config file",ETC_DIR); |
| 53 |
! { |
53 |
+ exit(1); |
| 54 |
! if (time (0) > lastdrac + DRACTIMEOUT) |
54 |
+ } |
| 55 |
! { |
55 |
+ |
| 56 |
! FILE *dracconf; |
56 |
+ fgets(host, 100, dracconf); |
| 57 |
! char host[100]; |
57 |
+ p = strchr(host, '\n'); |
| 58 |
! char *drachost; |
58 |
+ if(p != NULL) |
| 59 |
! char *err; |
59 |
+ *p = '\0'; |
| 60 |
! char *p; |
60 |
+ fclose(dracconf); |
| 61 |
! |
61 |
+ |
| 62 |
! if ( (dracconf = fopen(ETC_DIR "/dracd.host", "r")) == NULL) |
62 |
+ if( drachost = (host) ) |
| 63 |
! { |
63 |
+ { |
| 64 |
! syslog (LOG_INFO, "dracd: error opening %s/dracd.host config file",ETC_DIR); |
64 |
+ struct sockaddr_in sin; |
| 65 |
! exit(1); |
65 |
+ int sinlen = sizeof (struct sockaddr_in); |
| 66 |
! } |
66 |
+ char *client = getpeername (0,(struct sockaddr *) &sin,(void *) &sinlen) ? |
| 67 |
! |
67 |
+ "UNKNOWN" : inet_ntoa (sin.sin_addr); |
| 68 |
! fgets(host, 100, dracconf); |
68 |
+ |
| 69 |
! p = strchr(host, '\n'); |
69 |
+ lastdrac = time(0); |
| 70 |
! if(p != NULL) |
70 |
+ |
| 71 |
! *p = '\0'; |
71 |
+ if (dracauth(drachost, inet_addr(client), &err) != 0) |
| 72 |
! fclose(dracconf); |
72 |
+ syslog (LOG_INFO, err); |
| 73 |
! |
73 |
+ else |
| 74 |
! if( drachost = (host) ) |
74 |
+ syslog (LOG_INFO, "dracd: authorized ip %s", client); |
| 75 |
! { |
75 |
+ } |
| 76 |
! struct sockaddr_in sin; |
76 |
+ } |
| 77 |
! int sinlen = sizeof (struct sockaddr_in); |
77 |
+} |
| 78 |
! char *client = getpeername (0,(struct sockaddr *) &sin,(void *) &sinlen) ? |
78 |
+#endif /* DRAC_AUTH */ |
| 79 |
! "UNKNOWN" : inet_ntoa (sin.sin_addr); |
79 |
+ |
| 80 |
! |
80 |
/* Main program */ |
| 81 |
! lastdrac = time(0); |
81 |
|
| 82 |
! |
82 |
int main (int argc,char *argv[]) |
| 83 |
! if (dracauth(drachost, inet_addr(client), &err) != 0) |
83 |
@@ -113,7 +170,7 @@ |
| 84 |
! syslog (LOG_INFO, err); |
84 |
(((s = strrchr (argv[0],'/')) || (s = strrchr (argv[0],'\\'))) ? |
| 85 |
! else |
85 |
s+1 : argv[0]) : "ipop3d"; |
| 86 |
! syslog (LOG_INFO, "dracd: authorized ip %s", client); |
86 |
/* set service name before linkage */ |
| 87 |
! } |
87 |
- mail_parameters (NIL,SET_SERVICENAME,(void *) "pop"); |
| 88 |
! } |
88 |
+ mail_parameters (NIL,SET_SERVICENAME,(void *) "pop3"); |
| 89 |
! } |
89 |
#include "linkage.c" |
| 90 |
! #endif /* DRAC_AUTH */ |
90 |
/* initialize server */ |
| 91 |
! |
91 |
server_init (pgmname,"pop3","pop3s",clkint,kodint,hupint,trmint,NIL); |
| 92 |
/* Main program */ |
92 |
@@ -228,9 +285,13 @@ |
| 93 |
|
93 |
syslog (LOG_INFO,"AUTHENTICATE %s failure host=%.80s",s, |
| 94 |
int main (int argc,char *argv[]) |
94 |
tcp_clienthost ()); |
| 95 |
*************** |
95 |
} |
| 96 |
*** 111,117 **** |
96 |
- else if ((state = mbxopen ("INBOX")) == TRANSACTION) |
| 97 |
(((s = strrchr (argv[0],'/')) || (s = strrchr (argv[0],'\\'))) ? |
97 |
+ else if ((state = mbxopen ("INBOX")) == TRANSACTION) { |
| 98 |
s+1 : argv[0]) : "ipop3d"; |
98 |
+ #ifdef DRAC_AUTH |
| 99 |
/* set service name before linkage */ |
99 |
+ drac_auth(); |
| 100 |
! mail_parameters (NIL,SET_SERVICENAME,(void *) "pop"); |
100 |
+ #endif /* DRAC_AUTH */ |
| 101 |
#include "linkage.c" |
101 |
syslog (LOG_INFO,"Auth user=%.80s host=%.80s nmsgs=%lu/%lu", |
| 102 |
/* initialize server */ |
102 |
user,tcp_clienthost (),nmsgs,stream->nmsgs); |
| 103 |
server_init (pgmname,"pop3","pop3s",clkint,kodint,hupint,trmint); |
103 |
+ } |
| 104 |
--- 168,174 ---- |
104 |
else syslog (LOG_INFO,"Auth user=%.80s host=%.80s no mailbox", |
| 105 |
(((s = strrchr (argv[0],'/')) || (s = strrchr (argv[0],'\\'))) ? |
105 |
user,tcp_clienthost ()); |
| 106 |
s+1 : argv[0]) : "ipop3d"; |
106 |
} |
| 107 |
/* set service name before linkage */ |
107 |
@@ -260,9 +321,13 @@ |
| 108 |
! mail_parameters (NIL,SET_SERVICENAME,(void *) "pop3"); |
108 |
PSOUT ("-ERR Missing APOP argument\015\012"); |
| 109 |
#include "linkage.c" |
109 |
else if (!(user = apop_login (challenge,s,t,argc,argv))) |
| 110 |
/* initialize server */ |
110 |
PSOUT ("-ERR Bad APOP\015\012"); |
| 111 |
server_init (pgmname,"pop3","pop3s",clkint,kodint,hupint,trmint); |
111 |
- else if ((state = mbxopen ("INBOX")) == TRANSACTION) |
| 112 |
*************** |
112 |
+ else if ((state = mbxopen ("INBOX")) == TRANSACTION) { |
| 113 |
*** 215,223 **** |
113 |
+ #ifdef DRAC_AUTH |
| 114 |
syslog (LOG_INFO,"AUTHENTICATE %s failure host=%.80s",s, |
114 |
+ drac_auth(); |
| 115 |
tcp_clienthost ()); |
115 |
+ #endif /* DRAC_AUTH */ |
| 116 |
} |
116 |
syslog (LOG_INFO,"APOP user=%.80s host=%.80s nmsgs=%lu/%lu", |
| 117 |
! else if ((state = mbxopen ("INBOX")) == TRANSACTION) |
117 |
user,tcp_clienthost (),nmsgs,stream->nmsgs); |
| 118 |
syslog (LOG_INFO,"Auth user=%.80s host=%.80s nmsgs=%ld/%ld", |
118 |
+ } |
| 119 |
user,tcp_clienthost (),nmsgs,stream->nmsgs); |
119 |
else syslog (LOG_INFO,"APOP user=%.80s host=%.80s no mailbox", |
| 120 |
else syslog (LOG_INFO,"Auth user=%.80s host=%.80s no mailbox", |
120 |
user,tcp_clienthost ()); |
| 121 |
user,tcp_clienthost ()); |
121 |
} |
| 122 |
} |
122 |
@@ -665,6 +730,9 @@ |
| 123 |
--- 272,284 ---- |
123 |
/* attempt the login */ |
| 124 |
syslog (LOG_INFO,"AUTHENTICATE %s failure host=%.80s",s, |
124 |
if (server_login (user,pass,t,argc,argv)) { |
| 125 |
tcp_clienthost ()); |
125 |
int ret = mbxopen ("INBOX"); |
| 126 |
} |
126 |
+ #ifdef DRAC_AUTH |
| 127 |
! else if ((state = mbxopen ("INBOX")) == TRANSACTION) { |
127 |
+ drac_auth(); |
| 128 |
! #ifdef DRAC_AUTH |
128 |
+ #endif /* DRAC_AUTH */ |
| 129 |
! drac_auth(); |
129 |
if (ret == TRANSACTION) /* mailbox opened OK? */ |
| 130 |
! #endif /* DRAC_AUTH */ |
130 |
syslog (LOG_INFO,"%sLogin user=%.80s host=%.80s nmsgs=%lu/%lu", |
| 131 |
syslog (LOG_INFO,"Auth user=%.80s host=%.80s nmsgs=%ld/%ld", |
131 |
t ? "Admin " : "",user,tcp_clienthost (),nmsgs,stream->nmsgs); |
| 132 |
user,tcp_clienthost (),nmsgs,stream->nmsgs); |
|
|
| 133 |
+ } |
| 134 |
else syslog (LOG_INFO,"Auth user=%.80s host=%.80s no mailbox", |
| 135 |
user,tcp_clienthost ()); |
| 136 |
} |
| 137 |
*************** |
| 138 |
*** 247,255 **** |
| 139 |
PSOUT ("-ERR Missing APOP argument\015\012"); |
| 140 |
else if (!(user = apop_login (challenge,s,t,argc,argv))) |
| 141 |
PSOUT ("-ERR Bad APOP\015\012"); |
| 142 |
! else if ((state = mbxopen ("INBOX")) == TRANSACTION) |
| 143 |
syslog (LOG_INFO,"APOP user=%.80s host=%.80s nmsgs=%ld/%ld", |
| 144 |
user,tcp_clienthost (),nmsgs,stream->nmsgs); |
| 145 |
else syslog (LOG_INFO,"APOP user=%.80s host=%.80s no mailbox", |
| 146 |
user,tcp_clienthost ()); |
| 147 |
} |
| 148 |
--- 308,320 ---- |
| 149 |
PSOUT ("-ERR Missing APOP argument\015\012"); |
| 150 |
else if (!(user = apop_login (challenge,s,t,argc,argv))) |
| 151 |
PSOUT ("-ERR Bad APOP\015\012"); |
| 152 |
! else if ((state = mbxopen ("INBOX")) == TRANSACTION) { |
| 153 |
! #ifdef DRAC_AUTH |
| 154 |
! drac_auth(); |
| 155 |
! #endif /* DRAC_AUTH */ |
| 156 |
syslog (LOG_INFO,"APOP user=%.80s host=%.80s nmsgs=%ld/%ld", |
| 157 |
user,tcp_clienthost (),nmsgs,stream->nmsgs); |
| 158 |
+ } |
| 159 |
else syslog (LOG_INFO,"APOP user=%.80s host=%.80s no mailbox", |
| 160 |
user,tcp_clienthost ()); |
| 161 |
} |
| 162 |
*************** |
| 163 |
*** 609,614 **** |
| 164 |
--- 674,682 ---- |
| 165 |
/* attempt the login */ |
| 166 |
if (server_login (user,pass,t,argc,argv)) { |
| 167 |
int ret = mbxopen ("INBOX"); |
| 168 |
+ #ifdef DRAC_AUTH |
| 169 |
+ drac_auth(); |
| 170 |
+ #endif /* DRAC_AUTH */ |
| 171 |
if (ret == TRANSACTION) /* mailbox opened OK? */ |
| 172 |
syslog (LOG_INFO,"%sLogin user=%.80s host=%.80s nmsgs=%ld/%ld", |
| 173 |
t ? "Admin " : "",user,tcp_clienthost (),nmsgs,stream->nmsgs); |