]> code.citadel.org Git - citadel.git/blobdiff - citadel/citserver.c
* Renamed "dynloader" to "serv_extensions" globally. We don't want people
[citadel.git] / citadel / citserver.c
index 322386d69c3e65b993d0d701178069def621ef1e..783111760904df414778ea93da65c9febace1ff3 100644 (file)
@@ -40,7 +40,7 @@
 #include <arpa/inet.h>
 #include "citadel.h"
 #include "server.h"
-#include "dynloader.h"
+#include "serv_extensions.h"
 #include "sysdep_decls.h"
 #include "citserver.h"
 #include "config.h"
@@ -72,10 +72,11 @@ time_t server_startup_time;
  */
 void master_startup(void) {
        struct timeval tv;
-       
-       time(&server_startup_time);
+       struct quickroom qrbuf;
        
        lprintf(9, "master_startup() started\n");
+       time(&server_startup_time);
+
        lprintf(7, "Opening databases\n");
        open_databases();
 
@@ -91,6 +92,13 @@ void master_startup(void) {
        create_room(SYSCONFIGROOM,      3, "", 0, 1, 0);
        create_room(config.c_twitroom,  0, "", 0, 1, 0);
 
+       /* The "Local System Configuration" room doesn't need to be visible */
+        if (lgetroom(&qrbuf, SYSCONFIGROOM) == 0) {
+                qrbuf.QRflags2 |= QR2_SYSTEM;
+                lputroom(&qrbuf);
+        }
+
+
        lprintf(7, "Seeding the pseudo-random number generator...\n");
        gettimeofday(&tv, NULL);
        srand(tv.tv_usec);
@@ -208,9 +216,8 @@ void RemoveContext (struct CitContext *con)
        unlink(con->temp);
        lprintf(3, "[%3d] Session ended.\n", con->cs_pid);
        
-
        syslog(LOG_NOTICE,"session %d: ended", con->cs_pid);
-       
+
        /* Deallocate any user-data attached to this session */
        deallocate_user_data(con);
 
@@ -505,20 +512,27 @@ void cmd_mesg(char *mname)
        FILE *mfp;
        char targ[SIZ];
        char buf[SIZ];
+       char buf2[SIZ];
        char *dirs[2];
 
        extract(buf,mname,0);
 
-
        dirs[0]=mallok(64);
        dirs[1]=mallok(64);
        strcpy(dirs[0],"messages");
        strcpy(dirs[1],"help");
-       mesg_locate(targ,sizeof targ,buf,2,(const char **)dirs);
+       snprintf(buf2, sizeof buf2, "%s.%d.%d", buf, CC->cs_clientdev, CC->cs_clienttyp);
+       mesg_locate(targ,sizeof targ,buf2,2,(const char **)dirs);
+       if (strlen(targ) == 0) {
+               snprintf(buf2, sizeof buf2, "%s.%d", buf, CC->cs_clientdev);
+               mesg_locate(targ,sizeof targ,buf2,2,(const char **)dirs);
+               if (strlen(targ) == 0) {
+                       mesg_locate(targ,sizeof targ,buf,2,(const char **)dirs);
+               }       
+       }
        phree(dirs[0]);
        phree(dirs[1]);
 
-
        if (strlen(targ)==0) {
                cprintf("%d '%s' not found.\n",ERROR,mname);
                return;
@@ -976,6 +990,10 @@ void do_command_loop(void) {
                cmd_lzrm(&cmdbuf[5]);
        }
 
+       else if (!strncasecmp(cmdbuf,"LPRM",4)) {
+               cmd_lprm(&cmdbuf[5]);
+       }
+
        else if (!strncasecmp(cmdbuf,"GETU",4)) {
                cmd_getu();
        }
@@ -1016,6 +1034,10 @@ void do_command_loop(void) {
                cmd_msg4(&cmdbuf[5]);
        }
 
+       else if (!strncasecmp(cmdbuf,"MSGP",4)) {
+               cmd_msgp(&cmdbuf[5]);
+       }
+
        else if (!strncasecmp(cmdbuf,"OPNA",4)) {
                cmd_opna(&cmdbuf[5]);
        }
@@ -1244,6 +1266,10 @@ void do_command_loop(void) {
                cmd_view(&cmdbuf[5]);
        }
 
+       else if (!strncasecmp(cmdbuf, "ISME", 4)) {
+               cmd_isme(&cmdbuf[5]);
+       }
+
 #ifdef DEBUG_MEMORY_LEAKS
        else if (!strncasecmp(cmdbuf, "LEAK", 4)) {
                dump_tracked();