]> andersk Git - moira.git/blobdiff - update/inst_001.c
posixify source
[moira.git] / update / inst_001.c
index e8366c0a823939138627512845a87f2a90822947..d2860346fe2cc4f5442aa5bc5c6ef761bbe273d7 100644 (file)
@@ -2,19 +2,27 @@
  *     $Source$
  *     $Header$
  */
+/*  (c) Copyright 1988 by the Massachusetts Institute of Technology. */
+/*  For copying and distribution information, please see the file */
+/*  <mit-copyright.h>. */
 
 #ifndef lint
 static char *rcsid_inst_001_c = "$Header$";
 #endif lint
 
+#include <mit-copyright.h>
 #include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
 #include <gdb.h>
-#include "kludge.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:
@@ -28,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, 0555, 0);
+    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.55979 seconds and 4 git commands to generate.