}
+/*
+ * Backend function for smtp_webcit_preferences_hack().
+ * Look at a message and determine if it's the preferences file.
+ */
+void smtp_webcit_preferences_hack_backend(long msgnum, void *userdata) {
+ struct CtdlMessage *msg;
+ char **webcit_conf = (char **) userdata;
+
+ if (*webcit_conf) {
+ return; // already got it
+ }
+
+ msg = CtdlFetchMessage(msgnum, 1);
+ if (msg == NULL) {
+ return;
+ }
+
+ if ( (msg->cm_fields['U']) && (!strcasecmp(msg->cm_fields['U'], "__ WebCit Preferences __")) ) {
+ /* This is it! Change ownership of the message text so it doesn't get freed. */
+ *webcit_conf = (char *)msg->cm_fields['M'];
+ msg->cm_fields['M'] = NULL;
+ }
+ CtdlFreeMessage(msg);
+}
+
+
+/*
+ * The configuration item for the user's preferred display name for outgoing email is, unfortunately,
+ * stored in the account's WebCit configuration. We have to fetch it now.
+ */
+void smtp_webcit_preferences_hack(void) {
+ char config_roomname[ROOMNAMELEN];
+ char *webcit_conf = NULL;
+
+ snprintf(config_roomname, sizeof config_roomname, "%010ld.%s", CC->user.usernum, USERCONFIGROOM);
+ if (CtdlGetRoom(&CC->room, config_roomname) != 0) {
+ return;
+ }
+
+ /*
+ * Find the WebCit configuration message
+ */
+
+ CtdlForEachMessage(MSGS_ALL, 1, NULL, NULL, NULL, smtp_webcit_preferences_hack_backend, (void *)&webcit_conf);
+
+ if (!webcit_conf) {
+ return;
+ }
+
+ /* FIXME : now do something with this data */
+
+ free(webcit_conf);
+ abort();
+}
+
+
/*
* Implement HELP command.
if (result == login_ok) {
if (CtdlTryPassword(pass, len) == pass_ok) {
+ smtp_webcit_preferences_hack();
smtp_auth_greeting(offset, Flags);
return;
}
return;
}
- extract_token(method, ChrPtr(sSMTP->Cmd), 0, ' ', sizeof method);
+ extract_token(method, ChrPtr(sSMTP->Cmd) + offset, 0, ' ', sizeof method);
if (!strncasecmp(method, "login", 5) ) {
- if (StrLength(sSMTP->Cmd) >= 7) {
+ if (StrLength(sSMTP->Cmd) - offset >= 7) {
smtp_get_user(6);
}
else {
if (!strncasecmp(method, "plain", 5) ) {
long len;
- if (num_tokens(ChrPtr(sSMTP->Cmd), ' ') < 2) {
+ if (num_tokens(ChrPtr(sSMTP->Cmd) + offset, ' ') < 2) {
cprintf("334 \r\n");
SMTP->command_state = smtp_plain;
return;
}
len = extract_token(encoded_authstring,
- ChrPtr(sSMTP->Cmd),
+ ChrPtr(sSMTP->Cmd) + offset,
1, ' ',
sizeof encoded_authstring);
StrBufPlain(sSMTP->Cmd, encoded_authstring, len);
- smtp_try_plain(offset, Flags);
+ smtp_try_plain(0, Flags);
return;
}
if (!threading)
{
SMTPCmds = NewHash(1, NULL);
+
RegisterSmtpCMD("AUTH", smtp_auth, 0);
RegisterSmtpCMD("DATA", smtp_data, 0);
RegisterSmtpCMD("HELO", smtp_hello, HELO);
NULL,
CitadelServiceSMTP_LMTP_UNF);
+ CtdlRegisterCleanupHook(smtp_cleanup);
CtdlRegisterSessionHook(smtp_cleanup_function, EVT_STOP, PRIO_STOP + 250);
}