]> code.citadel.org Git - citadel.git/blobdiff - citadel/citserver.c
* When sending mail, copy to the sender's "Sent Items>" room instead of to
[citadel.git] / citadel / citserver.c
index 00d08695663e3056196ec4a18a9a1822937c737a..c03f9cdfe6f2f1f9b5dc83e81e82e3f988a3a99c 100644 (file)
 #include "control.h"
 #include "tools.h"
 
+#ifndef HAVE_SNPRINTF
+#include "snprintf.h"
+#endif
+
 struct CitContext *ContextList = NULL;
 char *unique_session_numbers;
 int ScheduledShutdown = 0;
@@ -349,7 +353,7 @@ void cmd_time(void)
    
    tv = time(NULL);
    
-   cprintf("%d %ld\n", OK, tv);
+   cprintf("%d %ld\n", OK, (long)tv);
 }
 
 /*
@@ -644,32 +648,44 @@ void cmd_term(char *cmdbuf)
        int session_num;
        struct CitContext *ccptr;
        int found_it = 0;
-
-       if (CtdlAccessCheck(ac_aide)) return;
+       int allowed = 0;
 
        session_num = extract_int(cmdbuf, 0);
        if (session_num == CC->cs_pid) {
                cprintf("%d You can't kill your own session.\n", ERROR);
                return;
-               }
+       }
 
        lprintf(9, "Locating session to kill\n");
        begin_critical_section(S_SESSION_TABLE);
        for (ccptr = ContextList; ccptr != NULL; ccptr = ccptr->next) {
                if (session_num == ccptr->cs_pid) {
-                       ccptr->kill_me = 1;
                        found_it = 1;
+                       if ((ccptr->usersupp.usernum == CC->usersupp.usernum)
+                          || (CC->usersupp.axlevel >= 6)) {
+                               allowed = 1;
+                               ccptr->kill_me = 1;
+                       }
+                       else {
+                               allowed = 0;
                        }
                }
+       }
        end_critical_section(S_SESSION_TABLE);
 
        if (found_it) {
-               cprintf("%d Session terminated.\n", OK);
+               if (allowed) {
+                       cprintf("%d Session terminated.\n", OK);
+               }
+               else {
+                       cprintf("%d You are not allowed to do that.\n",
+                               ERROR + HIGHER_ACCESS_REQUIRED);
                }
+       }
        else {
                cprintf("%d No such session.\n", ERROR);
-               }
        }
+}
 
 
 
@@ -769,7 +785,7 @@ void generate_nonce(struct CitContext *con) {
        gettimeofday(&tv, NULL);
        memset(con->cs_nonce, NONCE_SIZE, 0);
        snprintf(con->cs_nonce, NONCE_SIZE, "<%d%ld@%s>",
-               rand(), tv.tv_usec, config.c_fqdn);
+               rand(), (long)tv.tv_usec, config.c_fqdn);
 }
 
 
@@ -1017,10 +1033,6 @@ void do_command_loop(void) {
                cmd_ent0(&cmdbuf[5]);
                }
 
-       else if (!strncasecmp(cmdbuf,"ENT3",4)) {
-               cmd_ent3(&cmdbuf[5]);
-               }
-
        else if (!strncasecmp(cmdbuf,"RINF",4)) {
                cmd_rinf();
                }