X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fmodules%2Fsmtp%2Fserv_smtp.c;fp=citadel%2Fmodules%2Fsmtp%2Fserv_smtp.c;h=297dad260c3c4045d395867cee607456ceef71f3;hp=49169b6f365501a27ed056321392078e67174e35;hb=610c65c45406aab08582bf60c3631a13f81678b5;hpb=a5e759daa03e43dfdd940e96c13cded7ba8de39c diff --git a/citadel/modules/smtp/serv_smtp.c b/citadel/modules/smtp/serv_smtp.c index 49169b6f3..297dad260 100644 --- a/citadel/modules/smtp/serv_smtp.c +++ b/citadel/modules/smtp/serv_smtp.c @@ -303,21 +303,60 @@ void smtp_hello(long offset, long which_command) } +/* + * 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; } - // FIXME ... finish this + /* + * 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(); } - */ @@ -405,7 +444,7 @@ void smtp_try_plain(long offset, long Flags) if (result == login_ok) { if (CtdlTryPassword(pass, len) == pass_ok) { - /* smtp_webcit_preferences_hack(); */ + smtp_webcit_preferences_hack(); smtp_auth_greeting(offset, Flags); return; }