* Bug fixes
authorArt Cancro <ajc@citadel.org>
Sun, 9 Jan 2000 01:25:29 +0000 (01:25 +0000)
committerArt Cancro <ajc@citadel.org>
Sun, 9 Jan 2000 01:25:29 +0000 (01:25 +0000)
citadel/internet_addressing.c
citadel/internet_addressing.h
citadel/serv_smtp.c

index 53067543a51bc29608d58e1fbb7cc92fdf2cd1ac..f6e39e374ecf2c9f82b0e636c3bc190d05b3e54e 100644 (file)
@@ -29,6 +29,7 @@
 #include "tools.h"
 #include "internet_addressing.h"
 #include "user_ops.h"
+#include "room_ops.h"
 #include "parsedate.h"
 
 
@@ -241,6 +242,7 @@ int convert_internet_address(char *destuser, char *desthost, char *source)
        char node[256];
        char name[256];
        struct quickroom qrbuf;
+       int i;
 
        /* Split it up */
        process_rfc822_addr(source, user, node, name);
@@ -258,8 +260,15 @@ int convert_internet_address(char *destuser, char *desthost, char *source)
         */
        if (!strcasecmp(node, config.c_nodename)) {
                /* Try all local rooms */
-               if (!strncasecmp(destuser, "room_", 5)) {
-                       /* FIX do this here */
+               if (!strncasecmp(user, "room_", 5)) {
+                       strcpy(name, &user[5]);
+                       for (i=0; i<strlen(name); ++i) 
+                               if (name[i]=='_') name[i]=' ';
+                       if (getroom(&qrbuf, name) == 0) {
+                               strcpy(destuser, qrbuf.QRname);
+                               strcpy(desthost, config.c_nodename);
+                               return rfc822_room_delivery;
+                       }
                }
 
                /* Try all local users */
index 7ce714a2c60d9c0c150154c0382a9a5a676ed502..7b8abc9adc321b7f9c59a3789cf3863ad80f3269 100644 (file)
@@ -7,7 +7,8 @@ enum {
        rfc822_address_locally_validated,
        rfc822_no_such_user,
        rfc822_address_on_citadel_network,
-       rfc822_address_invalid
+       rfc822_address_invalid,
+       rfc822_room_delivery
 };
 
 
index 0345dd2395648d9315e0172bef27164980e6e382..532ddd0ea0b4d0ee52e874306ae9338a126bdfc1 100644 (file)
@@ -369,6 +369,16 @@ void smtp_rcpt(char *argbuf) {
                        strcat(SMTP_RECP, "|0\n");
                        return;
 
+               case rfc822_room_delivery:
+                       cprintf("250 Delivering to room '%s'\n", user);
+                       ++SMTP->number_of_recipients;
+                       CtdlReallocUserData(SYM_SMTP_RECP,
+                               strlen(SMTP_RECP) + 1024 );
+                       strcat(SMTP_RECP, "room|");
+                       strcat(SMTP_RECP, user);
+                       strcat(SMTP_RECP, "|0\n");
+                       return;
+
                case rfc822_no_such_user:
                        cprintf("550 %s: no such user\n", recp);
                        return;
@@ -454,6 +464,13 @@ int smtp_message_delivery(struct CtdlMessage *msg) {
                        }
                }
 
+               /* Delivery to local non-mailbox rooms */
+               if (!strcasecmp(dtype, "room")) {
+                       extract(room, buf, 1);
+                       CtdlSaveMsgPointerInRoom(room, msgid, 0);
+                       ++successful_saves;
+               }
+
                /* Remote delivery */
                if (!strcasecmp(dtype, "remote")) {
                        extract(user, buf, 1);