- strcpy(field, "");
- for (i = beg; i <= end; ++i) {
- if ((rfc822[i] == ':') && ((i-beg)<sizeof(field))) {
- if (strlen(field)==0) {
- safestrncpy(field, &rfc822[beg], i-beg+1);
- }
- }
+ for (i = end; i >= beg; --i) {
+ if (rfc822[i] == ':') colonpos = i;
+ }
+
+ if (colonpos < 0) return(0); /* no colon? not a valid header line */
+
+ value = mallok((end - beg) + 2);
+ safestrncpy(value, &rfc822[beg], (end-beg)+1);
+ key = value;
+ key[colonpos - beg] = 0;
+ value = &key[(colonpos - beg) + 1];
+ unfold_rfc822_field(value);
+
+ /* Here's the big rfc822-to-citadel loop. */
+
+ if (!strcasecmp(key, "Date")) {
+ lprintf(9, "converting date <%s>\n", value);
+ sprintf(buf, "%ld", parsedate(value) );
+ lprintf(9, "parsed value is <%s>\n", buf);
+ if (msg->cm_fields['T'] != NULL)
+ msg->cm_fields['T'] = strdoop(buf);
+ processed = 1;
+ }
+
+ else if (!strcasecmp(key, "From")) {
+ user = mallok(strlen(value));
+ node = mallok(strlen(value));
+ name = mallok(strlen(value));
+ process_rfc822_addr(value, user, node, name);
+ if (msg->cm_fields['A'] != NULL)
+ msg->cm_fields['A'] = strdoop(user);
+ if (msg->cm_fields['N'] != NULL)
+ msg->cm_fields['N'] = strdoop(node);
+ if (msg->cm_fields['H'] != NULL)
+ msg->cm_fields['H'] = strdoop(name);
+ phree(user);
+ phree(node);
+ phree(name);
+ processed = 1;