diff options
author | Hajimu UMEMOTO <ume@FreeBSD.org> | 2003-03-29 14:57:01 +0000 |
---|---|---|
committer | Hajimu UMEMOTO <ume@FreeBSD.org> | 2003-03-29 14:57:01 +0000 |
commit | 4c51254f2dad5105d38ba786493dc44af315245c (patch) | |
tree | ca3ff8412590963e9ea5ace82570b02563aa7a60 /mail/cyrus-imapd23/files/drac_auth.patch | |
parent | Upgrade to 5.0.8. (diff) |
Add Cyrus IMAPd 2.2.0-ALPHA after repo copy.
Notes
Notes:
svn path=/head/; revision=77682
Diffstat (limited to 'mail/cyrus-imapd23/files/drac_auth.patch')
-rw-r--r-- | mail/cyrus-imapd23/files/drac_auth.patch | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/mail/cyrus-imapd23/files/drac_auth.patch b/mail/cyrus-imapd23/files/drac_auth.patch new file mode 100644 index 000000000000..ec1ef5e99696 --- /dev/null +++ b/mail/cyrus-imapd23/files/drac_auth.patch @@ -0,0 +1,308 @@ +Index: acconfig.h +diff -u acconfig.h.orig acconfig.h +--- acconfig.h.orig Fri Feb 14 05:32:50 2003 ++++ acconfig.h Fri Mar 21 20:13:20 2003 +@@ -98,6 +98,9 @@ + /* do we have SASL support for APOP? */ + #undef HAVE_APOP + ++/* the Dynamic Relay Authorization Control package */ ++#undef DRAC_AUTH ++ + /* do we have OpenSSL? */ + #undef HAVE_SSL + +Index: configure.in +diff -u configure.in.orig configure.in +--- configure.in.orig Wed Mar 19 04:15:14 2003 ++++ configure.in Fri Mar 21 20:20:54 2003 +@@ -981,6 +981,19 @@ + SNMP_SUBDIRS="" + AC_SUBST(SNMP_SUBDIRS) + ++dnl ++dnl Test for DRAC ++dnl ++DRACLIBS= ++AC_ARG_WITH(drac, [ --with-drac=DIR use DRAC library in <DIR> [no] ], ++ if test -d "$withval"; then ++ LDFLAGS="$LDFLAGS -L${withval}" ++ AC_CHECK_LIB(drac, dracauth, ++ AC_DEFINE(DRAC_AUTH) ++ DRACLIBS="-ldrac") ++ fi) ++AC_SUBST(DRACLIBS) ++ + CMU_LIBWRAP + CMU_UCDSNMP + +Index: imap/Makefile.in +diff -u imap/Makefile.in.orig imap/Makefile.in +--- imap/Makefile.in.orig Fri Feb 28 03:10:28 2003 ++++ imap/Makefile.in Fri Mar 21 20:23:02 2003 +@@ -67,6 +67,7 @@ + SIEVE_LIBS = @SIEVE_LIBS@ + IMAP_COM_ERR_LIBS = @IMAP_COM_ERR_LIBS@ + LIB_WRAP = @LIB_WRAP@ ++DRAC_LIBS = @DRACLIBS@ + LIBS = $(IMAP_LIBS) $(IMAP_COM_ERR_LIBS) + DEPLIBS = ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@ + +@@ -206,17 +207,17 @@ + imapd: xversion $(IMAPDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE) + $(CC) $(LDFLAGS) -o imapd \ + $(SERVICE) $(IMAPDOBJS) mutex_fake.o \ +- libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP) ++ libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP) $(DRAC_LIBS) + + imapd.pure: $(IMAPDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE) + $(PURIFY) $(PUREOPT) $(CC) $(LDFLAGS) -o imapd.pure \ + $(SERVICE) $(IMAPDOBJS) mutex_fake.o libimap.a \ +- $(DEPLIBS) $(LIBS) $(LIB_WRAP) ++ $(DEPLIBS) $(LIBS) $(LIB_WRAP) $(DRAC_LIBS) + + imapd.quant: $(IMAPDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE) + $(QUANTIFY) $(QUANTOPT) $(CC) $(LDFLAGS) -o imapd.quant \ + $(SERVICE) $(IMAPDOBJS) mutex_fake.o libimap.a \ +- $(DEPLIBS) $(LIBS) $(LIB_WRAP) ++ $(DEPLIBS) $(LIBS) $(LIB_WRAP) $(DRAC_LIBS) $(DRAC_LIBS) + + proxyd: $(PROXYDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE) + $(CC) $(LDFLAGS) -o proxyd \ +@@ -242,7 +243,7 @@ + + pop3d: pop3d.o backend.o tls.o mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE) + $(CC) $(LDFLAGS) -o pop3d pop3d.o backend.o tls.o $(SERVICE) \ +- mutex_fake.o libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP) ++ mutex_fake.o libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP) $(DRAC_LIBS) + + nntpd: nntpd.o backend.o index.o spool.o netnews.o wildmat.o tls.o \ + mutex_fake.o nntp_err.o libimap.a $(DEPLIBS) $(SERVICE) +Index: imap/imapd.c +diff -u imap/imapd.c.orig imap/imapd.c +--- imap/imapd.c.orig Thu Mar 6 03:32:05 2003 ++++ imap/imapd.c Fri Mar 21 23:25:27 2003 +@@ -126,6 +126,18 @@ + 1, 1, &imapd_authstate, &imapd_userisadmin, &imapd_userisproxyadmin + }; + ++#ifdef DRAC_AUTH ++static struct { ++ int interval; /* dracd "ping" interval; 0 = disabled */ ++ unsigned long clientaddr; ++ struct prot_waitevent *event; ++} drac; ++ ++extern int dracconn(char *server, char **errmsg); ++extern int dracsend(unsigned long userip, char **errmsg); ++extern int dracdisc(char **errmsg); ++#endif /* DRAC_AUTH */ ++ + /* current sub-user state */ + static struct mailbox mboxstruct; + static struct mailbox *imapd_mailbox; +@@ -447,6 +459,23 @@ + /* setup for sending IMAP IDLE notifications */ + idle_enabled(); + ++#ifdef DRAC_AUTH ++ /* setup for sending DRAC "pings" */ ++ drac.event = NULL; ++ drac.interval = config_getint(IMAPOPT_DRACINTERVAL); ++ if (drac.interval < 0) drac.interval = 0; ++ if (drac.interval) { ++ char *err; ++ ++ if (dracconn((char*) config_getstring(IMAPOPT_DRACHOST), &err) != 0) { ++ /* disable DRAC */ ++ drac.interval = 0; ++ syslog(LOG_ERR, "dracconn: %s", err); ++ syslog(LOG_ERR, "DRAC notifications disabled"); ++ } ++ } ++#endif /* DRAC_AUTH */ ++ + /* create connection to the SNMP listener, if available. */ + snmp_connect(); /* ignore return code */ + snmp_set_str(SERVER_NAME_VERSION,CYRUS_VERSION); +@@ -533,6 +562,15 @@ + imapd_haveaddr = 1; + } + } ++ ++#ifdef DRAC_AUTH ++ if (((struct sockaddr *)&imapd_remoteaddr)->sa_family == AF_INET) ++ drac.clientaddr = ((struct sockaddr_in *)&imapd_remoteaddr)->sin_addr.s_addr; ++ else ++ drac.clientaddr = 0; ++ } else { ++ drac.clientaddr = 0; ++#endif /* DRAC_AUTH */ + } + + /* create the SASL connection */ +@@ -575,6 +613,11 @@ + prot_flush(imapd_out); + snmp_increment(ACTIVE_CONNECTIONS, -1); + ++#ifdef DRAC_AUTH ++ if (drac.event) prot_removewaitevent(imapd_in, drac.event); ++ drac.event = NULL; ++#endif /* DRAC_AUTH */ ++ + /* cleanup */ + imapd_reset(); + +@@ -645,6 +688,10 @@ + + cyrus_done(); + ++#ifdef DRAC_AUTH ++ if (drac.interval) (void) dracdisc((char **)NULL); ++#endif /* DRAC_AUTH */ ++ + exit(code); + } + +@@ -667,6 +714,35 @@ + shut_down(code); + } + ++#ifdef DRAC_AUTH ++/* ++ * Ping dracd every 'drac.interval' minutes ++ * to let it know that we are still connected ++ */ ++struct prot_waitevent *drac_ping(struct protstream *s, ++ struct prot_waitevent *ev, void *rock) ++{ ++ char *err; ++ static int nfailure = 0; ++ ++ if (dracsend(drac.clientaddr, &err) != 0) { ++ syslog(LOG_ERR, "dracsend: %s", err); ++ if (++nfailure >= 3) { ++ /* can't contact dracd for 3 consecutive tries - disable DRAC */ ++ prot_removewaitevent(s, ev); ++ drac.event = NULL; ++ syslog(LOG_ERR, "DRAC notifications disabled"); ++ return NULL; ++ } ++ } ++ else ++ nfailure = 0; ++ ++ ev->mark = time(NULL) + (drac.interval * 60); ++ return ev; ++} ++#endif /* DRAC_AUTH */ ++ + /* + * Top-level command loop parsing + */ +@@ -1664,6 +1740,11 @@ + + prot_printf(imapd_out, "%s OK %s\r\n", tag, reply); + ++#ifdef DRAC_AUTH ++ if (drac.interval && drac.clientaddr) ++ drac.event = prot_addwaitevent(imapd_in, 0 /* now */, drac_ping, NULL); ++#endif /* DRAC_AUTH */ ++ + /* Create telemetry log */ + imapd_logfd = telemetry_log(imapd_userid, imapd_in, imapd_out); + +@@ -1786,6 +1867,11 @@ + + prot_setsasl(imapd_in, imapd_saslconn); + prot_setsasl(imapd_out, imapd_saslconn); ++ ++#ifdef DRAC_AUTH ++ if (drac.interval && drac.clientaddr) ++ drac.event = prot_addwaitevent(imapd_in, 0 /* now */, drac_ping, NULL); ++#endif /* DRAC_AUTH */ + + /* Create telemetry log */ + imapd_logfd = telemetry_log(imapd_userid, imapd_in, imapd_out); +Index: imap/pop3d.c +diff -u imap/pop3d.c.orig imap/pop3d.c +--- imap/pop3d.c.orig Thu Mar 13 01:38:16 2003 ++++ imap/pop3d.c Fri Mar 21 23:37:11 2003 +@@ -101,6 +101,10 @@ + extern int opterr; + + ++#ifdef DRAC_AUTH ++static int drac_enabled; ++extern int dracauth(char *server, unsigned long userip, char **errmsg); ++#endif /* DRAC_AUTH */ + + #ifdef HAVE_SSL + static SSL *tls_conn; +@@ -395,6 +399,10 @@ + prot_settimeout(popd_in, timeout*60); + prot_setflushonread(popd_in, popd_out); + ++#ifdef DRAC_AUTH ++ drac_enabled = (config_getint(IMAPOPT_DRACINTERVAL) > 0); ++#endif /* DRAC_AUTH */ ++ + if (kflag) kpop(); + + /* we were connected on pop3s port so we should do +@@ -1422,6 +1430,21 @@ + popd_mailbox = &mboxstruct; + proc_register("pop3d", popd_clienthost, popd_userid, + popd_mailbox->name); ++ ++#ifdef DRAC_AUTH ++ if (drac_enabled && ++ ((struct sockaddr *)&popd_remoteaddr)->sa_family == AF_INET) { ++ char *err; ++ ++ if (dracauth((char*) config_getstring(IMAPOPT_DRACHOST), ++ ((struct sockaddr_in *)&popd_remoteaddr)->sin_addr.s_addr, &err) != 0) { ++ /* disable DRAC */ ++ drac_enabled = 0; ++ syslog(LOG_ERR, "dracauth: %s", err); ++ syslog(LOG_ERR, "DRAC notifications disabled"); ++ } ++ } ++#endif /* DRAC_AUTH */ + } + else { + /* remote mailbox */ +Index: imap/version.c +diff -u imap/version.c.orig imap/version.c +--- imap/version.c.orig Fri Feb 14 05:33:02 2003 ++++ imap/version.c Fri Mar 21 20:13:21 2003 +@@ -143,6 +143,10 @@ + snprintf(env_buf + strlen(env_buf), MAXIDVALUELEN - strlen(env_buf), + "; %s", SIEVE_VERSION); + #endif ++#ifdef DRAC_AUTH ++ snprintf(env_buf + strlen(env_buf), MAXIDVALUELEN - strlen(env_buf), ++ "; DRAC"); ++#endif + #ifdef HAVE_LIBWRAP + snprintf(env_buf + strlen(env_buf), MAXIDVALUELEN - strlen(env_buf), + "; TCP Wrappers"); +Index: lib/imapoptions +diff -u lib/imapoptions.orig lib/imapoptions +--- lib/imapoptions.orig Thu Mar 20 04:00:39 2003 ++++ lib/imapoptions Fri Mar 21 20:32:15 2003 +@@ -154,6 +154,14 @@ + { "deleteright", "c", STRING } + /* The right that a user needs to delete a mailbox. */ + ++{ "dracinterval", 5, INT } ++/* If nonzero, enables the use of DRAC (Dynamic Relay Authorization ++ Control) by the pop3d and imapd daemons. Also sets the interval ++ (in minutes) between re-authorization requests made by imapd. */ ++ ++{ "drachost", "localhost", STRING } ++/* Hostname of the RPC dracd server. */ ++ + { "duplicatesuppression", 1, SWITCH } + /* If enabled, lmtpd will suppress delivery of a message to a mailbox if + a message with the same message-id (or resent-message-id) is recorded |