]> code.citadel.org Git - citadel.git/blobdiff - citadel/file_ops.c
* Fixed generation of unique file names for network uploads etc.
[citadel.git] / citadel / file_ops.c
index 9c121825bc5ab1959f1a66f1f6f4beaf9d4cb826..fed2c0d890c4532137fa095958d8af768d1e0b3a 100644 (file)
@@ -1,4 +1,10 @@
-/* $Id$ */
+/* 
+ * $Id$
+ *
+ * Server functions which handle file transfers and room directories.
+ *
+ */
+
 #include "sysdep.h"
 #include <stdlib.h>
 #include <unistd.h>
 #include "room_ops.h"
 #include "msgbase.h"
 #include "tools.h"
+#include "citserver.h"
 
 void cmd_delf(char *filename)
 {
        char pathname[64];
        int a;
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
-
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
@@ -76,16 +73,7 @@ void cmd_movf(char *cmdbuf)
        extract(filename,cmdbuf,0);
        extract(newroom,cmdbuf,1);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
@@ -146,20 +134,12 @@ void cmd_netf(char *cmdbuf)
        int a,e;
        time_t now;
        FILE *ofp;
+       static int seq = 1;
 
        extract(filename,cmdbuf,0);
        extract(destsys,cmdbuf,1);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
-
-       if (!is_room_aide()) {
-               cprintf("%d Higher access required.\n",
-                       ERROR+HIGHER_ACCESS_REQUIRED);
-               return;
-               }
+       if (CtdlAccessCheck(ac_room_aide)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
@@ -188,8 +168,9 @@ void cmd_netf(char *cmdbuf)
                        ERROR+NO_SUCH_SYSTEM,destsys);
                return;
                }
-       snprintf(outfile,sizeof outfile,"%s/network/spoolin/nsf.%d",BBSDIR,
-                getpid());
+       snprintf(outfile, sizeof outfile,
+               "%s/network/spoolin/nsf.%04x.%04x",
+               BBSDIR, getpid(), ++seq);
        ofp=fopen(outfile,"a");
        if (ofp==NULL) {
                cprintf("%d internal error\n",ERROR);
@@ -254,10 +235,7 @@ void cmd_open(char *cmdbuf)
 
        extract(filename,cmdbuf,0);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
@@ -361,10 +339,7 @@ void cmd_uopn(char *cmdbuf)
        extract(CC->upl_file,cmdbuf,0);
        extract(CC->upl_comment,cmdbuf,1);
 
-       if (!(CC->logged_in)) {
-               cprintf("%d Not logged in.\n",ERROR+NOT_LOGGED_IN);
-               return;
-               }
+       if (CtdlAccessCheck(ac_logged_in)) return;
 
        if ((CC->quickroom.QRflags & QR_DIRECTORY) == 0) {
                cprintf("%d No directory in this room.\n",ERROR+NOT_HERE);
@@ -697,6 +672,8 @@ void cmd_ndop(char *cmdbuf)
  */
 void cmd_nuop(char *cmdbuf)
 {
+       static int seq = 1;
+
        if (strlen(CC->net_node)==0) {
                cprintf("%d Not authenticated as a network node.\n",
                        ERROR+NOT_LOGGED_IN);
@@ -708,8 +685,9 @@ void cmd_nuop(char *cmdbuf)
                return;
                }
 
-       snprintf(CC->upl_path,sizeof CC->upl_path,"%s/network/spoolin/%s.%d",
-               BBSDIR,CC->net_node,getpid());
+       snprintf(CC->upl_path, sizeof CC->upl_path,
+               "%s/network/spoolin/%s.%04x.%04x",
+               BBSDIR, CC->net_node, getpid(), ++seq);
 
        CC->upload_fp = fopen(CC->upl_path,"r");
        if (CC->upload_fp != NULL) {