- && ((mode == MT_CITADEL) || (mode == MT_MIME))
- && (do_proto)
- ) {
- cprintf("nhdr=yes\n");
- }
-
- /* begin header processing loop for Citadel message format */
-
- if ((mode == MT_CITADEL) || (mode == MT_MIME)) {
-
- safestrncpy(display_name, "<unknown>", sizeof display_name);
- if (TheMessage->cm_fields['A']) {
- strcpy(buf, TheMessage->cm_fields['A']);
- if (TheMessage->cm_anon_type == MES_ANONONLY) {
- safestrncpy(display_name, "****", sizeof display_name);
- }
- else if (TheMessage->cm_anon_type == MES_ANONOPT) {
- safestrncpy(display_name, "anonymous", sizeof display_name);
- }
- else {
- safestrncpy(display_name, buf, sizeof display_name);
- }
- if ((is_room_aide())
- && ((TheMessage->cm_anon_type == MES_ANONONLY)
- || (TheMessage->cm_anon_type == MES_ANONOPT))) {
- size_t tmp = strlen(display_name);
- snprintf(&display_name[tmp],
- sizeof display_name - tmp,
- " [%s]", buf);
- }
- }
-
- /* Don't show Internet address for users on the
- * local Citadel network.
- */
- suppress_f = 0;
- if (TheMessage->cm_fields['N'] != NULL)
- if (!IsEmptyStr(TheMessage->cm_fields['N']))
- if (haschar(TheMessage->cm_fields['N'], '.') == 0) {
- suppress_f = 1;
- }
-
- /* Now spew the header fields in the order we like them. */
- safestrncpy(allkeys, FORDER, sizeof allkeys);
- for (i=0; i<strlen(allkeys); ++i) {
- k = (int) allkeys[i];
- if (k != 'M') {
- if ( (TheMessage->cm_fields[k] != NULL)
- && (msgkeys[k] != NULL) ) {
- if ((k == 'V') || (k == 'R') || (k == 'Y')) {
- sanitize_truncated_recipient(TheMessage->cm_fields[k]);
- }
- if (k == 'A') {
- if (do_proto) cprintf("%s=%s\n",
- msgkeys[k],
- display_name);
- }
- else if ((k == 'F') && (suppress_f)) {
- /* do nothing */
- }
- /* Masquerade display name if needed */
- else {
- if (do_proto) cprintf("%s=%s\n",
- msgkeys[k],
- TheMessage->cm_fields[k]
- );
- }
- }
- }
- }
-
- }
-
- /* begin header processing loop for RFC822 transfer format */
-
- strcpy(suser, "");
- strcpy(luser, "");
- strcpy(fuser, "");
- strcpy(snode, NODENAME);
- if (mode == MT_RFC822) {
- for (i = 0; i < 256; ++i) {
- if (TheMessage->cm_fields[i]) {
- mptr = mpptr = TheMessage->cm_fields[i];
-
- if (i == 'A') {
- safestrncpy(luser, mptr, sizeof luser);
- safestrncpy(suser, mptr, sizeof suser);
- }
- else if (i == 'Y') {
- if ((flags & QP_EADDR) != 0) {
- mptr = qp_encode_email_addrs(mptr);
- }
- sanitize_truncated_recipient(mptr);
- cprintf("CC: %s%s", mptr, nl);
- }
- else if (i == 'P') {
- cprintf("Return-Path: %s%s", mptr, nl);
- }
- else if (i == 'L') {
- cprintf("List-ID: %s%s", mptr, nl);
- }
- else if (i == 'V') {
- if ((flags & QP_EADDR) != 0)
- mptr = qp_encode_email_addrs(mptr);
- cprintf("Envelope-To: %s%s", mptr, nl);
- }
- else if (i == 'U') {
- cprintf("Subject: %s%s", mptr, nl);
- subject_found = 1;
- }
- else if (i == 'I')
- safestrncpy(mid, mptr, sizeof mid);
- else if (i == 'F')
- safestrncpy(fuser, mptr, sizeof fuser);
- /* else if (i == 'O')
- cprintf("X-Citadel-Room: %s%s",
- mptr, nl); */
- else if (i == 'N')
- safestrncpy(snode, mptr, sizeof snode);
- else if (i == 'R')
- {
- if (haschar(mptr, '@') == 0)
- {
- sanitize_truncated_recipient(mptr);
- cprintf("To: %s@%s", mptr, config.c_fqdn);
- cprintf("%s", nl);
- }
- else
- {
- if ((flags & QP_EADDR) != 0) {
- mptr = qp_encode_email_addrs(mptr);
- }
- sanitize_truncated_recipient(mptr);
- cprintf("To: %s", mptr);
- cprintf("%s", nl);
- }
- }
- else if (i == 'T') {
- datestring(datestamp, sizeof datestamp,
- atol(mptr), DATESTRING_RFC822);
- cprintf("Date: %s%s", datestamp, nl);
- }
- else if (i == 'W') {
- cprintf("References: ");
- k = num_tokens(mptr, '|');
- for (j=0; j<k; ++j) {
- extract_token(buf, mptr, j, '|', sizeof buf);
- cprintf("<%s>", buf);
- if (j == (k-1)) {
- cprintf("%s", nl);
- }
- else {
- cprintf(" ");
- }
- }
- }
- if (mptr != mpptr)
- free (mptr);
- }
- }
- if (subject_found == 0) {
- cprintf("Subject: (no subject)%s", nl);
- }