]> andersk Git - moira.git/commitdiff
Was completely broken; took code from xfer_001.c
authormar <mar>
Tue, 25 Aug 1992 14:44:25 +0000 (14:44 +0000)
committermar <mar>
Tue, 25 Aug 1992 14:44:25 +0000 (14:44 +0000)
update/inst_001.c

index af6af0cf25d4377cf3118a8d95906741dbceaa21..a60b9d8981888549717ff5da639beb3b062f8a91 100644 (file)
@@ -12,12 +12,17 @@ static char *rcsid_inst_001_c = "$Header$";
 
 #include <mit-copyright.h>
 #include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
 #include <gdb.h>
+#include <moira.h>
 
 STRING instructions = { 0, 0 };
 extern CONNECTION conn;
-extern int have_instructions;
+extern int have_instructions, have_authorization;
 extern int code;
+extern char *whoami;
+
 
 /*
  * instruction sequence transmission:
@@ -31,17 +36,54 @@ extern int code;
 inst_001(str)
      char *str;
 {
-     if (send_ok())
-         lose("sending okay for inst_001");
-     code = receive_object(conn, (char *)&instructions, STRING_T);
-     if (code) {
-         report_error("reporting failure to receive instructions");
-         return;
-     }
-     have_instructions = 1;
-     if (send_ok())
-         lose("sending okay after instructions");
+    int file_size;
+    int checksum;
+    char *pathname;
+    
+    if (config_lookup("noinstructions")) {
+       code = EPERM;
+       code = send_object(conn, (char *)&code, INTEGER_T);
+       com_err(whoami, EPERM, "Not allowed to receive instructions");
+       return;
+    }
+
+    str += 8;
+    while (*str == ' ')
+       str++;
+    if (!*str) {
+    failure:
+       reject_call(MR_ARGS);
+       return;
+    }
+    file_size = atoi(str);
+    while (isdigit(*str))
+       str++;
+    while (*str == ' ')
+       str++;
+    checksum = atoi(str);
+    while (isdigit(*str))
+       str++;
+    while (*str == ' ')
+       str++;
+    if (*str != '/')
+       goto failure;
+    pathname = str;
+    if (!have_authorization) {
+       reject_call(MR_PERM);
+       return;
+    }
+    code = send_ok();
+    if (code)
+       lose("sending ok for file xfer (2)");
+    code = get_file(pathname, file_size, checksum, 0700);
+    if (!code) {
+       char buf[BUFSIZ];
+       have_instructions = 1;
+       strcpy(buf, "transferred file ");
+       strcat(buf, pathname);
+       mr_log_info(buf);
+    }
 #ifdef DEBUG
-     printf("got instructions: %s\n", STRING_DATA(instructions));
+    printf("got instructions: %s\n", STRING_DATA(instructions));
 #endif
 }
This page took 0.14216 seconds and 5 git commands to generate.