#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:
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
}