"hnod",
"msgn",
"jrnl",
- NULL,
+ "rep2",
"list",
"text",
"node",
int is_seen = 0;
int was_seen = 0;
long lo = (-1L);
- long hi = (-1L);
+ long hi = (-1L); /// TODO: we just write here. y?
visit vbuf;
long *msglist;
int num_msgs = 0;
int do_proto, /* do Citadel protocol responses? */
int crlf, /* Use CRLF newlines instead of LF? */
char *section, /* NULL or a message/rfc822 section */
- int flags /* various flags; see msgbase.h */
+ int flags, /* various flags; see msgbase.h */
+ char **Author,
+ char **Address
) {
struct CitContext *CCC = CC;
struct CtdlMessage *TheMessage = NULL;
- int retcode = om_no_such_msg;
+ int retcode = CIT_OK;
struct encapmsg encap;
int r;
*extract_encapsulated_message,
NULL, NULL, (void *)&encap, 0
);
+
+ if ((Author != NULL) && (*Author == NULL))
+ {
+ *Author = TheMessage->cm_fields['A'];
+ TheMessage->cm_fields['A'] = NULL;
+ }
+ if ((Address != NULL) && (*Address == NULL))
+ {
+ *Address = TheMessage->cm_fields['F'];
+ TheMessage->cm_fields['F'] = NULL;
+ }
CtdlFreeMessage(TheMessage);
TheMessage = NULL;
}
else {
- if (do_proto) cprintf("%d msg %ld has no part %s\n",
- ERROR + MESSAGE_NOT_FOUND, msg_num, section);
+ if (do_proto) {
+ cprintf("%d msg %ld has no part %s\n",
+ ERROR + MESSAGE_NOT_FOUND,
+ msg_num,
+ section);
+ }
retcode = om_no_such_msg;
}
}
/* Ok, output the message now */
- retcode = CtdlOutputPreLoadedMsg(TheMessage, mode, headers_only, do_proto, crlf, flags);
+ if (retcode == CIT_OK)
+ retcode = CtdlOutputPreLoadedMsg(TheMessage, mode, headers_only, do_proto, crlf, flags);
+ if ((Author != NULL) && (*Author == NULL))
+ {
+ *Author = TheMessage->cm_fields['A'];
+ TheMessage->cm_fields['A'] = NULL;
+ }
+ if ((Address != NULL) && (*Address == NULL))
+ {
+ *Address = TheMessage->cm_fields['F'];
+ TheMessage->cm_fields['F'] = NULL;
+ }
+
CtdlFreeMessage(TheMessage);
return(retcode);
if (source == NULL) return source;
if (IsEmptyStr(source)) return source;
- cit_backtrace();
+ if (MessageDebugEnabled != 0) cit_backtrace();
MSG_syslog(LOG_DEBUG, "qp_encode_email_addrs: [%s]\n", source);
AddrPtr = malloc (sizeof (long) * nAddrPtrMax);
}
if (outlen > 0) {
client_write(outbuf, outlen);
- outlen = 0;
}
}
msgid = extract_long(cmdbuf, 0);
headers_only = extract_int(cmdbuf, 1);
- CtdlOutputMsg(msgid, MT_CITADEL, headers_only, 1, 0, NULL, 0);
+ CtdlOutputMsg(msgid, MT_CITADEL, headers_only, 1, 0, NULL, 0, NULL, NULL);
return;
}
msgid = extract_long(cmdbuf, 0);
headers_only = extract_int(cmdbuf, 1);
- CtdlOutputMsg(msgid, MT_RFC822, headers_only, 1, 1, NULL, 0);
+ CtdlOutputMsg(msgid, MT_RFC822, headers_only, 1, 1, NULL, 0, NULL, NULL);
}
msgid = extract_long(cmdbuf, 0);
extract_token(section, cmdbuf, 1, '|', sizeof section);
- CtdlOutputMsg(msgid, MT_MIME, 0, 1, 0, (section[0] ? section : NULL) , 0);
+ CtdlOutputMsg(msgid, MT_MIME, 0, 1, 0, (section[0] ? section : NULL) , 0, NULL, NULL);
}
extract_token(desired_section, cmdbuf, 1, '|', sizeof desired_section);
safestrncpy(CC->download_desired_section, desired_section,
sizeof CC->download_desired_section);
- CtdlOutputMsg(msgid, MT_DOWNLOAD, 0, 1, 1, NULL, 0);
+ CtdlOutputMsg(msgid, MT_DOWNLOAD, 0, 1, 1, NULL, 0, NULL, NULL);
}
extract_token(desired_section, cmdbuf, 1, '|', sizeof desired_section);
safestrncpy(CC->download_desired_section, desired_section,
sizeof CC->download_desired_section);
- CtdlOutputMsg(msgid, MT_SPEW_SECTION, 0, 1, 1, NULL, 0);
-}
+ CtdlOutputMsg(msgid, MT_SPEW_SECTION, 0, 1, 1, NULL, 0, NULL, NULL);
+}
/*
msglist = realloc(msglist, (sizeof(long) * (num_msgs + num_msgs_to_be_merged)) );
if (msglist == NULL) {
MSGM_syslog(LOG_ALERT, "ERROR: can't realloc message list!\n");
+ free(msgs_to_be_merged);
+ return (ERROR + INTERNAL_ERROR);
}
memcpy(&msglist[num_msgs], msgs_to_be_merged, (sizeof(long) * num_msgs_to_be_merged) );
num_msgs += num_msgs_to_be_merged;
}
-/*
- * Serialize a struct CtdlMessage into the format used on disk and network.
- *
- * This function loads up a "struct ser_ret" (defined in server.h) which
- * contains the length of the serialized message and a pointer to the
- * serialized message in memory. THE LATTER MUST BE FREED BY THE CALLER.
- */
-void dump_message(struct CtdlMessage *msg, /* unserialized msg */
- long Siz) /* how many chars ? */
-{
- int i;
- static char *forder = FORDER;
- char *buf;
-
- /*
- * Check for valid message format
- */
- if (is_valid_message(msg) == 0) {
- struct CitContext *CCC = CC;
- MSGM_syslog(LOG_ERR, "dump_message() aborting due to invalid message\n");
- return;
- }
-
- buf = (char*) malloc (Siz + 1);
-
- for (i=0; i<26; ++i) if (msg->cm_fields[(int)forder[i]] != NULL) {
- snprintf (buf, Siz, " msg[%c] = %s ...\n", (char) forder[i],
- msg->cm_fields[(int)forder[i]]);
- if (client_write (buf, strlen(buf)) == -1)
- {
- struct CitContext *CCC = CC;
- MSGM_syslog(LOG_ERR, "dump_message(): aborting due to write failure.\n");
- return;
- }
- }
-
- return;
-}
-
-
-
/*
* Check to see if any messages already exist in the current room which
* carry the same Exclusive ID as this one. If any are found, delete them.
/* User flagged ok? */
if (who->flags & US_INTERNET) return(2);
- /* Aide level access? */
+ /* Admin level access? */
if (who->axlevel >= AxAideU) return(3);
/* No mail for you! */
alias(this_recp);
alias(this_recp);
mailtype = alias(this_recp);
- j = 0;
- for (j=0; !IsEmptyStr(&this_recp[j]); ++j) {
+
+ for (j = 0; !IsEmptyStr(&this_recp[j]); ++j) {
if (this_recp[j]=='_') {
this_recp_cooked[j] = ' ';
}
cdb_free(cdbfr);
}
if (num_msgs > 0) {
- int have_contenttype = !IsEmptyStr(content_type);
+ int have_contenttype = (content_type != NULL) && !IsEmptyStr(content_type);
int have_delmsgs = (num_dmsgnums == 0) || (dmsgnums == NULL);
int have_more_del = 1;
*/
permit = 0;
- /* Aides can move/copy */
+ /* Admins can move/copy */
if (CC->user.axlevel >= AxAideU) permit = 1;
/* Room aides can move/copy */