diff options
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | base64.c | 7 | ||||
-rw-r--r-- | checkalias.c | 3 | ||||
-rw-r--r-- | conf.c | 6 | ||||
-rw-r--r-- | cram.c | 16 | ||||
-rw-r--r-- | driver.c | 5 | ||||
-rw-r--r-- | etrn.c | 2 | ||||
-rw-r--r-- | fetchmail.c | 23 | ||||
-rw-r--r-- | fetchmail.h | 22 | ||||
-rw-r--r-- | gssapi.c | 7 | ||||
-rw-r--r-- | imap.c | 12 | ||||
-rw-r--r-- | kerberos.c | 4 | ||||
-rw-r--r-- | lock.c | 10 | ||||
-rw-r--r-- | md5.h | 5 | ||||
-rw-r--r-- | md5c.c | 5 | ||||
-rw-r--r-- | mx.h | 4 | ||||
-rw-r--r-- | mxget.c | 10 | ||||
-rw-r--r-- | odmr.c | 4 | ||||
-rw-r--r-- | pop3.c | 6 | ||||
-rw-r--r-- | report.c | 16 | ||||
-rw-r--r-- | rfc822.c | 60 | ||||
-rw-r--r-- | rpa.c | 101 | ||||
-rw-r--r-- | smbutil.c | 4 | ||||
-rw-r--r-- | socket.c | 18 | ||||
-rw-r--r-- | transact.c | 15 | ||||
-rw-r--r-- | uid.c | 16 | ||||
-rw-r--r-- | unmime.c | 43 |
27 files changed, 220 insertions, 205 deletions
@@ -50,6 +50,7 @@ fetchmail 6.3.3 (not yet released): Lynch. * ./configure --quiet is now quieter (no SSL and fallback-related output). * fix bug in LMTP port validation (patch by Miloslav Trmac). +* Miloslav Trmac's patch (with minor changes) to fix char * sign consistency. # CHANGES: * --idle can now be specified on the command line, too. @@ -27,9 +27,11 @@ static const char base64val[] = { }; #define DECODE64(c) (isascii((unsigned char)(c)) ? base64val[c] : BAD) -void to64frombits(unsigned char *out, const unsigned char *in, int inlen) +void to64frombits(char *out, const void *in_, int inlen) /* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */ { + const unsigned char *in = in_; + for (; inlen >= 3; inlen -= 3) { *out++ = base64digits[in[0] >> 2]; @@ -53,12 +55,13 @@ void to64frombits(unsigned char *out, const unsigned char *in, int inlen) *out = '\0'; } -int from64tobits(char *out, const char *in, int maxlen) +int from64tobits(void *out_, const char *in, int maxlen) /* base 64 to raw bytes in quasi-big-endian order, returning count of bytes */ /* maxlen limits output buffer size, set to zero to ignore */ { int len = 0; register unsigned char digit1, digit2, digit3, digit4; + unsigned char *out = out_; if (in[0] == '+' && in[1] == ' ') in += 2; diff --git a/checkalias.c b/checkalias.c index 9447ec20..8214b40a 100644 --- a/checkalias.c +++ b/checkalias.c @@ -88,7 +88,8 @@ int is_host_alias(const char *name, struct query *ctl) { struct mxentry *mxp, *mxrecords; struct idlist *idl; - int namelen, e; + size_t namelen; + int e; struct addrinfo hints, *res, *res_st; struct hostdata *lead_server = @@ -103,7 +103,7 @@ static void listdump(const char *name, struct idlist *list) for (idp = list; idp; idp = idp->next) if (idp->id) { - fprintf(stdout, "\"%s\"", visbuf((const char *)idp->id)); + fprintf(stdout, "\"%s\"", visbuf(idp->id)); if (idp->next) fputs(", ", stdout); } @@ -325,9 +325,9 @@ void dump_config(struct runctl *runp, struct query *querylist) { char namebuf[USERNAMELEN + 1]; - strlcpy(namebuf, visbuf((const char *)idp->id), sizeof(namebuf)); + strlcpy(namebuf, visbuf(idp->id), sizeof(namebuf)); if (idp->val.id2) - fprintf(stdout, "(\"%s\", %s)", namebuf, visbuf((const char *)idp->val.id2)); + fprintf(stdout, "(\"%s\", %s)", namebuf, visbuf(idp->val.id2)); else fprintf(stdout, "\"%s\"", namebuf); if (idp->next) @@ -17,14 +17,14 @@ #include "i18n.h" #include "md5.h" -void hmac_md5 (unsigned char *password, size_t pass_len, - unsigned char *challenge, size_t chal_len, +void hmac_md5 (char *password, size_t pass_len, + char *challenge, size_t chal_len, unsigned char *response, size_t resp_len) { int i; unsigned char ipad[64]; unsigned char opad[64]; - unsigned char hash_passwd[16]; + char hash_passwd[16]; MD5_CTX ctx; @@ -65,11 +65,11 @@ int do_cram_md5 (int sock, char *command, struct query *ctl, char *strip) { int result; int len; - unsigned char buf1[1024]; - unsigned char msg_id[768]; + char buf1[1024]; + char msg_id[768]; unsigned char response[16]; - unsigned char reply[1024]; - unsigned char *respdata; + char reply[1024]; + char *respdata; gen_send (sock, "%s CRAM-MD5", command); @@ -94,7 +94,7 @@ int do_cram_md5 (int sock, char *command, struct query *ctl, char *strip) if (len < 0) { report (stderr, GT_("could not decode BASE64 challenge\n")); return PS_AUTHFAIL; - } else if (len < sizeof (msg_id)) { + } else if ((size_t)len < sizeof (msg_id)) { msg_id[len] = 0; } else { msg_id[sizeof (msg_id)-1] = 0; @@ -358,7 +358,7 @@ static void send_size_warnings(struct query *ctl) if (current->val.status.num == 0 && current->val.status.mark) { nbr = current->val.status.mark; - size = atoi((const char *)current->id); + size = atoi(current->id); if (ctl->limitflush) stuff_warning(NULL, ctl, GT_(" %d msg %d octets long deleted by fetchmail."), @@ -1304,8 +1304,7 @@ is restored.")); /* compute # of messages and number of new messages waiting */ stage = STAGE_GETRANGE; - err = (ctl->server.base_protocol->getrange)(mailserver_socket, ctl, (const char *)idp->id, &count, &newm, &bytes); - if (err != 0) + err = (ctl->server.base_protocol->getrange)(mailserver_socket, ctl, idp->id, &count, &newm, &bytes); goto cleanUp; /* show user how many messages we downloaded */ @@ -65,7 +65,7 @@ static int etrn_getrange(int sock, struct query *ctl, const char *id, for (qnp = ctl->domainlist; qnp; qnp = qnp->next) { /* ship the actual poll and get the response */ - gen_send(sock, "ETRN %s", (char *)qnp->id); + gen_send(sock, "ETRN %s", qnp->id); if ((ok = gen_recv(sock, buf, sizeof(buf)))) return(ok); diff --git a/fetchmail.c b/fetchmail.c index 868a45c1..4e56c08a 100644 --- a/fetchmail.c +++ b/fetchmail.c @@ -975,7 +975,7 @@ static int load_params(int argc, char **argv, int optind) /* get the location of rcfile */ rcfiledir[0] = 0; p = strrchr (rcfile, '/'); - if (p && (p - rcfile) < sizeof (rcfiledir)) { + if (p && (size_t)(p - rcfile) < sizeof (rcfiledir)) { *p = 0; /* replace '/' by '0' */ strlcpy (rcfiledir, rcfile, sizeof(rcfiledir)); *p = '/'; /* restore '/' */ @@ -1254,7 +1254,7 @@ static int load_params(int argc, char **argv, int optind) { char *cp; - if (!(cp = strrchr((char *)idp->id, '/')) + if (!(cp = strrchr(idp->id, '/')) || (0 == strcmp(cp + 1, SMTP_PORT)) || servport(cp + 1) == SMTP_PORT_NUM) { @@ -1362,7 +1362,8 @@ static const int autoprobe[] = static int query_host(struct query *ctl) /* perform fetch transaction with single host */ { - int i, st = 0; + size_t i; + int st = 0; /* * If we're syslogging the progress messages are automatically timestamped. @@ -1607,7 +1608,7 @@ static void dump_params (struct runctl *runp, printf(GT_(" Selected mailboxes are:")); for (idp = ctl->mailboxes; idp; idp = idp->next) - printf(" %s", (char *)idp->id); + printf(" %s", idp->id); printf("\n"); } printf(ctl->fetchall @@ -1697,7 +1698,7 @@ static void dump_params (struct runctl *runp, printf(GT_(" Domains for which mail will be fetched are:")); for (idp = ctl->domainlist; idp; idp = idp->next) { - printf(" %s", (char *)idp->id); + printf(" %s", idp->id); if (!idp->val.status.mark) printf(GT_(" (default)")); } @@ -1717,7 +1718,7 @@ static void dump_params (struct runctl *runp, ctl->listener); for (idp = ctl->smtphunt; idp; idp = idp->next) { - printf(" %s", (char *)idp->id); + printf(" %s", idp->id); if (!idp->val.status.mark) printf(GT_(" (default)")); } @@ -1775,9 +1776,9 @@ static void dump_params (struct runctl *runp, { for (idp = ctl->localnames; idp; idp = idp->next) if (idp->val.id2) - printf("\t%s -> %s\n", (char *)idp->id, (char *)idp->val.id2); + printf("\t%s -> %s\n", idp->id, idp->val.id2); else - printf("\t%s\n", (char *)idp->id); + printf("\t%s\n", idp->id); if (ctl->wildcard) fputs("\t*\n", stdout); } @@ -1816,7 +1817,7 @@ static void dump_params (struct runctl *runp, printf(GT_(" Predeclared mailserver aliases:")); for (idp = ctl->server.akalist; idp; idp = idp->next) - printf(" %s", (char *)idp->id); + printf(" %s", idp->id); putchar('\n'); } if (ctl->server.localdomains) @@ -1825,7 +1826,7 @@ static void dump_params (struct runctl *runp, printf(GT_(" Local domains:")); for (idp = ctl->server.localdomains; idp; idp = idp->next) - printf(" %s", (char *)idp->id); + printf(" %s", idp->id); putchar('\n'); } } @@ -1866,7 +1867,7 @@ static void dump_params (struct runctl *runp, printf(GT_(" %d UIDs saved.\n"), count); if (outlevel >= O_VERBOSE) for (idp = ctl->oldsaved; idp; idp = idp->next) - printf("\t%s\n", (char *)idp->id); + printf("\t%s\n", idp->id); } } diff --git a/fetchmail.h b/fetchmail.h index d450afc1..3deeb63e 100644 --- a/fetchmail.h +++ b/fetchmail.h @@ -173,7 +173,7 @@ struct runctl struct idlist { - unsigned char *id; + char *id; union { struct @@ -186,7 +186,7 @@ struct idlist #define UID_EXPUNGED 3 /* this message has been expunged */ } status; - unsigned char *id2; + char *id2; } val; struct idlist *next; }; @@ -559,8 +559,8 @@ void stuff_warning(); void close_warning_by_mail(struct query *, struct msgblk *); /* rfc822.c: RFC822 header parsing */ -unsigned char *reply_hack(unsigned char *, const unsigned char *, size_t *); -unsigned char *nxtaddr(const unsigned char *); +char *reply_hack(char *, const char *, size_t *); +char *nxtaddr(const char *); /* uid.c: UID support */ extern int dofastuidl; @@ -593,17 +593,17 @@ int prc_parse_file(const char *, const flag); int prc_filecheck(const char *, const flag); /* base64.c */ -void to64frombits(unsigned char *, const unsigned char *, int); -int from64tobits(char *, const char *, int maxlen); +void to64frombits(char *, const void *, int); +int from64tobits(void *, const char *, int maxlen); /* unmime.c */ /* Bit-mask returned by MimeBodyType */ #define MSG_IS_7BIT 0x01 #define MSG_IS_8BIT 0x02 #define MSG_NEEDS_DECODE 0x80 -extern void UnMimeHeader(unsigned char *buf); -extern int MimeBodyType(unsigned char *hdrs, int WantDecode); -extern int UnMimeBodyline(unsigned char **buf, flag delimited, flag issoftline); +extern void UnMimeHeader(char *buf); +extern int MimeBodyType(char *hdrs, int WantDecode); +extern int UnMimeBodyline(char **buf, flag delimited, flag issoftline); /* interface.c */ void interface_init(void); @@ -644,8 +644,8 @@ struct query *hostalloc(struct query *); int parsecmdline (int, char **, struct runctl *, struct query *); char *prependdir (const char *, const char *); char *MD5Digest (unsigned const char *); -void hmac_md5 (unsigned char *, size_t, unsigned char *, size_t, unsigned char *, size_t); -int POP3_auth_rpa(unsigned char *, unsigned char *, int socket); +void hmac_md5 (char *, size_t, char *, size_t, unsigned char *, size_t); +int POP3_auth_rpa(char *, char *, int socket); typedef RETSIGTYPE (*SIGHANDLERTYPE) (int); void deal_with_sigchld(void); RETSIGTYPE null_signal_handler(int sig); @@ -69,7 +69,8 @@ int do_gssauth(int sock, char *command, char *service, char *hostname, char *use else if (outlevel >= O_DEBUG) { maj_stat = gss_display_name(&min_stat, target_name, &request_buf, &mech_name); - report(stderr, GT_("Using service name [%s]\n"),request_buf.value); + report(stderr, GT_("Using service name [%s]\n"), + (char *)request_buf.value); maj_stat = gss_release_buffer(&min_stat, &request_buf); } @@ -126,7 +127,7 @@ int do_gssauth(int sock, char *command, char *service, char *hostname, char *use return result; } request_buf.length = from64tobits(buf2, buf1 + 2, sizeof(buf2)); - if (request_buf.length == -1) /* in case of bad data */ + if ((int)request_buf.length == -1) /* in case of bad data */ request_buf.length = 0; request_buf.value = buf2; sec_token = &request_buf; @@ -141,7 +142,7 @@ int do_gssauth(int sock, char *command, char *service, char *hostname, char *use return result; request_buf.length = from64tobits(buf2, buf1 + 2, sizeof(buf2)); - if (request_buf.length == -1) /* in case of bad data */ + if ((int)request_buf.length == -1) /* in case of bad data */ request_buf.length = 0; request_buf.value = buf2; @@ -233,7 +233,7 @@ static int do_imap_ntlm(int sock, struct query *ctl) dumpSmbNtlmAuthRequest(stdout, &request); memset(msgbuf,0,sizeof msgbuf); - to64frombits (msgbuf, (unsigned char*)&request, SmbLength(&request)); + to64frombits (msgbuf, &request, SmbLength(&request)); if (outlevel >= O_MONITOR) report(stdout, "IMAP> %s\n", msgbuf); @@ -244,7 +244,7 @@ static int do_imap_ntlm(int sock, struct query *ctl) if ((gen_recv(sock, msgbuf, sizeof msgbuf))) return result; - len = from64tobits ((char*)&challenge, msgbuf, sizeof(challenge)); + len = from64tobits (&challenge, msgbuf, sizeof(challenge)); if (outlevel >= O_DEBUG) dumpSmbNtlmAuthChallenge(stdout, &challenge); @@ -255,7 +255,7 @@ static int do_imap_ntlm(int sock, struct query *ctl) dumpSmbNtlmAuthResponse(stdout, &response); memset(msgbuf,0,sizeof msgbuf); - to64frombits (msgbuf, (unsigned char*)&response, SmbLength(&response)); + to64frombits (msgbuf, &response, SmbLength(&response)); if (outlevel >= O_MONITOR) report(stdout, "IMAP> %s\n", msgbuf); @@ -273,10 +273,10 @@ static int do_imap_ntlm(int sock, struct query *ctl) } #endif /* NTLM */ -static int imap_canonicalize(char *result, char *raw, int maxlen) +static void imap_canonicalize(char *result, char *raw, size_t maxlen) /* encode an IMAP password as per RFC1730's quoting conventions */ { - int i, j; + size_t i, j; j = 0; for (i = 0; i < strlen(raw) && i < maxlen; i++) @@ -286,8 +286,6 @@ static int imap_canonicalize(char *result, char *raw, int maxlen) result[j++] = raw[i]; } result[j] = '\0'; - - return(i); } static void capa_probe(int sock, struct query *ctl) @@ -216,7 +216,7 @@ int do_rfc1731(int sock, char *command, char *truename) des_ecb_encrypt((des_cblock *)buf2, (des_cblock *)buf2, schedule, 0); memcpy(challenge2.cstr, buf2, 4); - if (ntohl(challenge2.cint) != challenge1.cint + 1) { + if ((int32)ntohl(challenge2.cint) != challenge1.cint + 1) { report(stderr, GT_("challenge mismatch\n")); return PS_AUTHFAIL; } @@ -236,7 +236,7 @@ int do_rfc1731(int sock, char *command, char *truename) authenticator.dat[4] = 1; len = strlen(tktuser); - strncpy(authenticator.dat+8, tktuser, len); + strncpy((char *)authenticator.dat+8, tktuser, len); authenticator.length = len + 8 + 1; while (authenticator.length & 7) { authenticator.length++; @@ -118,12 +118,18 @@ void lock_or_die(void) int e = 0; if ((fd = open(lockfile, O_WRONLY|O_CREAT|O_EXCL, 0666)) != -1) { + ssize_t wr; + snprintf(tmpbuf, sizeof(tmpbuf), "%ld\n", (long)getpid()); - if (write(fd, tmpbuf, strlen(tmpbuf)) < strlen(tmpbuf)) e = 1; + wr = write(fd, tmpbuf, strlen(tmpbuf)); + if (wr == -1 || (size_t)wr != strlen(tmpbuf)) + e = 1; if (run.poll_interval) { snprintf(tmpbuf, sizeof(tmpbuf), "%d\n", run.poll_interval); - if (write(fd, tmpbuf, strlen(tmpbuf)) < strlen(tmpbuf)) e = 1; + wr = write(fd, tmpbuf, strlen(tmpbuf)); + if (wr == -1 || (size_t)wr != strlen(tmpbuf)) + e = 1; } if (fsync(fd)) e = 1; if (close(fd)) e = 1; @@ -20,9 +20,8 @@ struct MD5Context { }; void MD5Init(struct MD5Context *context); -void MD5Update(struct MD5Context *context, unsigned char const *buf, - unsigned len); -void MD5Final(unsigned char digest[16], struct MD5Context *context); +void MD5Update(struct MD5Context *context, const void *buf, unsigned len); +void MD5Final(void *digest, struct MD5Context *context); void MD5Transform(uint32 buf[4], uint32 const in[16]); char *MD5Digest (unsigned const char *s); @@ -54,8 +54,9 @@ void MD5Init(struct MD5Context *ctx) * Update context to reflect the concatenation of another buffer full * of bytes. */ -void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len) +void MD5Update(struct MD5Context *ctx, const void *buf_, unsigned len) { + const unsigned char *buf = buf_; register uint32 t; /* Update bitcount */ @@ -102,7 +103,7 @@ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len) * Final wrapup - pad to 64-byte boundary with the bit pattern * 1 0* (64-bit count of bits processed, MSB-first) */ -void MD5Final(unsigned char digest[16], struct MD5Context *ctx) +void MD5Final(void *digest, struct MD5Context *ctx) { unsigned int count; unsigned char *p; @@ -4,8 +4,8 @@ struct mxentry { - unsigned char *name; - int pref; + char *name; + int pref; }; extern struct mxentry * getmxrecords(const char *); @@ -68,7 +68,7 @@ struct mxentry *getmxrecords(const char *name) n = res_search(name, C_IN,T_MX, (unsigned char *)&answer, sizeof(answer)); if (n == -1) return((struct mxentry *)NULL); - if (n > sizeof(answer)) + if ((size_t)n > sizeof(answer)) n = sizeof(answer); hp = (HEADER *)&answer; @@ -76,7 +76,7 @@ struct mxentry *getmxrecords(const char *name) eom = answer + n; h_errno = 0; for (qdcount = ntohs(hp->qdcount); qdcount--; cp += n + QFIXEDSZ) - if ((n = dn_skipname(cp, eom)) < 0) + if ((n = dn_skipname((unsigned char *)cp, (unsigned char *)eom)) < 0) return((struct mxentry *)NULL); buflen = sizeof(MXHostBuf) - 1; bp = MXHostBuf; @@ -84,7 +84,8 @@ struct mxentry *getmxrecords(const char *name) ancount = ntohs(hp->ancount); while (--ancount >= 0 && cp < eom) { - if ((n = dn_expand(answer, eom, cp, bp, buflen)) < 0) + if ((n = dn_expand((unsigned char *)answer, (unsigned char *)eom, + (unsigned char *)cp, bp, buflen)) < 0) break; cp += n; GETSHORT(type, cp); @@ -96,7 +97,8 @@ struct mxentry *getmxrecords(const char *name) continue; } GETSHORT(pref, cp); - if ((n = dn_expand(answer, eom, cp, bp, buflen)) < 0) + if ((n = dn_expand((unsigned char *)answer, (unsigned char *)eom, + (unsigned char *)cp, bp, buflen)) < 0) break; cp += n; @@ -80,11 +80,11 @@ static int odmr_getrange(int sock, struct query *ctl, const char *id, */ buf[0] = '\0'; for (qnp = ctl->domainlist; qnp; qnp = qnp->next) - if (strlen(buf) + strlen((const char *)qnp->id) + 1 >= sizeof(buf)) + if (strlen(buf) + strlen(qnp->id) + 1 >= sizeof(buf)) break; else { - strcat(buf, (const char *)qnp->id); + strcat(buf, qnp->id); strcat(buf, ","); } buf[strlen(buf) - 1] = '\0'; /* nuke final comma */ @@ -96,7 +96,7 @@ static int do_pop3_ntlm(int sock, struct query *ctl, dumpSmbNtlmAuthRequest(stdout, &request); memset(msgbuf,0,sizeof msgbuf); - to64frombits (msgbuf, (unsigned char*)&request, SmbLength(&request)); + to64frombits (msgbuf, &request, SmbLength(&request)); if (outlevel >= O_MONITOR) report(stdout, "POP3> %s\n", msgbuf); @@ -107,7 +107,7 @@ static int do_pop3_ntlm(int sock, struct query *ctl, if ((gen_recv(sock, msgbuf, sizeof msgbuf))) return result; - len = from64tobits ((unsigned char*)&challenge, msgbuf, sizeof(msgbuf)); + len = from64tobits (&challenge, msgbuf, sizeof(msgbuf)); if (outlevel >= O_DEBUG) dumpSmbNtlmAuthChallenge(stdout, &challenge); @@ -118,7 +118,7 @@ static int do_pop3_ntlm(int sock, struct query *ctl, dumpSmbNtlmAuthResponse(stdout, &response); memset(msgbuf,0,sizeof msgbuf); - to64frombits (msgbuf, (unsigned char*)&response, SmbLength(&response)); + to64frombits (msgbuf, &response, SmbLength(&response)); if (outlevel >= O_MONITOR) report(stdout, "POP3> %s\n", msgbuf); @@ -241,11 +241,11 @@ report_build (FILE *errfp, message, va_alist) VA_START (args, message); for ( ; ; ) { - n = vsnprintf (partial_message + partial_message_size_used, - partial_message_size - partial_message_size_used, + n = vsnprintf (partial_message + partial_message_size_used, partial_message_size - partial_message_size_used, message, args); - if (n < partial_message_size - partial_message_size_used) + if (n >= 0 + && (unsigned)n < partial_message_size - partial_message_size_used) { partial_message_size_used += n; break; @@ -262,7 +262,8 @@ report_build (FILE *errfp, message, va_alist) partial_message_size - partial_message_size_used, message, a1, a2, a3, a4, a5, a6, a7, a8); - if (n < partial_message_size - partial_message_size_used) + if (n >= 0 + && (unsigned)n < partial_message_size - partial_message_size_used) { partial_message_size_used += n; break; @@ -310,7 +311,9 @@ report_complete (FILE *errfp, message, va_alist) partial_message_size - partial_message_size_used, message, args); - if (n < partial_message_size - partial_message_size_used) + /* old glibc versions return -1 for truncation */ + if (n >= 0 + && (unsigned)n < partial_message_size - partial_message_size_used) { partial_message_size_used += n; break; @@ -327,7 +330,8 @@ report_complete (FILE *errfp, message, va_alist) partial_message_size - partial_message_size_used, message, a1, a2, a3, a4, a5, a6, a7, a8); - if (n < partial_message_size - partial_message_size_used) + if (n >= 0 + && (unsigned)n < partial_message_size - partial_message_size_used) { partial_message_size_used += n; break; @@ -41,13 +41,13 @@ char *program_name = "rfc822"; #define HEADER_END(p) ((p)[0] == '\n' && ((p)[1] != ' ' && (p)[1] != '\t')) -unsigned char *reply_hack( - unsigned char *buf /* header to be hacked */, - const unsigned char *host /* server hostname */, +char *reply_hack( + char *buf /* header to be hacked */, + const char *host /* server hostname */, size_t *length) /* hack message headers so replies will work properly */ { - unsigned char *from, *cp, last_nws = '\0', *parens_from = NULL; + char *from, *cp, last_nws = '\0', *parens_from = NULL; int parendepth, state, has_bare_name_part, has_host_part; #ifndef MAIN int addresscount = 1; @@ -77,9 +77,9 @@ unsigned char *reply_hack( /* make room to hack the address; buf must be malloced */ for (cp = buf; *cp; cp++) - if (*cp == ',' || isspace(*cp)) + if (*cp == ',' || isspace((unsigned char)*cp)) addresscount++; - buf = (unsigned char *)xrealloc(buf, strlen(buf) + addresscount * (strlen(host) + 1) + 1); + buf = xrealloc(buf, strlen(buf) + addresscount * (strlen(host) + 1) + 1); #endif /* MAIN */ /* @@ -95,7 +95,7 @@ unsigned char *reply_hack( #ifdef MAIN if (verbose) { - printf("state %d: %s", state, (char *)buf); + printf("state %d: %s", state, buf); printf("%*s^\n", from - buf + 10, " "); } #endif /* MAIN */ @@ -116,7 +116,7 @@ unsigned char *reply_hack( break; case 1: /* we've seen the colon, we're looking for addresses */ - if (!isspace(*from)) + if (!isspace((unsigned char)*from)) last_nws = *from; if (*from == '<') state = 3; @@ -135,12 +135,12 @@ unsigned char *reply_hack( && last_nws != ';') { int hostlen; - unsigned char *p; + char *p; p = from; if (parens_from) from = parens_from; - while (isspace(*from) || (*from == ',')) + while (isspace((unsigned char)*from) || (*from == ',')) --from; from++; hostlen = strlen(host); @@ -158,7 +158,7 @@ unsigned char *reply_hack( { parens_from = from; } - else if (!isspace(*from)) + else if (!isspace((unsigned char)*from)) has_bare_name_part = TRUE; break; @@ -215,15 +215,15 @@ unsigned char *reply_hack( return(buf); } -unsigned char *nxtaddr(const unsigned char *hdr /* header to be parsed, NUL to continue previous hdr */) +char *nxtaddr(const char *hdr /* header to be parsed, NUL to continue previous hdr */) /* parse addresses in succession out of a specified RFC822 header */ { - static unsigned char address[BUFSIZ]; - static int tp; - static const unsigned char *hp; + static char address[BUFSIZ]; + static size_t tp; + static const char *hp; static int state, oldstate; #ifdef MAIN - static const unsigned char *orighdr; + static const char *orighdr; #endif /* MAIN */ int parendepth = 0; @@ -252,7 +252,7 @@ unsigned char *nxtaddr(const unsigned char *hdr /* header to be parsed, NUL to c #ifdef MAIN if (verbose) { - printf("state %d: %s", state, (char *)orighdr); + printf("state %d: %s", state, orighdr); printf("%*s^\n", hp - orighdr + 10, " "); } #endif /* MAIN */ @@ -264,13 +264,13 @@ unsigned char *nxtaddr(const unsigned char *hdr /* header to be parsed, NUL to c state = ENDIT_ALL; if (tp) { - while (tp >= 0 && isspace(address[tp--])) - continue; - address[++tp] = '\0'; + while (tp > 0 && isspace((unsigned char)address[tp - 1])) + tp--; + address[tp] = '\0'; tp = 0; return (address); } - return((unsigned char *)NULL); + return(NULL); } else if (*hp == '\\') /* handle RFC822 escaping */ { @@ -305,7 +305,7 @@ unsigned char *nxtaddr(const unsigned char *hdr /* header to be parsed, NUL to c state = INSIDE_BRACKETS; tp = 0; } - else if (*hp != ',' && !isspace(*hp)) + else if (*hp != ',' && !isspace((unsigned char)*hp)) { --hp; state = BARE_ADDRESS; @@ -340,7 +340,7 @@ unsigned char *nxtaddr(const unsigned char *hdr /* header to be parsed, NUL to c state = INSIDE_DQUOTE; address[NEXTTP()] = *hp; } - else if (!isspace(*hp)) /* just take it, ignoring whitespace */ + else if (!isspace((unsigned char)*hp)) /* just take it, ignoring whitespace */ address[NEXTTP()] = *hp; break; @@ -386,10 +386,10 @@ unsigned char *nxtaddr(const unsigned char *hdr /* header to be parsed, NUL to c } #ifdef MAIN -static void parsebuf(unsigned char *longbuf, int reply) +static void parsebuf(char *longbuf, int reply) { - unsigned char *cp; - size_t dummy; + char *cp; + size_t dummy; if (reply) { @@ -397,19 +397,19 @@ static void parsebuf(unsigned char *longbuf, int reply) printf("Rewritten buffer: %s", (char *)longbuf); } else - if ((cp = nxtaddr(longbuf)) != (unsigned char *)NULL) + if ((cp = nxtaddr(longbuf)) != (char *)NULL) do { printf("\t-> \"%s\"\n", (char *)cp); } while - ((cp = nxtaddr((unsigned char *)NULL)) != (unsigned char *)NULL); + ((cp = nxtaddr((char *)NULL)) != (char *)NULL); } int main(int argc, char *argv[]) { - unsigned char buf[BUFSIZ], longbuf[BUFSIZ]; - int ch, reply; + char buf[BUFSIZ], longbuf[BUFSIZ]; + int ch, reply; verbose = reply = FALSE; while ((ch = getopt(argc, argv, "rv")) != EOF) @@ -37,20 +37,20 @@ extern int linecount; #ifndef NO_PROTO /* prototypes for internal functions */ - static int POP3_rpa_resp(unsigned char* argbuf, int socket ); - static void LenAppend(unsigned char** pptr, int len); - static int LenSkip(unsigned char** pptr, int rxlen); - static int DecBase64(unsigned char* bufp); - static void EncBase64(unsigned char* bufp, int len); - static void ToUnicode(unsigned char** pptr, unsigned char delim, - unsigned char* buf, int* plen, int conv); - static int SetRealmService(unsigned char* bufp); + static int POP3_rpa_resp(char* argbuf, int socket ); + static void LenAppend(char** pptr, int len); + static int LenSkip(char** pptr, int rxlen); + static int DecBase64(char* bufp); + static void EncBase64(char* bufp, int len); + static void ToUnicode(char** pptr, char delim, unsigned char* buf, int* plen, + int conv); + static int SetRealmService(char* bufp); static void GenChallenge(unsigned char* buf, int len); - static int DigestPassphrase(unsigned char* passphrase, + static int DigestPassphrase(char* passphrase, unsigned char* rbuf, int unicodeit); static void CompUserResp(); static int CheckUserAuth(); - static void md5(unsigned char* in, int len, unsigned char* out); + static void md5(void* in, int len, unsigned char* out); #endif /* RPA protocol definitions */ @@ -108,11 +108,11 @@ unsigned char Kus[Kusl]; /* Session key */ globals: read outlevel. *********************************************************************/ -int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket) +int POP3_auth_rpa (char *userid, char *passphrase, int socket) { int ok,rxlen,verh,verl,i,rll; - unsigned char buf [POPBUFSIZE]; - unsigned char *bufp; + char buf [POPBUFSIZE]; + char *bufp; int status,aulin,kuslin; char* stdec[4] = { N_("Success") , N_("Restricted user (something wrong with account)") , @@ -179,10 +179,10 @@ int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket) /* Interpret Token 2 */ - verh = *(bufp++); verl = *(bufp++); + verh = (unsigned char)*(bufp++); verl = (unsigned char)*(bufp++); if (outlevel >= O_DEBUG) report(stdout, GT_("Service chose RPA version %d.%d\n"),verh,verl); - Csl = *(bufp++); + Csl = (unsigned char)*(bufp++); memcpy(Cs, bufp, Csl); bufp += Csl; if (outlevel >= O_DEBUG) @@ -197,7 +197,7 @@ int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket) bufp += Tsl; if (outlevel >= O_DEBUG) report(stdout, GT_("Service timestamp %s\n"),Ts); - rll = *(bufp++) << 8; rll = rll | *(bufp++); + rll = (unsigned char)*(bufp++) << 8; rll = rll | (unsigned char)*(bufp++); if ((bufp-buf+rll) != rxlen) { if (outlevel > O_SILENT) @@ -254,7 +254,7 @@ int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket) /* Interpret Token 4 */ - aulin = *(bufp++); + aulin = (unsigned char)*(bufp++); if (outlevel >= O_DEBUG) { report(stdout, GT_("User authentication (l=%d):\n"),aulin); @@ -361,7 +361,7 @@ int POP3_auth_rpa (unsigned char *userid, unsigned char *passphrase, int socket) *********************************************************************/ static int POP3_rpa_resp (argbuf,socket) -unsigned char *argbuf; +char *argbuf; int socket; { int ok; @@ -420,7 +420,7 @@ int socket; *********************************************************************/ static void LenAppend(pptr,len) -unsigned char **pptr; +char **pptr; int len; { if (len < 0x80) @@ -454,30 +454,30 @@ int len; *********************************************************************/ int LenSkip(pptr,rxlen) -unsigned char **pptr; +char **pptr; int rxlen; { int len; - unsigned char *save; + char *save; save = *pptr; - if (**pptr != HDR) + if ((unsigned char)**pptr != HDR) { if (outlevel > O_SILENT) report(stderr, GT_("Hdr not 60\n")); return(0); } (*pptr)++; - if (((**pptr) & 0x80) == 0 ) + if (((unsigned char)(**pptr) & 0x80) == 0 ) { - len = **pptr; (*pptr)++; + len = (unsigned char)**pptr; (*pptr)++; } - else if ((**pptr) == 0x81) + else if ((unsigned char)(**pptr) == 0x81) { - len = *(*pptr+1); (*pptr) += 2; + len = (unsigned char)*(*pptr+1); (*pptr) += 2; } - else if ((**pptr) == 0x82) + else if ((unsigned char)(**pptr) == 0x82) { - len = ((*(*pptr+1)) << 8) | *(*pptr+2); + len = ((unsigned char)(*(*pptr+1)) << 8) | (unsigned char)*(*pptr+2); (*pptr) += 3; } else len = 0; @@ -516,13 +516,13 @@ int rxlen; *********************************************************************/ static int DecBase64(bufp) -unsigned char *bufp; +char *bufp; { unsigned int newx, bits=0, cnt=0, i, part=0; unsigned char ch; - unsigned char* outp=bufp; - unsigned char* inp=bufp; - while((ch=*(inp++)) != 0) + char* outp=bufp; + char* inp=bufp; + while((ch=(unsigned char)*(inp++)) != 0) { if ((ch != '=') && (ch != ' ') && (ch != '\n') && (ch != '\r')) { @@ -550,7 +550,7 @@ unsigned char *bufp; report(stdout, GT_("Inbound binary data:\n")); for (i=0; i<cnt; i++) { - report_build(stdout, "%02X ",bufp[i]); + report_build(stdout, "%02X ",(unsigned char)bufp[i]); if (((i % 16)==15) || (i==(cnt-1))) report_complete(stdout, "\n"); } @@ -575,10 +575,10 @@ unsigned char *bufp; *********************************************************************/ static void EncBase64(bufp,len) -unsigned char *bufp; +char *bufp; int len; { - unsigned char* outp; + char* outp; unsigned char c1,c2,c3; char x[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int i; @@ -588,7 +588,7 @@ int len; report(stdout, GT_("Outbound data:\n")); for (i=0; i<len; i++) { - report_build(stdout, "%02X ",bufp[i]); + report_build(stdout, "%02X ",(unsigned char)bufp[i]); if (((i % 16)==15) || (i==(len-1))) report_complete(stdout, "\n"); } @@ -598,9 +598,9 @@ int len; /* So we can do the update in place, start at the far end! */ for (i=((len-1)/3)*3; i>=0; i-=3) { - c1 = bufp[i]; - if ((i+1) < len) c2 = bufp[i+1]; else c2=0; - if ((i+2) < len) c3 = bufp[i+2]; else c3=0; + c1 = (unsigned char)bufp[i]; + if ((i+1) < len) c2 = (unsigned char)bufp[i+1]; else c2=0; + if ((i+2) < len) c3 = (unsigned char)bufp[i+2]; else c3=0; *(outp) = x[c1/4]; *(outp+1) = x[((c1 & 3)*16) + (c2/16)]; if ((i+1) < len) *(outp+2) = x[((c2 & 0x0F)*4) + (c3/64)]; @@ -628,8 +628,8 @@ int len; globals: reads outlevel; *********************************************************************/ -static void ToUnicode(unsigned char **pptr /* input string*/, - unsigned char delim, unsigned char *buf /* output buffer */, +static void ToUnicode(char **pptr /* input string*/, + char delim, unsigned char *buf /* output buffer */, int *plen, int conv) { unsigned char *p; @@ -639,7 +639,7 @@ static void ToUnicode(unsigned char **pptr /* input string*/, { *(p++) = 0; if (conv) - *(p++) = tolower(**pptr); + *(p++) = tolower((unsigned char)**pptr); else *(p++) = (**pptr); (*plen) += 2; @@ -676,7 +676,7 @@ static void ToUnicode(unsigned char **pptr /* input string*/, writes Ns Nsl Nr Nrl *********************************************************************/ -static int SetRealmService(unsigned char *bufp) +static int SetRealmService(char *bufp) { /* For the moment we pick the first available realm. It would */ /* make more sense to verify that the realm which the user */ @@ -753,12 +753,12 @@ static void GenChallenge(unsigned char *buf, int len) writes Pu. *********************************************************************/ -static int DigestPassphrase(unsigned char *passphrase,unsigned char *rbuf, +static int DigestPassphrase(char *passphrase,unsigned char *rbuf, int unicodeit) { int len; unsigned char workarea[STRMAX]; - unsigned char* ptr; + char* ptr; if (unicodeit) /* Option in spec. Yuck. */ { @@ -766,14 +766,10 @@ static int DigestPassphrase(unsigned char *passphrase,unsigned char *rbuf, ToUnicode(&ptr, '\0', workarea, &len, 0); /* No case conv here */ if (len == 0) return(PS_SYNTAX); - ptr = workarea; + md5(workarea,len,rbuf); } else - { - ptr = rbuf; - len = strlen(passphrase); - } - md5(ptr,len,rbuf); + md5(rbuf,strlen(passphrase),rbuf); return(0); } @@ -873,10 +869,11 @@ static int CheckUserAuth(void) globals: reads outlevel *********************************************************************/ -static void md5(unsigned char *in,int len,unsigned char *out) +static void md5(void *in_,int len,unsigned char *out) { int i; MD5_CTX md5context; + unsigned char *in = in_; if (outlevel >= O_DEBUG) { @@ -74,7 +74,7 @@ dumpRaw(fp,((unsigned char*)structPtr)+IVAL(&structPtr->header.offset,0),SVAL(&s static void dumpRaw(FILE *fp, unsigned char *buf, size_t len) { - int i; + size_t i; for (i=0; i<len; ++i) fprintf(fp,"%02x ",buf[i]); @@ -84,7 +84,7 @@ static void dumpRaw(FILE *fp, unsigned char *buf, size_t len) static char *unicodeToString(char *p, size_t len) { - int i; + size_t i; static char buf[1024]; assert(len+1 < sizeof buf); @@ -604,11 +604,11 @@ static int SSL_verify_callback( int ok_return, X509_STORE_CTX *ctx, int strict ) { char buf[257]; X509 *x509_cert; - int err, depth; + int err, depth, i; unsigned char digest[EVP_MAX_MD_SIZE]; char text[EVP_MAX_MD_SIZE * 3 + 1], *tp, *te; const EVP_MD *digest_tp; - unsigned int dsz, i, esz; + unsigned int dsz, esz; X509_NAME *subj, *issuer; x509_cert = X509_STORE_CTX_get_current_cert(ctx); @@ -624,13 +624,13 @@ static int SSL_verify_callback( int ok_return, X509_STORE_CTX *ctx, int strict ) if (outlevel >= O_VERBOSE) { if ((i = X509_NAME_get_text_by_NID(issuer, NID_organizationName, buf, sizeof(buf))) != -1) { report(stdout, GT_("Issuer Organization: %s\n"), buf); - if (i >= sizeof(buf) - 1) + if ((size_t)i >= sizeof(buf) - 1) report(stdout, GT_("Warning: Issuer Organization Name too long (possibly truncated).\n")); } else report(stdout, GT_("Unknown Organization\n")); if ((i = X509_NAME_get_text_by_NID(issuer, NID_commonName, buf, sizeof(buf))) != -1) { report(stdout, GT_("Issuer CommonName: %s\n"), buf); - if (i >= sizeof(buf) - 1) + if ((size_t)i >= sizeof(buf) - 1) report(stdout, GT_("Warning: Issuer CommonName too long (possibly truncated).\n")); } else report(stdout, GT_("Unknown Issuer CommonName\n")); @@ -638,7 +638,7 @@ static int SSL_verify_callback( int ok_return, X509_STORE_CTX *ctx, int strict ) if ((i = X509_NAME_get_text_by_NID(subj, NID_commonName, buf, sizeof(buf))) != -1) { if (outlevel >= O_VERBOSE) report(stdout, GT_("Server CommonName: %s\n"), buf); - if (i >= sizeof(buf) - 1) { + if ((size_t)i >= sizeof(buf) - 1) { /* Possible truncation. In this case, this is a DNS name, so this * is really bad. We do not tolerate this even in the non-strict case. */ report(stderr, GT_("Bad certificate: Subject CommonName too long!\n")); @@ -707,6 +707,8 @@ static int SSL_verify_callback( int ok_return, X509_STORE_CTX *ctx, int strict ) /* Print the finger print. Note that on errors, we might print it more than once * normally; we kluge around that by using a global variable. */ if (_check_fp) { + unsigned dp; + _check_fp = 0; digest_tp = EVP_md5(); if (digest_tp == NULL) { @@ -719,9 +721,9 @@ static int SSL_verify_callback( int ok_return, X509_STORE_CTX *ctx, int strict ) } tp = text; te = text + sizeof(text); - for (i = 0; i < dsz; i++) { - esz = snprintf(tp, te - tp, i > 0 ? ":%02X" : "%02X", digest[i]); - if (esz >= te - tp) { + for (dp = 0; dp < dsz; dp++) { + esz = snprintf(tp, te - tp, dp > 0 ? ":%02X" : "%02X", digest[dp]); + if (esz >= (size_t)(te - tp)) { report(stderr, GT_("Digest text buffer too small!\n")); return (0); } @@ -91,9 +91,7 @@ static void find_server_names(const char *hdr, { char *cp; - for (cp = nxtaddr((const unsigned char *)hdr); - cp != NULL; - cp = nxtaddr(NULL)) + for (cp = nxtaddr(hdr); cp != NULL; cp = nxtaddr(NULL)) { char *atsign; @@ -129,10 +127,10 @@ static void find_server_names(const char *hdr, for (idp = ctl->server.localdomains; idp; idp = idp->next) { char *rhs; - rhs = atsign + (strlen(atsign) - strlen((char *)idp->id)); + rhs = atsign + (strlen(atsign) - strlen(idp->id)); if (rhs > atsign && (rhs[-1] == '.' || rhs[-1] == '@') && - strcasecmp(rhs, (char *)idp->id) == 0) + strcasecmp(rhs, idp->id) == 0) { if (outlevel >= O_DEBUG) report(stdout, GT_("passed through %s matching %s\n"), @@ -1316,8 +1314,8 @@ int readbody(int sock, struct query *ctl, flag forward, int len) /* forward: TRUE to forward */ { int linelen; - unsigned char buf[MSGBUFSIZE+4]; - unsigned char *inbufp = buf; + char buf[MSGBUFSIZE+4]; + char *inbufp = buf; flag issoftline = FALSE; /* @@ -1545,7 +1543,8 @@ va_dcl va_end(ap); snprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), "\r\n"); - if (SockWrite(sock, buf, strlen(buf)) < strlen(buf)) { + ok = SockWrite(sock, buf, strlen(buf)); + if (ok == -1 || (size_t)ok != strlen(buf)) { /* short write, bail out */ return PS_SOCKET; } @@ -248,7 +248,7 @@ void initialize_saved_lists(struct query *hostlist, const char *idfile) report_build(stdout, GT_("Old UID list from %s:"), ctl->server.pollname); for (idp = ctl->oldsaved; idp; idp = idp->next) - report_build(stdout, " %s", (char *)idp->id); + report_build(stdout, " %s", idp->id); if (!idp) report_build(stdout, GT_(" <empty>")); report_complete(stdout, "\n"); @@ -259,7 +259,7 @@ void initialize_saved_lists(struct query *hostlist, const char *idfile) { report_build(stdout, GT_("Scratch list of UIDs:")); for (idp = scratchlist; idp; idp = idp->next) - report_build(stdout, " %s", (char *)idp->id); + report_build(stdout, " %s", idp->id); if (!idp) report_build(stdout, GT_(" <empty>")); report_complete(stdout, "\n"); @@ -282,7 +282,7 @@ void initialize_saved_lists(struct query *hostlist, const char *idfile) continue; *end = (struct idlist *)xmalloc(sizeof(struct idlist)); - (*end)->id = (unsigned char *)str; + (*end)->id = str; (*end)->val.status.mark = status; (*end)->val.status.num = 0; (*end)->next = NULL; @@ -349,11 +349,11 @@ struct idlist *str_in_list(struct idlist **idl, const char *str, const flag case struct idlist *walk; if (caseblind) { for( walk = *idl; walk; walk = walk->next ) - if( strcasecmp( str, (char *)walk->id) == 0 ) + if( strcasecmp( str, walk->id) == 0 ) return walk; } else { for( walk = *idl; walk; walk = walk->next ) - if( strcmp( str, (char *)walk->id) == 0 ) + if( strcmp( str, walk->id) == 0 ) return walk; } return NULL; @@ -515,7 +515,7 @@ void uid_swap_lists(struct query *ctl) else report_build(stdout, GT_("New UID list from %s:"), ctl->server.pollname); for (idp = dofastuidl ? ctl->oldsaved : ctl->newsaved; idp; idp = idp->next) - report_build(stdout, " %s = %d", (char *)idp->id, idp->val.status.mark); + report_build(stdout, " %s = %d", idp->id, idp->val.status.mark); if (!idp) report_build(stdout, GT_(" <empty>")); report_complete(stdout, "\n"); @@ -565,7 +565,7 @@ void uid_discard_new_list(struct query *ctl) * poll are marked here. */ report_build(stdout, GT_("Merged UID list from %s:"), ctl->server.pollname); for (idp = ctl->oldsaved; idp; idp = idp->next) - report_build(stdout, " %s = %d", (char *)idp->id, idp->val.status.mark); + report_build(stdout, " %s = %d", idp->id, idp->val.status.mark); if (!idp) report_build(stdout, GT_(" <empty>")); report_complete(stdout, "\n"); @@ -627,7 +627,7 @@ void write_saved_lists(struct query *hostlist, const char *idfile) if (idp->val.status.mark == UID_SEEN || idp->val.status.mark == UID_DELETED) fprintf(tmpfp, "%s@%s %s\n", - ctl->remotename, ctl->server.queryname, (char *)idp->id); + ctl->remotename, ctl->server.queryname, idp->id); } for (idp = scratchlist; idp; idp = idp->next) fputs(idp->id, tmpfp); @@ -33,7 +33,7 @@ static unsigned char unhex(unsigned char c) return 16; /* invalid hex character */ } -static int qp_char(unsigned char c1, unsigned char c2, unsigned char *c_out) +static int qp_char(unsigned char c1, unsigned char c2, char *c_out) { c1 = unhex(c1); c2 = unhex(c2); @@ -59,7 +59,7 @@ static int qp_char(unsigned char c1, unsigned char c2, unsigned char *c_out) static const char MIMEHDR_INIT[] = "=?"; /* Start of coded sequence */ static const char MIMEHDR_END[] = "?="; /* End of coded sequence */ -void UnMimeHeader(unsigned char *hdr) +void UnMimeHeader(char *hdr) { /* Decode a buffer containing data encoded according to RFC * 2047. This only handles content-transfer-encoding; conversion @@ -75,8 +75,8 @@ void UnMimeHeader(unsigned char *hdr) */ int state = S_COPY_PLAIN; - unsigned char *p_in, *p_out, *p; - unsigned char enc = '\0'; /* initialization pacifies -Wall */ + char *p_in, *p_out, *p; + char enc = '\0'; /* initialization pacifies -Wall */ int i; /* Speed up in case this is not a MIME-encoded header */ @@ -123,7 +123,7 @@ void UnMimeHeader(unsigned char *hdr) /* *(p+1) is the transfer encoding, *(p+2) must be a '?' */ if (*(p+2) == '?') { - enc = tolower(*(p+1)); + enc = tolower((unsigned char)*(p+1)); p_in = p+3; state = S_COPY_MIME; } @@ -200,11 +200,11 @@ void UnMimeHeader(unsigned char *hdr) * There is more MIME data later on. Is there * whitespace only before the delimiter? */ - unsigned char *q; + char *q; int wsp_only = 1; for (q=p_in; (wsp_only && (q < p)); q++) - wsp_only = isspace(*q); + wsp_only = isspace((unsigned char)*q); if (wsp_only) { /* @@ -259,7 +259,7 @@ static int CurrTypeNeedsDecode = 0; * at the beginning, and a terminating null. */ #define MAX_DELIM_LEN 70 -static unsigned char MultipartDelimiter[MAX_DELIM_LEN+3]; +static char MultipartDelimiter[MAX_DELIM_LEN+3]; /* This string replaces the "Content-Transfer-Encoding: quoted-printable" @@ -267,15 +267,16 @@ static unsigned char MultipartDelimiter[MAX_DELIM_LEN+3]; * must be no longer than the original string. */ static const char ENC8BIT[] = "Content-Transfer-Encoding: 8bit"; -static void SetEncoding8bit(unsigned char *XferEncOfs) +static void SetEncoding8bit(char *XferEncOfs) { - unsigned char *p; + char *p; if (XferEncOfs != NULL) { memcpy(XferEncOfs, ENC8BIT, sizeof(ENC8BIT) - 1); /* If anything left, in this header, replace with whitespace */ - for (p=XferEncOfs+sizeof(ENC8BIT)-1; (*p >= ' '); p++) *p=' '; + for (p=XferEncOfs+sizeof(ENC8BIT)-1; ((unsigned char)*p >= ' '); p++) + *p=' '; } } @@ -377,10 +378,10 @@ static int CheckContentType(char *CntType) * * The return value is a bitmask. */ -int MimeBodyType(unsigned char *hdrs, int WantDecode) +int MimeBodyType(char *hdrs, int WantDecode) { - unsigned char *NxtHdr = hdrs; - unsigned char *XferEnc, *XferEncOfs, *CntType, *MimeVer, *p; + char *NxtHdr = hdrs; + char *XferEnc, *XferEncOfs, *CntType, *MimeVer, *p; int HdrsFound = 0; /* We only look for three headers */ int BodyType; /* Return value */ @@ -510,10 +511,10 @@ int MimeBodyType(unsigned char *hdrs, int WantDecode) * Return flag set if this line ends with a soft line-break. * 'bufp' is modified to point to the end of the output buffer. */ -static int DoOneQPLine(unsigned char **bufp, flag delimited, flag issoftline) +static int DoOneQPLine(char **bufp, flag delimited, flag issoftline) { - unsigned char *buf = *bufp; - unsigned char *p_in, *p_out, *p; + char *buf = *bufp; + char *p_in, *p_out, *p; int n; int ret = 0; @@ -592,9 +593,9 @@ static int DoOneQPLine(unsigned char **bufp, flag delimited, flag issoftline) * 'bufp' is modified to point to the end of the output buffer. */ -int UnMimeBodyline(unsigned char **bufp, flag delimited, flag softline) +int UnMimeBodyline(char **bufp, flag delimited, flag softline) { - unsigned char *buf = *bufp; + char *buf = *bufp; int ret = 0; switch (BodyState) { @@ -664,7 +665,7 @@ int outlevel = 0; int main(int argc, char *argv[]) { unsigned int BufSize; - unsigned char *buffer, *buf_p; + char *buffer, *buf_p; int nl_count, i, bodytype; #ifdef DEBUG @@ -681,7 +682,7 @@ int main(int argc, char *argv[]) #endif BufSize = BUFSIZE_INCREMENT; /* Initial size of buffer */ - buf_p = buffer = (unsigned char *) xmalloc(BufSize); + buf_p = buffer = (char *) xmalloc(BufSize); nl_count = 0; do { |