*** src/imapd/imapd.c.orig Wed Jul 11 22:08:16 2007 --- src/imapd/imapd.c Mon Jul 23 17:48:56 2007 *************** *** 38,43 **** --- 38,48 ---- #include "newsrc.h" #include + #ifdef DRAC_AUTH + #include + #include + #include + #endif /* DRAC_AUTH */ #define CRLF PSOUT ("\015\012") /* primary output terpri */ *************** *** 203,208 **** --- 208,219 ---- /* 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 = "389"; /* edit number of this server */ char *logout = "Logout"; /* syslogreason for logout */ char *goodbye = NIL; /* bye reason */ *************** *** 277,283 **** msg_string_next, /* get next byte in string structure */ msg_string_setpos /* set position in string structure */ }; ! /* Main program */ int main (int argc,char *argv[]) --- 288,337 ---- msg_string_next, /* get next byte in string structure */ msg_string_setpos /* set position in string structure */ }; ! ! #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[]) *************** *** 1501,1506 **** --- 1555,1563 ---- lasterror ()); return; } + #ifdef DRAC_AUTH + drac_auth(); + #endif /* DRAC_AUTH */ /* change in number of messages? */ if (existsquelled || (nmsgs != stream->nmsgs)) { PSOUT ("* ");