aboutsummaryrefslogtreecommitdiffstats
path: root/NEWS
Commit message (Expand)AuthorAgeFilesLines
...
* switch setjmp/longjmp to sigsetjmp/siglongjmpMatthias Andree2006-08-131-0/+1
* fix compilation on systems that don't know struct addrinfo (Solaris 2.6).Matthias Andree2006-08-131-0/+1
* Rearrange 6.3.5 changes vs. fixes.Matthias Andree2006-08-071-7/+7
* Support user@example.org (full-address) mappings for multidropMatthias Andree2006-08-071-0/+1
* --logfile is now handled more carefully, errors opening the logfile are Matthias Andree2006-08-071-0/+3
* Log opportunistic TLS upgrades in verbose mode.Matthias Andree2006-08-071-0/+2
* Freeaddrinfo() fix for Uli Zappe's bug.Matthias Andree2006-08-071-0/+4
* When trying to connect or upon connection failure, log the numeric service po...Matthias Andree2006-08-011-1/+2
* Keep all non-error syslog messages on one line per downloaded message.Matthias Andree2006-08-011-0/+1
* When connect()ing fails, log host and service as well.Matthias Andree2006-08-011-0/+2
* Fix SIGHUP behavior, broken since 5.9.13 (r3692).Matthias Andree2006-07-311-0/+7
* If the lockfile ends before the process ID, treat it as stale and unlink it.Matthias Andree2006-07-041-0/+2
* Avoid compiling empty files, to avoid diagnostics from strict compilers.Matthias Andree2006-06-291-3/+1
* * When looking up ports for a service, the lookup succeeds and the Matthias Andree2006-06-281-0/+4
* No longer stat rcfile if it's called -.Matthias Andree2006-06-121-0/+3
* POP3: some UID flags may not be set properly on UIDL lists. (Sunil Shetye)Matthias Andree2006-05-241-0/+1
* Complain about fetchall in idle mode, too.Matthias Andree2006-05-211-0/+1
* * IMAP4 patch by Sunil Shetye:Matthias Andree2006-05-211-0/+3
* Revise --flush description, suggested by Frederic Marchal.Matthias Andree2006-05-171-0/+2
* Make IMAP4 IDLE work on servers that do not update RECENT counts. Reported by...Matthias Andree2006-05-151-0/+2
* * Improve KAME/getnameinfo.c portability to Linux libc5 systems. Matthias Andree2006-05-151-0/+5
* Mention Debian Bug#361825 submitter.Matthias Andree2006-05-141-1/+1
* In verbose mode, log every IP fetchmail tries to connect to, to avoidMatthias Andree2006-05-141-0/+3
* Improve --with-gssapi auto detection for /usr-based GSSAPI installs.Matthias Andree2006-05-141-0/+2
* If krb5-config provides gssapi library information, use that rather than gues...Matthias Andree2006-05-141-0/+2
* Support Kerberos installations where krb5.h and perhaps roken.h are in .../in...Matthias Andree2006-05-141-0/+2
* Configure prints a warning (but proceeds) if Kerberos IV support is enabled.Matthias Andree2006-05-141-0/+1
* Fix des_pcbc_encrypt compile warnings in kerberos.c line 246.Matthias Andree2006-05-141-0/+1
* Drop #include <com_err.h> from Kerberos 5 header file, fixes compile error on...Matthias Andree2006-05-141-0/+2
* On NetBSD, link against -lroken -lcom_err if --with-kerberos is enabled.Matthias Andree2006-05-141-0/+1
* Mark Kerberos IV obsolete.Matthias Andree2006-05-141-0/+1
* Rename all fetchmail-internal lock_* functions to fm_lock_*. Obsoletes Matthias Andree2006-05-121-0/+4
* When using NTLM authentication, use regular IMAP response code handler after Matthias Andree2006-05-121-0/+3
* For protocols such as IMAP that are not delimited by "." lines, truncateMatthias Andree2006-05-121-0/+6
* Revise Received: format requirement notice.Matthias Andree2006-05-121-1/+2
* Update Russian and Vietnamese translations.Matthias Andree2006-05-041-0/+3
* Mark Received envelope parsing obsolete.Matthias Andree2006-05-041-0/+7
* PopDel.py was revised by Joshua Crawford to display the From: address and Matthias Andree2006-04-271-1/+8
* Clarify that 'aka' will remain after DNS alias deprecation.Matthias Andree2006-04-191-0/+1
* Mark fetchmail 6.3.4 released.Matthias Andree2006-04-141-1/+1
* Correct daemon (which isn't translated into French). (Stéphane Schildknecht)Matthias Andree2006-04-141-1/+1
* Minor revision of French translation after comments from Luc Pionchon.Matthias Andree2006-04-141-1/+2
* Updated French descriptions for the .spec file (Stéphane Schildknecht)Matthias Andree2006-04-141-0/+1
* Update Japanese translation.Matthias Andree2006-04-131-1/+1
* specgen.sh converted to UTF-8 to support future translations.Matthias Andree2006-04-111-0/+1
* Add new Vietnamese [vi] translation by Clytie Siddall.Matthias Andree2006-04-101-0/+1
* Add note about empty files not being ISO-C compliant.Matthias Andree2006-04-091-0/+3
* Update Polish Translation (Jakub Bogusz).Matthias Andree2006-04-071-0/+4
* * SSL/TLS: if, for a certain server, an sslfingerprint is specified and Matthias Andree2006-04-061-0/+5
* set no bouncemail now also prevents 'General SMTP/ESMTP error.' bounces.Matthias Andree2006-04-041-0/+2
lass="s">"USER"); } } if ((program_name = strrchr(argv[0], '/')) != NULL) ++program_name; else program_name = argv[0]; if (getenv("QMAILINJECT") && strcmp(getenv("QMAILINJECT"), "")) { fprintf(stderr, GT_("%s: The QMAILINJECT environment variable is set.\n" "This is dangerous as it can make qmail-inject or qmail's sendmail wrapper\n" "tamper with your From: or Message-ID: headers.\n" "Try \"env QMAILINJECT= %s YOUR ARGUMENTS HERE\"\n" "%s: Abort.\n"), program_name, program_name, program_name); exit(PS_UNDEFINED); } if (getenv("NULLMAILER_FLAGS") && strcmp(getenv("NULLMAILER_FLAGS"), "")) { fprintf(stderr, GT_("%s: The NULLMAILER_FLAGS environment variable is set.\n" "This is dangerous as it can make nullmailer-inject or nullmailer's\n" "sendmail wrapper tamper with your From:, Message-ID: or Return-Path: headers.\n" "Try \"env NULLMAILER_FLAGS= %s YOUR ARGUMENTS HERE\"\n" "%s: Abort.\n"), program_name, program_name, program_name); exit(PS_UNDEFINED); } if (!(pwp = getpwuid(getuid()))) { fprintf(stderr, GT_("%s: You don't exist. Go away.\n"), program_name); exit(PS_UNDEFINED); } else { memcpy(&by_uid, pwp, sizeof(struct passwd)); if (!user || !(pwp = getpwnam(user))) pwp = &by_uid; else { /* * This logic is needed to handle gracefully the possibility * that multiple names might be mapped to one UID. */ memcpy(&by_name, pwp, sizeof(struct passwd)); if (by_name.pw_uid == by_uid.pw_uid) pwp = &by_name; else pwp = &by_uid; } user = xstrdup(pwp->pw_name); } /* compute user's home directory */ if (!(home = getenv("HOME"))) home = pwp->pw_dir; /* compute fetchmail's home directory */ if (!(fmhome = getenv("FETCHMAILHOME"))) fmhome = home; #define RCFILE_NAME "fetchmailrc" /* * The (fmhome==home) leaves an extra character for a . at the * beginning of the rc file's name, iff fetchmail is using $HOME * for its files. We don't want to do that if fetchmail has its * own home ($FETCHMAILHOME), however. */ rcfile = (char *)xmalloc(strlen(fmhome)+sizeof(RCFILE_NAME)+(fmhome==home)+2); /* avoid //.fetchmailrc */ if (strcmp(fmhome, "/") != 0) strcpy(rcfile, fmhome); else *rcfile = '\0'; if (rcfile[strlen(rcfile) - 1] != '/') strcat(rcfile, "/"); if (fmhome==home) strcat(rcfile, "."); strcat(rcfile, RCFILE_NAME); } char *host_fqdn(void) /* get the FQDN of the machine we're running */ { char tmpbuf[HOSTLEN+1]; if (gethostname(tmpbuf, sizeof(tmpbuf))) { fprintf(stderr, GT_("%s: can't determine your host!"), program_name); exit(PS_DNS); } #ifdef HAVE_GETHOSTBYNAME /* if we got a . in the hostname assume it is a FQDN */ if (strchr(tmpbuf, '.') == NULL) { struct hostent *hp; /* if we got a basename (as we do in Linux) make a FQDN of it */ hp = gethostbyname(tmpbuf); if (hp == (struct hostent *) NULL) { /* exit with error message */ fprintf(stderr, GT_("gethostbyname failed for %s\n"), tmpbuf); exit(PS_DNS); } return(xstrdup(hp->h_name)); } else #endif /* HAVE_GETHOSTBYNAME */ return(xstrdup(tmpbuf)); } static char *tzoffset(time_t *now) /* calculate timezone offset */ { static char offset_string[6]; struct tm gmt, *lt; int off; char sign = '+'; gmt = *gmtime(now); lt = localtime(now); off = (lt->tm_hour - gmt.tm_hour) * 60 + lt->tm_min - gmt.tm_min; if (lt->tm_year < gmt.tm_year) off -= 24 * 60; else if (lt->tm_year > gmt.tm_year) off += 24 * 60; else if (lt->tm_yday < gmt.tm_yday) off -= 24 * 60; else if (lt->tm_yday > gmt.tm_yday) off += 24 * 60; if (off < 0) { sign = '-'; off = -off; } if (off >= 24 * 60) /* should be impossible */ off = 23 * 60 + 59; /* if not, insert silly value */ sprintf(offset_string, "%c%02d%02d", sign, off / 60, off % 60); return (offset_string); } char *rfc822timestamp(void) /* return a timestamp in RFC822 form */ { time_t now; static char buf[50]; time(&now); #ifdef HAVE_STRFTIME /* * Conform to RFC822. We generate a 4-digit year here, avoiding * Y2K hassles. Max length of this timestamp in an English locale * should be 29 chars. The only things that should vary by locale * are the day and month abbreviations. The set_locale calls prevent * weird multibyte i18n characters (such as kanji) from showing up * in your Received headers. */ #if defined(HAVE_SETLOCALE) && defined(ENABLE_NLS) setlocale (LC_TIME, "C"); #endif strftime(buf, sizeof(buf)-1, "%a, %d %b %Y %H:%M:%S XXXXX (%Z)", localtime(&now)); #if defined(HAVE_SETLOCALE) && defined(ENABLE_NLS) setlocale (LC_TIME, ""); #endif strncpy(strstr(buf, "XXXXX"), tzoffset(&now), 5); #else /* * This is really just a portability fallback, as the * date format ctime(3) emits is not RFC822 * conformant. */ strcpy(buf, ctime(&now)); buf[strlen(buf)-1] = '\0'; /* remove trailing \n */ #endif /* HAVE_STRFTIME */ return(buf); } const char *showproto(int proto) /* protocol index to protocol name mapping */ { switch (proto) { case P_AUTO: return("auto"); #ifdef POP2_ENABLE case P_POP2: return("POP2"); #endif /* POP2_ENABLE */ #ifdef POP3_ENABLE case P_POP3: return("POP3"); case P_APOP: return("APOP"); case P_RPOP: return("RPOP"); #endif /* POP3_ENABLE */ #ifdef IMAP_ENABLE case P_IMAP: return("IMAP"); #endif /* IMAP_ENABLE */ #ifdef ETRN_ENABLE case P_ETRN: return("ETRN"); #endif /* ETRN_ENABLE */ #ifdef ODMR_ENABLE case P_ODMR: return("ODMR"); #endif /* ODMR_ENABLE */ default: return("unknown?!?"); } } char *visbuf(const char *buf) /* visibilize a given string */ { static char vbuf[BUFSIZ]; char *tp = vbuf; while (*buf) { if (*buf == '"') { *tp++ = '\\'; *tp++ = '"'; buf++; } else if (*buf == '\\') { *tp++ = '\\'; *tp++ = '\\'; buf++; } else if (isprint(*buf) || *buf == ' ') *tp++ = *buf++; else if (*buf == '\n') { *tp++ = '\\'; *tp++ = 'n'; buf++; } else if (*buf == '\r') { *tp++ = '\\'; *tp++ = 'r'; buf++; } else if (*buf == '\b') { *tp++ = '\\'; *tp++ = 'b'; buf++; } else if (*buf < ' ') { *tp++ = '\\'; *tp++ = '^'; *tp++ = '@' + *buf; buf++; } else { (void) sprintf(tp, "\\0x%02x", *buf++); tp += strlen(tp); } } *tp++ = '\0'; return(vbuf); } /* env.c ends here */