* Removed the completely redunant function get_mm()
[citadel.git] / citadel / msgbase.c
index badbc8f7cc351e2bf6ab01e3e127289ba8285414..74a2f898ff31a0ce9616a1ef7aded23d5d682a38 100644 (file)
@@ -243,22 +243,6 @@ int alias(char *name)
 }
 
 
-void get_mm(void)
-{
-       FILE *fp;
-
-       fp = fopen(file_citadel_control, "r");
-       if (fp == NULL) {
-               lprintf(CTDL_CRIT, "Cannot open %s: %s\n",
-                               file_citadel_control,
-                               strerror(errno));
-               exit(errno);
-       }
-       fread((char *) &CitControl, sizeof(struct CitControl), 1, fp);
-       fclose(fp);
-}
-
-
 /*
  * Back end for the MSGS command: output message number only.
  */
@@ -540,7 +524,6 @@ int CtdlForEachMessage(int mode, long ref, char *search_string,
        long *search_msgs = NULL;
 
        /* Learn about the user and room in question */
-       get_mm();
        getuser(&CC->user, CC->curr_user);
        CtdlGetRelationship(&vbuf, &CC->user, &CC->room);
 
@@ -742,6 +725,9 @@ void cmd_msgs(char *cmdbuf)
                template = (struct CtdlMessage *)
                        malloc(sizeof(struct CtdlMessage));
                memset(template, 0, sizeof(struct CtdlMessage));
+               template->cm_magic = CTDLMESSAGE_MAGIC;
+               template->cm_anon_type = MES_NORMAL;
+
                while(client_getln(buf, sizeof buf), strcmp(buf,"000")) {
                        extract_token(tfield, buf, 0, '|', sizeof tfield);
                        extract_token(tvalue, buf, 1, '|', sizeof tvalue);
@@ -2577,6 +2563,29 @@ long CtdlSubmitMsg(struct CtdlMessage *msg,      /* message to save */
                                        &userbuf, MAILROOM);
                        CtdlSaveMsgPointerInRoom(actual_rm, newmsgid, 0, msg);
                        BumpNewMailCounter(userbuf.usernum);
+                       if (strlen(config.c_funambol_host) > 0) {
+                       /* Generate a instruction message for the Funambol notification
+                          server, in the same style as the SMTP queue */
+                          instr = malloc(SIZ * 2);
+                          snprintf(instr, SIZ * 2,
+                       "Content-type: %s\n\nmsgid|%ld\nsubmitted|%ld\n"
+                       "bounceto|%s@%s\n",
+                       SPOOLMIME, newmsgid, (long)time(NULL),
+                       msg->cm_fields['A'], msg->cm_fields['N']
+                       );
+
+                          imsg = malloc(sizeof(struct CtdlMessage));
+                          memset(imsg, 0, sizeof(struct CtdlMessage));
+                          imsg->cm_magic = CTDLMESSAGE_MAGIC;
+                          imsg->cm_anon_type = MES_NORMAL;
+                          imsg->cm_format_type = FMT_RFC822;
+                          imsg->cm_fields['A'] = strdup("Citadel");
+                          imsg->cm_fields['J'] = strdup("do not journal");
+                          imsg->cm_fields['M'] = instr;
+                          imsg->cm_fields['W'] = strdup(recipient);
+                          CtdlSubmitMsg(imsg, NULL, FNBL_QUEUE_ROOM);
+                          CtdlFreeMessage(imsg);
+                       }
                }
                else {
                        lprintf(CTDL_DEBUG, "No user <%s>\n", recipient);
@@ -3611,18 +3620,15 @@ int CtdlDeleteMessages(char *room_name,         /* which room */
  * the current room (returns 1 for yes, 0 for no)
  */
 int CtdlDoIHavePermissionToDeleteMessagesFromThisRoom(void) {
-       getuser(&CC->user, CC->curr_user);
-       if ((CC->user.axlevel < 6)
-           && (CC->user.usernum != CC->room.QRroomaide)
-           && ((CC->room.QRflags & QR_MAILBOX) == 0)
-           && (!(CC->internal_pgm))) {
-               return(0);
-       }
-       return(1);
+       int ra;
+       CtdlRoomAccess(&CC->room, &CC->user, &ra, NULL);
+       if (ra & UA_DELETEALLOWED) return(1);
+       return(0);
 }
 
 
 
+
 /*
  * Delete message from current room
  */