]> code.citadel.org Git - citadel.git/blobdiff - citadel/msgbase.c
Final changes to server to allow message display names to
[citadel.git] / citadel / msgbase.c
index a5f2b89b064b53b1ba0e23113c4e988178990c3d..f8a9791b50ef55fd50a8950f39617a78fd519815 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);
 
@@ -2923,8 +2906,8 @@ struct CtdlMessage *CtdlMakeMessage(
        char *supplied_euid,            /* ...or NULL if this is irrelevant */
        char *preformatted_text         /* ...or NULL to read text from client */
 ) {
-       char dest_node[SIZ];
-       char buf[SIZ];
+       char dest_node[256];
+       char buf[1024];
        struct CtdlMessage *msg;
 
        msg = malloc(sizeof(struct CtdlMessage));
@@ -3004,8 +2987,7 @@ struct CtdlMessage *CtdlMakeMessage(
                msg->cm_fields['M'] = preformatted_text;
        }
        else {
-               msg->cm_fields['M'] = CtdlReadMessageBody("000",
-                                       config.c_maxmsglen, NULL, 0);
+               msg->cm_fields['M'] = CtdlReadMessageBody("000", config.c_maxmsglen, NULL, 0);
        }
 
        return(msg);
@@ -3272,10 +3254,9 @@ void cmd_ent0(char *entargs)
        char cc[SIZ];
        char bcc[SIZ];
        char supplied_euid[128];
-       char masquerade_as[SIZ];
        int anon_flag = 0;
        int format_type = 0;
-       char newusername[SIZ];
+       char newusername[256];
        struct CtdlMessage *msg;
        int anonymous = 0;
        char errmsg[SIZ];
@@ -3295,6 +3276,7 @@ void cmd_ent0(char *entargs)
        anon_flag = extract_int(entargs, 2);
        format_type = extract_int(entargs, 3);
        extract_token(subject, entargs, 4, '|', sizeof subject);
+       extract_token(newusername, entargs, 5, '|', sizeof newusername);
        do_confirm = extract_int(entargs, 6);
        extract_token(cc, entargs, 7, '|', sizeof cc);
        extract_token(bcc, entargs, 8, '|', sizeof bcc);
@@ -3318,19 +3300,17 @@ void cmd_ent0(char *entargs)
 
        /* Check some other permission type things. */
 
-       if (post == 2) {
-               if (CC->user.axlevel < 6) {
-                       cprintf("%d You don't have permission to masquerade.\n",
-                               ERROR + HIGHER_ACCESS_REQUIRED);
-                       return;
-               }
-               extract_token(newusername, entargs, 5, '|', sizeof newusername);
-               memset(CC->fake_postname, 0, sizeof(CC->fake_postname) );
-               safestrncpy(CC->fake_postname, newusername,
-                       sizeof(CC->fake_postname) );
-               cprintf("%d ok\n", CIT_OK);
+       if (  (CC->user.axlevel < 6)
+          && (strcasecmp(newusername, CC->user.fullname))
+          && (strcasecmp(newusername, CC->cs_inet_fn))
+       ) {     
+               cprintf("%d You don't have permission to author messages as '%s'.\n",
+                       ERROR + HIGHER_ACCESS_REQUIRED,
+                       newusername
+               );
                return;
        }
+
        CC->cs_flags |= CS_POSTING;
 
        /* In the Mail> room we have to behave a little differently --
@@ -3447,17 +3427,6 @@ void cmd_ent0(char *entargs)
        free(valid_cc);
        free(valid_bcc);
 
-       /* Handle author masquerading */
-       if (CC->fake_postname[0]) {
-               strcpy(masquerade_as, CC->fake_postname);
-       }
-       else if (CC->fake_username[0]) {
-               strcpy(masquerade_as, CC->fake_username);
-       }
-       else {
-               strcpy(masquerade_as, "");
-       }
-
        /* Read in the message from the client. */
        if (do_confirm) {
                cprintf("%d send message\n", START_CHAT_MODE);
@@ -3467,7 +3436,7 @@ void cmd_ent0(char *entargs)
 
        msg = CtdlMakeMessage(&CC->user, recp, cc,
                CC->room.QRname, anonymous, format_type,
-               masquerade_as, subject,
+               newusername, subject,
                ((strlen(supplied_euid) > 0) ? supplied_euid : NULL),
                NULL);
 
@@ -3517,7 +3486,6 @@ void cmd_ent0(char *entargs)
 
                CtdlFreeMessage(msg);
        }
-       CC->fake_postname[0] = '\0';
        if (valid != NULL) {
                free(valid);
        }
@@ -3637,18 +3605,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
  */