diff options
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | checkalias.c | 4 | ||||
| -rw-r--r-- | env.c | 2 | ||||
| -rw-r--r-- | imap.c | 39 | ||||
| -rw-r--r-- | pop3.c | 37 | ||||
| -rw-r--r-- | transact.c | 18 | 
6 files changed, 66 insertions, 36 deletions
| @@ -234,6 +234,8 @@ fetchmail 6.3.0 (not yet released officially):    saved run control file. Matthias Andree  * Properly shut down SSL connections. Berlios Patch #647 by Arkadiusz    MiĆkiewicz. (MA) +* Global variable cleanup, to fix daemon mode reinitialization problems. Patch +  by Sunil Shetye. (MA)  # INTERNAL CHANGES  * Switched to automake. Matthias Andree. diff --git a/checkalias.c b/checkalias.c index 687b5478..fd00502f 100644 --- a/checkalias.c +++ b/checkalias.c @@ -30,7 +30,7 @@ typedef unsigned char address_t[sizeof (struct in_addr)];  static int getaddresses(struct addrinfo **result, const char *name)  { -    struct addrinfo hints, *res; +    struct addrinfo hints;      memset(&hints, 0, sizeof(hints));      hints.ai_socktype=SOCK_STREAM; @@ -57,8 +57,6 @@ static int is_ip_alias(const char *name1,const char *name2)   */  {      int rc = FALSE; -    struct hostent *hp; -    char **p;      struct addrinfo *res1 = NULL, *res2 = NULL, *ii, *ij; @@ -149,7 +149,7 @@ char *host_fqdn(void)      if (strchr(tmpbuf, '.') == NULL)      {  	/* if we got a basename (as we do in Linux) make a FQDN of it */ -	struct addrinfo hints, *res, *res0; +	struct addrinfo hints, *res;  	int e;  	memset(&hints, 0, sizeof hints); @@ -24,15 +24,30 @@  #define IMAP4		0	/* IMAP4 rev 0, RFC1730 */  #define IMAP4rev1	1	/* IMAP4 rev 1, RFC2060 */ +/* global variables: please reinitialize them explicitly for proper + * working in daemon mode */ + +/* TODO: session variables to be initialized before server greeting */ +static int preauth = FALSE; + +/* session variables initialized in capa_probe() or imap_getauth() */ +static char capabilities[MSGBUFSIZE+1]; +static int imap_version = IMAP4; +static flag do_idle = FALSE, has_idle = FALSE; +static int expunge_period = 1; + +/* mailbox variables initialized in imap_getrange() */  static int count = 0, recentcount = 0, unseen = 0, deletions = 0; -static int recentcount_ok = 0;  static unsigned int startcount = 1; -static int expunged, expunge_period, saved_timeout = 0; -static int imap_version, preauth; -static flag do_idle, has_idle; -static char capabilities[MSGBUFSIZE+1]; +static int expunged = 0;  static unsigned int *unseen_messages; +/* for "IMAP> EXPUNGE" */ +static int recentcount_ok = 0; + +/* for "IMAP> IDLE" */ +static int saved_timeout = 0; +  static int imap_ok(int sock, char *argbuf)  /* parse command response */  { @@ -168,10 +183,6 @@ static int imap_ok(int sock, char *argbuf)  #ifdef NTLM_ENABLE  #include "ntlm.h" -static tSmbNtlmAuthRequest   request; -static tSmbNtlmAuthChallenge challenge; -static tSmbNtlmAuthResponse  response; -  /*   * NTLM support by Grant Edwards.   * @@ -185,6 +196,10 @@ static tSmbNtlmAuthResponse  response;  static int do_imap_ntlm(int sock, struct query *ctl)  { +    tSmbNtlmAuthRequest request; +    tSmbNtlmAuthChallenge challenge; +    tSmbNtlmAuthResponse response; +      char msgbuf[2048];      int result,len; @@ -300,13 +315,13 @@ static void capa_probe(int sock, struct query *ctl)       * Handle idling.  We depend on coming through here on startup       * and after each timeout (including timeouts during idles).       */ +    do_idle = ctl->idle;      if (ctl->idle)      { -	do_idle = TRUE;  	if (strstr(capabilities, "IDLE")) -	{  	    has_idle = TRUE; -	} +	else +	    has_idle = FALSE;  	if (outlevel >= O_VERBOSE)  	    report(stdout, GT_("will idle after poll\n"));      } @@ -26,38 +26,41 @@  #include <opie.h>  #endif /* OPIE_ENABLE */ -static int last; -#ifdef SDPS_ENABLE -char *sdps_envfrom; -char *sdps_envto; -#endif /* SDPS_ENABLE */ +/* global variables: please reinitialize them explicitly for proper + * working in daemon mode */ +/* TODO: session variables to be initialized before server greeting */  #ifdef OPIE_ENABLE  static char lastok[POPBUFSIZE+1];  #endif /* OPIE_ENABLE */ -/* these variables are shared between the CAPA probe and the authenticator */ +/* session variables initialized in capa_probe() or pop3_getauth() */  #if defined(GSSAPI) -    flag has_gssapi = FALSE; +flag has_gssapi = FALSE;  #endif /* defined(GSSAPI) */  #if defined(KERBEROS_V4) || defined(KERBEROS_V5) -    flag has_kerberos = FALSE; +flag has_kerberos = FALSE;  #endif /* defined(KERBEROS_V4) || defined(KERBEROS_V5) */ -    static flag has_cram = FALSE; +static flag has_cram = FALSE;  #ifdef OPIE_ENABLE -    flag has_otp = FALSE; +flag has_otp = FALSE;  #endif /* OPIE_ENABLE */  #ifdef SSL_ENABLE -    static flag has_ssl = FALSE; +static flag has_ssl = FALSE;  #endif /* SSL_ENABLE */ +/* mailbox variables initialized in pop3_getrange() */ +static int last; + +/* mail variables initialized in pop3_fetch() */ +#ifdef SDPS_ENABLE +char *sdps_envfrom; +char *sdps_envto; +#endif /* SDPS_ENABLE */ +  #ifdef NTLM_ENABLE  #include "ntlm.h" -static tSmbNtlmAuthRequest   request;		    -static tSmbNtlmAuthChallenge challenge; -static tSmbNtlmAuthResponse  response; -  /*   * NTLM support by Grant Edwards.   * @@ -72,6 +75,10 @@ static tSmbNtlmAuthResponse  response;  static int do_pop3_ntlm(int sock, struct query *ctl,  	int msn_instead /** if true, send AUTH MSN, else send AUTH NTLM */)  { +    tSmbNtlmAuthRequest request; +    tSmbNtlmAuthChallenge challenge; +    tSmbNtlmAuthResponse response; +      char msgbuf[2048];      int result,len; @@ -37,17 +37,23 @@  #include "socket.h"  #include "fetchmail.h" -int mytimeout;		/* value of nonreponse timeout */ -int suppress_tags;	/* emit tags? */ -char shroud[PASSWORDLEN*2+3];	/* string to shroud in debug output */ -struct msgblk msgblk; +/* global variables: please reinitialize them explicitly for proper + * working in daemon mode */ +/* session variables initialized in init_transact() */ +int suppress_tags = FALSE;	/* emit tags? */  char tag[TAGLEN];  static int tagnum;  #define GENSYM	(sprintf(tag, "A%04d", ++tagnum % TAGMOD), tag) +static struct method *protocol; +char shroud[PASSWORDLEN*2+3];	/* string to shroud in debug output */ +/* session variables initialized in do_session() */ +int mytimeout;		/* value of nonreponse timeout */ + +/* mail variables initialized in readheaders() */ +struct msgblk msgblk;  static int accept_count, reject_count; -static struct method *protocol;  static void map_name(const char *name, struct query *ctl, struct idlist **xmit_names)  /* add given name to xmit_names if it matches declared localnames */ @@ -1391,9 +1397,11 @@ int readbody(int sock, struct query *ctl, flag forward, int len)  void init_transact(const struct method *proto)  /* initialize state for the send and receive functions */  { +    suppress_tags = FALSE;      tagnum = 0;      tag[0] = '\0';	/* nuke any tag hanging out from previous query */      protocol = (struct method *)proto; +    shroud[0] = '\0';  }  static void enshroud(char *buf) | 
