X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fmodules%2Fimap%2Fimap_fetch.c;h=293fecca019eec5c160b7c7531a63cfd4c32f818;hp=db0fbeae83aa1c04260dc11f0c13468aa5c1ab76;hb=5ac2920028e92a453c686c799327d7a66b3e7b49;hpb=c793b3980c5c019211e077659847df7f09367a30 diff --git a/citadel/modules/imap/imap_fetch.c b/citadel/modules/imap/imap_fetch.c index db0fbeae8..293fecca0 100644 --- a/citadel/modules/imap/imap_fetch.c +++ b/citadel/modules/imap/imap_fetch.c @@ -2,21 +2,17 @@ * Implements the FETCH command in IMAP. * This is a good example of the protocol's gratuitous complexity. * - * Copyright (c) 2001-2009 by the citadel.org team + * Copyright (c) 2001-2020 by the citadel.org team * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * This program is open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ @@ -110,8 +106,8 @@ void imap_fetch_internaldate(struct CtdlMessage *msg) { time_t msgdate; if (!msg) return; - if (msg->cm_fields['T'] != NULL) { - msgdate = atol(msg->cm_fields['T']); + if (!CM_IsEmpty(msg, eTimestamp)) { + msgdate = atol(msg->cm_fields[eTimestamp]); } else { msgdate = time(NULL); @@ -132,21 +128,20 @@ void imap_fetch_internaldate(struct CtdlMessage *msg) { * "RFC822.TEXT" body only (without leading blank line) */ void imap_fetch_rfc822(long msgnum, const char *whichfmt) { - citimap *Imap = IMAP; + CitContext *CCC = CC; + citimap *Imap = CCCIMAP; const char *ptr = NULL; size_t headers_size, text_size, total_size; size_t bytes_to_send = 0; struct MetaData smi; int need_to_rewrite_metadata = 0; int need_body = 0; - CitContext *CCC = CC; /* Determine whether this particular fetch operation requires * us to fetch the message body from disk. If not, we can save * on some disk operations... */ - if ( (!strcasecmp(whichfmt, "RFC822")) - || (!strcasecmp(whichfmt, "RFC822.TEXT")) ) { + if ( (!strcasecmp(whichfmt, "RFC822")) || (!strcasecmp(whichfmt, "RFC822.TEXT")) ) { need_body = 1; } @@ -190,9 +185,11 @@ void imap_fetch_rfc822(long msgnum, const char *whichfmt) { CCC->redirect_buffer = NewStrBufPlain(NULL, SIZ); CtdlOutputMsg(msgnum, MT_RFC822, (need_body ? HEADERS_ALL : HEADERS_FAST), - 0, 1, NULL, SUPPRESS_ENV_TO + 0, 1, NULL, SUPPRESS_ENV_TO, NULL, NULL, NULL ); - if (!need_body) IAPuts("\r\n"); /* extra trailing newline */ + if (!need_body) { + client_write(HKEY("\r\n")); // extra trailing newline -- to the redirect_buffer, *not* to the client + } Imap->cached_rfc822 = CCC->redirect_buffer; CCC->redirect_buffer = NULL; Imap->cached_rfc822_msgnum = msgnum; @@ -209,8 +206,6 @@ void imap_fetch_rfc822(long msgnum, const char *whichfmt) { * intervening blank line to be part of the headers, not the text. */ headers_size = 0; - text_size = 0; - total_size = 0; if (need_body) { StrBuf *Line = NewStrBuf(); @@ -235,16 +230,11 @@ void imap_fetch_rfc822(long msgnum, const char *whichfmt) { FreeStrBuf(&Line); } else { - headers_size = - total_size = StrLength(Imap->cached_rfc822); + headers_size = total_size = StrLength(Imap->cached_rfc822); text_size = 0; } - syslog(LOG_DEBUG, - "RFC822: headers=" SIZE_T_FMT - ", text=" SIZE_T_FMT - ", total=" SIZE_T_FMT, - headers_size, text_size, total_size); + syslog(LOG_DEBUG, "imap: RFC822 headers=" SIZE_T_FMT ", text=" SIZE_T_FMT ", total=" SIZE_T_FMT, headers_size, text_size, total_size); if (!strcasecmp(whichfmt, "RFC822.SIZE")) { IAPrintf("RFC822.SIZE " SIZE_T_FMT, total_size); @@ -271,7 +261,6 @@ void imap_fetch_rfc822(long msgnum, const char *whichfmt) { } - /* * Load a specific part of a message into the temp file to be output to a * client. FIXME we can handle parts like "2" and "2.1" and even "2.MIME" @@ -285,51 +274,48 @@ void imap_load_part(char *name, char *filename, char *partnum, char *disp, char *cbid, void *cbuserdata) { char mimebuf2[SIZ]; - char *desired_section; + StrBuf *desired_section; - desired_section = (char *)cbuserdata; - syslog(LOG_DEBUG, "imap_load_part() looking for %s, found %s", - desired_section, - partnum - ); + desired_section = (StrBuf *)cbuserdata; + syslog(LOG_DEBUG, "imap: imap_load_part() looking for %s, found %s", ChrPtr(desired_section), partnum); - if (!strcasecmp(partnum, desired_section)) { - iaputs(content, length); + if (!strcasecmp(partnum, ChrPtr(desired_section))) { + client_write(content, length); } snprintf(mimebuf2, sizeof mimebuf2, "%s.MIME", partnum); - if (!strcasecmp(desired_section, mimebuf2)) { - IAPuts("Content-type: "); - _iaputs(cbtype); + if (!strcasecmp(ChrPtr(desired_section), mimebuf2)) { + client_write(HKEY("Content-type: ")); + client_write(cbtype, strlen(cbtype)); if (!IsEmptyStr(cbcharset)) { - IAPuts("; charset=\""); - _iaputs(cbcharset); - IAPuts("\""); + client_write(HKEY("; charset=\"")); + client_write(cbcharset, strlen(cbcharset)); + client_write(HKEY("\"")); } if (!IsEmptyStr(name)) { - IAPuts("; name=\""); - _iaputs(name); - IAPuts("\""); + client_write(HKEY("; name=\"")); + client_write(name, strlen(name)); + client_write(HKEY("\"")); } - IAPuts("\r\n"); + client_write(HKEY("\r\n")); if (!IsEmptyStr(encoding)) { - IAPuts("Content-Transfer-Encoding: "); - _iaputs(encoding); - IAPuts("\r\n"); + client_write(HKEY("Content-Transfer-Encoding: ")); + client_write(encoding, strlen(encoding)); + client_write(HKEY("\r\n")); } if (!IsEmptyStr(encoding)) { - IAPuts("Content-Disposition: "); - _iaputs(disp); + client_write(HKEY("Content-Disposition: ")); + client_write(disp, strlen(disp)); if (!IsEmptyStr(filename)) { - IAPuts("; filename=\""); - _iaputs(filename); - IAPuts("\""); + client_write(HKEY("; filename=\"")); + client_write(filename, strlen(filename)); + client_write(HKEY("\"")); } - IAPuts("\r\n"); + client_write(HKEY("\r\n")); } - IAPrintf("Content-Length: %ld\r\n\r\n", (long)length); + cprintf("Content-Length: %ld\r\n\r\n", (long)length); } } @@ -355,33 +341,26 @@ void imap_output_envelope_from(struct CtdlMessage *msg) { } /* For everything else, we do stuff. */ - IAPuts("(("); /* open double-parens */ - plain_imap_strout(msg->cm_fields['A']); /* personal name */ - IAPuts(" NIL "); /* source route (not used) */ + IAPuts("(("); // open double-parens + IPutMsgField(eAuthor); // display name + IAPuts(" NIL "); // source route (not used) - - if (msg->cm_fields['F'] != NULL) { - process_rfc822_addr(msg->cm_fields['F'], user, node, name); - plain_imap_strout(user); /* mailbox name (user id) */ + if (!CM_IsEmpty(msg, erFc822Addr)) { + process_rfc822_addr(msg->cm_fields[erFc822Addr], user, node, name); + IPutStr(user, strlen(user)); /* mailbox name (user id) */ IAPuts(" "); - if (!strcasecmp(node, config.c_nodename)) { - plain_imap_strout(config.c_fqdn); - } - else { - plain_imap_strout(node); /* host name */ - } + IPutStr(node, strlen(node)); /* host name */ } else { - plain_imap_strout(msg->cm_fields['A']); /* mailbox name (user id) */ + IPutMsgField(eAuthor); /* Make up a synthetic address */ IAPuts(" "); - plain_imap_strout(msg->cm_fields['N']); /* host name */ + IPutStr(CtdlGetConfigStr("c_fqdn"), strlen(CtdlGetConfigStr("c_fqdn"))); } IAPuts(")) "); /* close double-parens */ } - /* * Output an envelope address (or set of addresses) in the official, * convoluted, braindead format. (Note that we can't use this for @@ -417,11 +396,11 @@ void imap_output_envelope_addr(char *addr) { striplt(individual_addr); process_rfc822_addr(individual_addr, user, node, name); IAPuts("("); - plain_imap_strout(name); + IPutStr(name, strlen(name)); IAPuts(" NIL "); - plain_imap_strout(user); + IPutStr(user, strlen(user)); IAPuts(" "); - plain_imap_strout(node); + IPutStr(node, strlen(node)); IAPuts(")"); if (i < (num_addrs-1)) IAPuts(" "); @@ -446,14 +425,13 @@ void imap_fetch_envelope(struct CtdlMessage *msg) { if (!msg) return; /* Parse the message date into an IMAP-format date string */ - if (msg->cm_fields['T'] != NULL) { - msgdate = atol(msg->cm_fields['T']); + if (!CM_IsEmpty(msg, eTimestamp)) { + msgdate = atol(msg->cm_fields[eTimestamp]); } else { msgdate = time(NULL); } - datestring(datestringbuf, sizeof datestringbuf, - msgdate, DATESTRING_IMAP); + len = datestring(datestringbuf, sizeof datestringbuf, msgdate, DATESTRING_IMAP); /* Now start spewing data fields. The order is important, as it is * defined by the protocol specification. Nonexistent fields must @@ -463,18 +441,18 @@ void imap_fetch_envelope(struct CtdlMessage *msg) { IAPuts("ENVELOPE ("); /* Date */ - plain_imap_strout(datestringbuf); + IPutStr(datestringbuf, len); IAPuts(" "); /* Subject */ - plain_imap_strout(msg->cm_fields['U']); + IPutMsgField(eMsgSubject); IAPuts(" "); /* From */ imap_output_envelope_from(msg); /* Sender (default to same as 'From' if not present) */ - fieldptr = rfc822_fetch_field(msg->cm_fields['M'], "Sender"); + fieldptr = rfc822_fetch_field(msg->cm_fields[eMesageText], "Sender"); if (fieldptr != NULL) { imap_output_envelope_addr(fieldptr); free(fieldptr); @@ -484,7 +462,7 @@ void imap_fetch_envelope(struct CtdlMessage *msg) { } /* Reply-to */ - fieldptr = rfc822_fetch_field(msg->cm_fields['M'], "Reply-to"); + fieldptr = rfc822_fetch_field(msg->cm_fields[eMesageText], "Reply-to"); if (fieldptr != NULL) { imap_output_envelope_addr(fieldptr); free(fieldptr); @@ -494,53 +472,52 @@ void imap_fetch_envelope(struct CtdlMessage *msg) { } /* To */ - imap_output_envelope_addr(msg->cm_fields['R']); + imap_output_envelope_addr(msg->cm_fields[eRecipient]); /* Cc (we do it this way because there might be a legacy non-Citadel Cc: field present) */ - fieldptr = msg->cm_fields['Y']; + fieldptr = msg->cm_fields[eCarbonCopY]; if (fieldptr != NULL) { imap_output_envelope_addr(fieldptr); } else { - fieldptr = rfc822_fetch_field(msg->cm_fields['M'], "Cc"); + fieldptr = rfc822_fetch_field(msg->cm_fields[eMesageText], "Cc"); imap_output_envelope_addr(fieldptr); if (fieldptr != NULL) free(fieldptr); } /* Bcc */ - fieldptr = rfc822_fetch_field(msg->cm_fields['M'], "Bcc"); + fieldptr = rfc822_fetch_field(msg->cm_fields[eMesageText], "Bcc"); imap_output_envelope_addr(fieldptr); if (fieldptr != NULL) free(fieldptr); /* In-reply-to */ - fieldptr = rfc822_fetch_field(msg->cm_fields['M'], "In-reply-to"); - plain_imap_strout(fieldptr); + fieldptr = rfc822_fetch_field(msg->cm_fields[eMesageText], "In-reply-to"); + IPutStr(fieldptr, (fieldptr)?strlen(fieldptr):0); IAPuts(" "); if (fieldptr != NULL) free(fieldptr); /* message ID */ - len = strlen(msg->cm_fields['I']); + len = msg->cm_lengths[emessageId]; if ((len == 0) || ( - (msg->cm_fields['I'][0] == '<') && - (msg->cm_fields['I'][len - 1] == '>')) - ) - { - plain_imap_strout(msg->cm_fields['I']); + (msg->cm_fields[emessageId][0] == '<') && + (msg->cm_fields[emessageId][len - 1] == '>')) + ) { + IPutMsgField(emessageId); } else { char *Buf = malloc(len + 3); long pos = 0; - if (msg->cm_fields['I'][0] != '<') + if (msg->cm_fields[emessageId][0] != '<') { Buf[pos] = '<'; pos ++; } - memcpy(&Buf[pos], msg->cm_fields['I'], len); + memcpy(&Buf[pos], msg->cm_fields[emessageId], len); pos += len; - if (msg->cm_fields['I'][len] != '>') + if (msg->cm_fields[emessageId][len] != '>') { Buf[pos] = '>'; pos++; @@ -552,6 +529,7 @@ void imap_fetch_envelope(struct CtdlMessage *msg) { IAPuts(")"); } + /* * This function is called only when CC->redirect_buffer contains a set of * RFC822 headers with no body attached. Its job is to strip that set of @@ -603,7 +581,7 @@ void imap_strip_headers(StrBuf *section) { StrBufSipLine(Line, CCC->redirect_buffer, &Ptr); if (!isspace(ChrPtr(Line)[0])) { - ok = 0; + if (doing_headers == 0) ok = 1; else { /* we're supposed to print all headers that are not matching the filter list */ @@ -663,7 +641,7 @@ void imap_fetch_body(long msgnum, ConstStr item, int is_peek) { int need_body = 1; int burn_the_cache = 0; CitContext *CCC = CC; - citimap *Imap = IMAP; + citimap *Imap = CCCIMAP; /* extract section */ section = NewStrBufPlain(CKEY(item)); @@ -671,9 +649,7 @@ void imap_fetch_body(long msgnum, ConstStr item, int is_peek) { if (strchr(ChrPtr(section), '[') != NULL) { StrBufStripAllBut(section, '[', ']'); } - syslog(LOG_DEBUG, "Section is: [%s]", - (StrLength(section) == 0) ? "(empty)" : ChrPtr(section) - ); + syslog(LOG_DEBUG, "imap: selected section is [%s]", (StrLength(section) == 0) ? "(empty)" : ChrPtr(section)); /* Burn the cache if we don't have the same section of the * same message again. @@ -705,13 +681,13 @@ void imap_fetch_body(long msgnum, ConstStr item, int is_peek) { is_partial = 1; } if ( (is_partial == 1) && (StrLength(partial) > 0) ) { - syslog(LOG_DEBUG, "Partial is <%s>", ChrPtr(partial)); + syslog(LOG_DEBUG, "imap: selected partial is <%s>", ChrPtr(partial)); } if (Imap->cached_body == NULL) { CCC->redirect_buffer = NewStrBufPlain(NULL, SIZ); loading_body_now = 1; - msg = CtdlFetchMessage(msgnum, (need_body ? 1 : 0)); + msg = CtdlFetchMessage(msgnum, (need_body ? 1 : 0), 1); } /* Now figure out what the client wants, and get it */ @@ -753,11 +729,11 @@ void imap_fetch_body(long msgnum, ConstStr item, int is_peek) { * (Note value of 1 passed as 'dont_decode' so client gets it encoded) */ else { - mime_parser(msg->cm_fields['M'], NULL, - *imap_load_part, NULL, NULL, - ChrPtr(section), - 1 - ); + mime_parser(CM_RANGE(msg, eMesageText), + *imap_load_part, NULL, NULL, + section, + 1 + ); } if (loading_body_now) { @@ -791,7 +767,7 @@ void imap_fetch_body(long msgnum, ConstStr item, int is_peek) { iaputs(&Imap->cached_body[pstart], pbytes); if (msg != NULL) { - CtdlFreeMessage(msg); + CM_Free(msg); } /* Mark this message as "seen" *unless* this is a "peek" operation */ @@ -823,14 +799,14 @@ void imap_fetch_bodystructure_post( void *content, char *cbtype, char *cbcharset, size_t length, char *encoding, char *cbid, void *cbuserdata ) { - + long len; char subtype[128]; IAPuts(" "); /* disposition */ - extract_token(subtype, cbtype, 1, '/', sizeof subtype); - plain_imap_strout(subtype); + len = extract_token(subtype, cbtype, 1, '/', sizeof subtype); + IPutStr(subtype, len); /* body language */ /* IAPuts(" NIL"); We thought we needed this at one point, but maybe we don't... */ @@ -856,56 +832,57 @@ void imap_fetch_bodystructure_part( size_t i; char cbmaintype[128]; char cbsubtype[128]; + long cbmaintype_len; + long cbsubtype_len; if (cbtype != NULL) if (!IsEmptyStr(cbtype)) have_cbtype = 1; if (have_cbtype) { - extract_token(cbmaintype, cbtype, 0, '/', sizeof cbmaintype); - extract_token(cbsubtype, cbtype, 1, '/', sizeof cbsubtype); + cbmaintype_len = extract_token(cbmaintype, cbtype, 0, '/', sizeof cbmaintype); + cbsubtype_len = extract_token(cbsubtype, cbtype, 1, '/', sizeof cbsubtype); } else { strcpy(cbmaintype, "TEXT"); + cbmaintype_len = 4; strcpy(cbsubtype, "PLAIN"); + cbsubtype_len = 5; } IAPuts("("); - plain_imap_strout(cbmaintype); /* body type */ + IPutStr(cbmaintype, cbmaintype_len); /* body type */ IAPuts(" "); - plain_imap_strout(cbsubtype); /* body subtype */ + IPutStr(cbsubtype, cbsubtype_len); /* body subtype */ IAPuts(" "); - IAPuts("("); /* begin body parameter list */ + IAPuts("("); /* begin body parameter list */ /* "NAME" must appear as the first parameter. This is not required by IMAP, * but the Asterisk voicemail application blindly assumes that NAME will be in * the first position. If it isn't, it rejects the message. */ - if (name != NULL) if (!IsEmptyStr(name)) { + if ((name != NULL) && (!IsEmptyStr(name))) { IAPuts("\"NAME\" "); - plain_imap_strout(name); + IPutStr(name, strlen(name)); IAPuts(" "); } IAPuts("\"CHARSET\" "); - if (cbcharset == NULL) { - plain_imap_strout("US-ASCII"); - } - else if (cbcharset[0] == 0) { - plain_imap_strout("US-ASCII"); + if ((cbcharset == NULL) || (cbcharset[0] == 0)){ + IPutStr(HKEY("US-ASCII")); } else { - plain_imap_strout(cbcharset); + IPutStr(cbcharset, strlen(cbcharset)); } - IAPuts(") "); /* end body parameter list */ + IAPuts(") "); /* end body parameter list */ IAPuts("NIL "); /* Body ID */ IAPuts("NIL "); /* Body description */ - if (encoding != NULL) if (encoding[0] != 0) have_encoding = 1; + if ((encoding != NULL) && (encoding[0] != 0)) have_encoding = 1; if (have_encoding) { - plain_imap_strout(encoding); + IPutStr(encoding, strlen(encoding)); } else { - plain_imap_strout("7BIT"); + IPutStr(HKEY("7BIT")); } IAPuts(" "); @@ -936,18 +913,15 @@ void imap_fetch_bodystructure_part( IAPuts("NIL "); /* Disposition */ - if (disp == NULL) { - IAPuts("NIL"); - } - else if (IsEmptyStr(disp)) { + if ((disp == NULL) || IsEmptyStr(disp)) { IAPuts("NIL"); } else { IAPuts("("); - plain_imap_strout(disp); - if (filename != NULL) if (!IsEmptyStr(filename)) { + IPutStr(disp, strlen(disp)); + if ((filename != NULL) && (!IsEmptyStr(filename))) { IAPuts(" (\"FILENAME\" "); - plain_imap_strout(filename); + IPutStr(filename, strlen(filename)); IAPuts(")"); } IAPuts(")"); @@ -1020,13 +994,12 @@ void imap_fetch_bodystructure (long msgnum, const char *item, /* For messages already stored in RFC822 format, we have to parse. */ IAPuts("BODYSTRUCTURE "); - mime_parser(msg->cm_fields['M'], - NULL, - *imap_fetch_bodystructure_part, /* part */ - *imap_fetch_bodystructure_pre, /* pre-multi */ - *imap_fetch_bodystructure_post, /* post-multi */ - NULL, - 1); /* don't decode -- we want it as-is */ + mime_parser(CM_RANGE(msg, eMesageText), + *imap_fetch_bodystructure_part, /* part */ + *imap_fetch_bodystructure_pre, /* pre-multi */ + *imap_fetch_bodystructure_post, /* post-multi */ + NULL, + 1); /* don't decode -- we want it as-is */ } @@ -1085,11 +1058,11 @@ void imap_do_fetch_msg(int seq, citimap_command *Cmd) { */ else if (!strcasecmp(Cmd->Params[i].Key, "BODYSTRUCTURE")) { if ((msg != NULL) && (!body_loaded)) { - CtdlFreeMessage(msg); /* need the whole thing */ + CM_Free(msg); /* need the whole thing */ msg = NULL; } if (msg == NULL) { - msg = CtdlFetchMessage(Imap->msgids[seq-1], 1); + msg = CtdlFetchMessage(Imap->msgids[seq-1], 1, 1); body_loaded = 1; } imap_fetch_bodystructure(Imap->msgids[seq-1], @@ -1097,14 +1070,14 @@ void imap_do_fetch_msg(int seq, citimap_command *Cmd) { } else if (!strcasecmp(Cmd->Params[i].Key, "ENVELOPE")) { if (msg == NULL) { - msg = CtdlFetchMessage(Imap->msgids[seq-1], 0); + msg = CtdlFetchMessage(Imap->msgids[seq-1], 0, 1); body_loaded = 0; } imap_fetch_envelope(msg); } else if (!strcasecmp(Cmd->Params[i].Key, "INTERNALDATE")) { if (msg == NULL) { - msg = CtdlFetchMessage(Imap->msgids[seq-1], 0); + msg = CtdlFetchMessage(Imap->msgids[seq-1], 0, 1); body_loaded = 0; } imap_fetch_internaldate(msg); @@ -1116,7 +1089,7 @@ void imap_do_fetch_msg(int seq, citimap_command *Cmd) { IAPuts(")\r\n"); unbuffer_output(); if (msg != NULL) { - CtdlFreeMessage(msg); + CM_Free(msg); } } @@ -1133,18 +1106,18 @@ void imap_do_fetch(citimap_command *Cmd) { /* debug output the parsed vector */ { int i; - syslog(LOG_DEBUG, "----- %ld params", Cmd->num_parms); + syslog(LOG_DEBUG, "imap: ----- %ld params", Cmd->num_parms); for (i=0; i < Cmd->num_parms; i++) { if (Cmd->Params[i].len != strlen(Cmd->Params[i].Key)) - syslog(LOG_DEBUG, "*********** %ld != %ld : %s", - Cmd->Params[i].len, - strlen(Cmd->Params[i].Key), - Cmd->Params[i].Key); + syslog(LOG_DEBUG, "imap: *********** %ld != %ld : %s", + Cmd->Params[i].len, + strlen(Cmd->Params[i].Key), + Cmd->Params[i].Key); else - syslog(LOG_DEBUG, "%ld : %s", - Cmd->Params[i].len, - Cmd->Params[i].Key); + syslog(LOG_DEBUG, "imap: %ld : %s", + Cmd->Params[i].len, + Cmd->Params[i].Key); }} #endif @@ -1258,7 +1231,6 @@ int imap_extract_data_items(citimap_command *Cmd) int nArgs; int nest = 0; const char *pch, *end; - long initial_len; /* Convert all whitespace to ordinary space characters. */ pch = ChrPtr(Cmd->CmdBuf); @@ -1293,7 +1265,6 @@ int imap_extract_data_items(citimap_command *Cmd) */ nArgs = StrLength(Cmd->CmdBuf) / 10 + 10; nArgs = CmdAdjust(Cmd, nArgs, 0); - initial_len = StrLength(Cmd->CmdBuf); Cmd->num_parms = 0; Cmd->Params[Cmd->num_parms].Key = pch = ChrPtr(Cmd->CmdBuf); end = Cmd->Params[Cmd->num_parms].Key + StrLength(Cmd->CmdBuf); @@ -1467,7 +1438,7 @@ void imap_uidfetch(int num_parms, ConstStr *Params) { MakeStringOf(Cmd.CmdBuf, 4); #if 0 - syslog(LOG_DEBUG, "-------%s--------", ChrPtr(Cmd.CmdBuf)); + syslog(LOG_DEBUG, "imap: -------%s--------", ChrPtr(Cmd.CmdBuf)); #endif num_items = imap_extract_data_items(&Cmd); if (num_items < 1) {