From 891a3c857cd64421ed35a0f7c720bc2e6871fe21 Mon Sep 17 00:00:00 2001 From: mar Date: Tue, 25 Aug 1992 14:44:25 +0000 Subject: [PATCH] Was completely broken; took code from xfer_001.c --- update/inst_001.c | 66 ++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/update/inst_001.c b/update/inst_001.c index af6af0cf..a60b9d89 100644 --- a/update/inst_001.c +++ b/update/inst_001.c @@ -12,12 +12,17 @@ static char *rcsid_inst_001_c = "$Header$"; #include #include +#include +#include #include +#include 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 } -- 2.45.2