CtdlOutputMsg(msgid, MT_RFC822, HEADERS_ALL, 0, 1, NULL, 0, NULL, &fromaddr, NULL);
s.TheMessage = CC->redirect_buffer;
CC->redirect_buffer = NULL;
+ syslog(LOG_DEBUG, "fromaddr=<%s>",fromaddr);
// If we have a DKIM key, try to sign the message.
char *dkim_private_key = CtdlGetConfigStr("dkim_private_key");
char *dkim_selector = CtdlGetConfigStr("dkim_selector");
char *dkim_from_domain = (strchr(fromaddr, '@') ? strchr(fromaddr, '@')+1 : NULL);
- if (!IsEmptyStr(dkim_private_key) && !IsEmptyStr(dkim_selector) && !IsEmptyStr(dkim_from_domain)) {
- char *pkey = strdup(dkim_private_key);
- if (pkey) {
+ if (
+ !IsEmptyStr(dkim_from_domain) // Is the sending domain non-empty?
+ && IsDirectory(fromaddr, 0) // and is it one of "our" domains?
+ && !IsEmptyStr(dkim_private_key) // Do we have a private signing key?
+ && !IsEmptyStr(dkim_selector) // and a selector to go with it?
+ ) {
+ char *pkey = strdup(dkim_private_key); // If you answered "yes" to all of the above questions,
+ if (pkey) { // congratulations! We get to DKIM-sign the message!
char *sp;
- while (sp = strchr(pkey, '_')) {
- *sp = '\n';
+ while (sp = strchr(pkey, '_')) { // The dkim_private_key record contains our RSA private key,
+ *sp = '\n'; // but we have to convert all the newlines back to underscores.
}
- syslog(LOG_DEBUG, "private key: <%s>\n", pkey);
+ syslog(LOG_DEBUG, "smtpclient: dkim-signing with private key for selector <%s> domain <%s>",
+ dkim_selector, dkim_from_domain);
dkim_sign(s.TheMessage, pkey, dkim_from_domain, dkim_selector);
free(pkey);
}
);
if ((Author != NULL) && (*Author == NULL)) {
- long len;
- CM_GetAsField(TheMessage, eAuthor, Author, &len);
+ *Author = strdup(TheMessage->cm_fields[eAuthor]);
}
if ((Address != NULL) && (*Address == NULL)) {
- long len;
- CM_GetAsField(TheMessage, erFc822Addr, Address, &len);
+ *Address = strdup(TheMessage->cm_fields[erFc822Addr]);
}
if ((MessageID != NULL) && (*MessageID == NULL)) {
- long len;
- CM_GetAsField(TheMessage, emessageId, MessageID, &len);
+ *MessageID = strdup(TheMessage->cm_fields[emessageId]);
}
CM_Free(TheMessage);
TheMessage = NULL;