]> code.citadel.org Git - citadel.git/blobdiff - citadel/serv_smtp.c
mk_module_init.sh now tests to see if echo supports -e and -E
[citadel.git] / citadel / serv_smtp.c
index a9e46f681b92a7e8a0fe79cb38c19fb58a382116..c2329ba9168cf958524ed78e8a568efdd842bc16 100644 (file)
 #include <arpa/inet.h>
 #include "citadel.h"
 #include "server.h"
-#include "sysdep_decls.h"
 #include "citserver.h"
 #include "support.h"
 #include "config.h"
 #include "control.h"
-#include "serv_extensions.h"
 #include "room_ops.h"
 #include "user_ops.h"
 #include "policy.h"
 #include "snprintf.h"
 #endif
 
+
+#include "ctdl_module.h"
+
+
+
 struct citsmtp {               /* Information about the current session */
        int command_state;
        char helo_node[SIZ];
@@ -315,7 +318,7 @@ void smtp_get_user(char *argbuf) {
 
        CtdlDecodeBase64(username, argbuf, SIZ);
        /* lprintf(CTDL_DEBUG, "Trying <%s>\n", username); */
-       if (CtdlLoginExistingUser(username) == login_ok) {
+       if (CtdlLoginExistingUser(NULL, username) == login_ok) {
                CtdlEncodeBase64(buf, "Password:", 9);
                cprintf("334 %s\r\n", buf);
                SMTP->command_state = smtp_password;
@@ -353,16 +356,23 @@ void smtp_try_plain(char *encoded_authstring) {
        char ident[256];
        char user[256];
        char pass[256];
+       int result;
 
-       CtdlDecodeBase64(decoded_authstring,
-                       encoded_authstring,
-                       strlen(encoded_authstring) );
+       CtdlDecodeBase64(decoded_authstring, encoded_authstring, strlen(encoded_authstring) );
        safestrncpy(ident, decoded_authstring, sizeof ident);
        safestrncpy(user, &decoded_authstring[strlen(ident) + 1], sizeof user);
        safestrncpy(pass, &decoded_authstring[strlen(ident) + strlen(user) + 2], sizeof pass);
 
        SMTP->command_state = smtp_command;
-       if (CtdlLoginExistingUser(user) == login_ok) {
+
+       if (strlen(ident) > 0) {
+               result = CtdlLoginExistingUser(user, ident);
+       }
+       else {
+               result = CtdlLoginExistingUser(NULL, user);
+       }
+
+       if (result == login_ok) {
                if (CtdlTryPassword(pass) == pass_ok) {
                        smtp_auth_greeting();
                        return;
@@ -549,7 +559,7 @@ void smtp_mail(char *argbuf) {
  * Implements the "RCPT To:" command
  */
 void smtp_rcpt(char *argbuf) {
-       char recp[SIZ];
+       char recp[1024];
        char message_to_spammer[SIZ];
        struct recptypes *valid = NULL;
 
@@ -570,7 +580,7 @@ void smtp_rcpt(char *argbuf) {
                return;
        }
 
-       strcpy(recp, &argbuf[3]);
+       safestrncpy(recp, &argbuf[3], sizeof recp);
        striplt(recp);
        stripallbut(recp, '<', '>');
 
@@ -623,8 +633,9 @@ void smtp_rcpt(char *argbuf) {
        }
        strcat(SMTP->recipients, recp);
        SMTP->number_of_recipients += 1;
-       if (valid != NULL) 
+       if (valid != NULL)  {
                free_recipients(valid);
+       }
 }
 
 
@@ -1802,9 +1813,8 @@ void smtp_cleanup_function(void) {
 
 
 
-char *serv_smtp_init(void)
+CTDL_MODULE_INIT(smtp)
 {
-
        CtdlRegisterServiceHook(config.c_smtp_port,     /* SMTP MTA */
                                NULL,
                                smtp_mta_greeting,
@@ -1826,20 +1836,22 @@ char *serv_smtp_init(void)
                                NULL);
 
        CtdlRegisterServiceHook(0,                      /* local LMTP */
-                                                       file_lmtp_socket,
-                                                       lmtp_greeting,
-                                                       smtp_command_loop,
-                                                       NULL);
+                               file_lmtp_socket,
+                               lmtp_greeting,
+                               smtp_command_loop,
+                               NULL);
 
        CtdlRegisterServiceHook(0,                      /* local LMTP */
-                                                       file_lmtp_unfiltered_socket,
-                                                       lmtp_unfiltered_greeting,
-                                                       smtp_command_loop,
-                                                       NULL);
+                               file_lmtp_unfiltered_socket,
+                               lmtp_unfiltered_greeting,
+                               smtp_command_loop,
+                               NULL);
 
        smtp_init_spoolout();
        CtdlRegisterSessionHook(smtp_do_queue, EVT_TIMER);
        CtdlRegisterSessionHook(smtp_cleanup_function, EVT_STOP);
        CtdlRegisterProtoHook(cmd_smtp, "SMTP", "SMTP utility commands");
+
+       /* return our Subversion id for the Log */
        return "$Id$";
 }