]> code.citadel.org Git - citadel.git/blobdiff - citadel/imap_misc.c
* Use syslog-compatible logging levels in lprintf(); the loglevel chosen
[citadel.git] / citadel / imap_misc.c
index a90f203ac537d8d43b6394d2fec818e26b2b23f2..f1b9771841faa61545edab2c42bf4bcb716ebf58 100644 (file)
@@ -36,7 +36,7 @@
 #include "citserver.h"
 #include "support.h"
 #include "config.h"
-#include "dynloader.h"
+#include "serv_extensions.h"
 #include "room_ops.h"
 #include "user_ops.h"
 #include "policy.h"
@@ -68,7 +68,7 @@ int imap_do_copy(char *destination_folder) {
 
        if (IMAP->num_msgs > 0) {
                for (i = 0; i < IMAP->num_msgs; ++i) {
-                       if (IMAP->flags[i] && IMAP_SELECTED) {
+                       if (IMAP->flags[i] & IMAP_SELECTED) {
                                CtdlCopyMsgToRoom(
                                        IMAP->msgids[i], roomname);
                        }
@@ -217,6 +217,7 @@ void imap_append(int num_parms, char *parms[]) {
        char buf[SIZ];
        char savedroom[ROOMNAMELEN];
        int msgs, new;
+       int i;
 
 
        if (num_parms < 4) {
@@ -253,24 +254,21 @@ void imap_append(int num_parms, char *parms[]) {
                return;
        }
 
-       lprintf(9, "Converting message...\n");
+       /* Convert RFC822 newlines (CRLF) to Unix newlines (LF) */
+       lprintf(CTDL_DEBUG, "Converting newline format\n");
+       for (i=0; i<literal_length; ++i) {
+               if (!strncmp(&IMAP->transmitted_message[i], "\r\n", 2)) {
+                       strcpy(&IMAP->transmitted_message[i],
+                               &IMAP->transmitted_message[i+1]);
+                       --literal_length;
+               }
+       }
+
+       lprintf(CTDL_DEBUG, "Converting message format\n");
         msg = convert_internet_message(IMAP->transmitted_message);
        IMAP->transmitted_message = NULL;
        IMAP->transmitted_length = 0;
 
-        /* If the user is locally authenticated, FORCE the From: header to
-         * show up as the real sender.  FIXME do we really want to do this?
-        * Probably should make it site-definable or even room-definable.
-         */
-        if (CC->logged_in) {
-                if (msg->cm_fields['A'] != NULL) phree(msg->cm_fields['A']);
-                if (msg->cm_fields['N'] != NULL) phree(msg->cm_fields['N']);
-                if (msg->cm_fields['H'] != NULL) phree(msg->cm_fields['H']);
-                msg->cm_fields['A'] = strdoop(CC->usersupp.fullname);
-                msg->cm_fields['N'] = strdoop(config.c_nodename);
-                msg->cm_fields['H'] = strdoop(config.c_humannode);
-        }
-
        ret = imap_grabroom(roomname, parms[2]);
        if (ret != 0) {
                cprintf("%s NO Invalid mailbox name or location, or access denied\r\n",
@@ -283,9 +281,27 @@ void imap_append(int num_parms, char *parms[]) {
         * folder is selected, save its name so we can return there!!!!!)
         */
        if (IMAP->selected) {
-               strcpy(savedroom, CC->quickroom.QRname);
+               strcpy(savedroom, CC->room.QRname);
        }
-       usergoto(roomname, 0, &msgs, &new);
+       usergoto(roomname, 0, 0, &msgs, &new);
+
+        /* If the user is locally authenticated, FORCE the From: header to
+         * show up as the real sender.  FIXME do we really want to do this?
+        * Probably should make it site-definable or even room-definable.
+        *
+        * For now, we allow "forgeries" if the room is one of the user's
+        * private mailboxes.
+         */
+        if (CC->logged_in) {
+          if ( (CC->room.QRflags & QR_MAILBOX) == 0) {
+                if (msg->cm_fields['A'] != NULL) phree(msg->cm_fields['A']);
+                if (msg->cm_fields['N'] != NULL) phree(msg->cm_fields['N']);
+                if (msg->cm_fields['H'] != NULL) phree(msg->cm_fields['H']);
+                msg->cm_fields['A'] = strdoop(CC->user.fullname);
+                msg->cm_fields['N'] = strdoop(config.c_nodename);
+                msg->cm_fields['H'] = strdoop(config.c_humannode);
+           }
+        }
 
        /* 
         * Can we post here?
@@ -312,7 +328,7 @@ void imap_append(int num_parms, char *parms[]) {
         * our happy day without violent explosions.
         */
        if (IMAP->selected) {
-               usergoto(savedroom, 0, &msgs, &new);
+               usergoto(savedroom, 0, 0, &msgs, &new);
        }
 
        /* We don't need this buffer anymore */