]> andersk Git - moira.git/blobdiff - update/update_server.c
Fixes, including uqot, aqot, aftg, and wildcards for gfsp.
[moira.git] / update / update_server.c
index 0615463733456cd1dec91c26b65e8d3707db3f96..7be11608f46f9e96024abd59e24e17b11242c6f2 100644 (file)
@@ -2,35 +2,43 @@
  *     $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_dispatch_c = "$Header$";
 #endif lint
 
+#include <mit-copyright.h>
 #include <stdio.h>
-#include "gdb.h"
+#include <gdb.h>
 #include <errno.h>
 #include <strings.h>
+#include <moira.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
 #include "update.h"
-#include "sms_update_int.h"
-#include "smsu_int.h"
 
-/* XXX */
-#include "kludge.h"
-/* XXX */
-
-extern int auth_001(), exec_001(), inst_001(), xfer_001();
+extern int auth_001(), inst_001();
 extern int xfer_002(), exec_002();
 
 extern int sync_proc(), quit();
 
 extern void gdb_debug();
 extern int exit(), abort(), errno;
+extern STRING instructions;
 
 CONNECTION conn;
 int code;
 char *whoami;
 
+int have_authorization = 0;
+int have_file = 0;
+int have_instructions = 0;
+int done = 0;
+
+
 #define send_int(n) \
      (_send_int=(n),send_object(conn,(char *)&_send_int,INTEGER_T))
 int _send_int;
@@ -41,8 +49,6 @@ struct _dt {
 } dispatch_table[] = {
      { "INST_001", inst_001 },
      { "AUTH_001", auth_001 },
-     { "XFER_001", xfer_001 },
-     { "EXEC_001", exec_001 },
      { "XFER_002", xfer_002 },
      { "EXEC_002", exec_002 },
      { "quit", quit },
@@ -59,7 +65,7 @@ err(code, fmt)
      char *fmt;
 {
      sprintf(buf, fmt, error_message(code));
-     sms_log_error(buf);
+     mr_log_error(buf);
 }
 
 main(argc, argv)
@@ -68,6 +74,7 @@ main(argc, argv)
 {
      STRING str;
      struct _dt *d;
+     int n;
 
 #ifdef DEBUG
      gdb_debug(GDB_NOFORK);
@@ -86,9 +93,20 @@ main(argc, argv)
      }
      /* well, sort of... */
 
-     umask(0077);
-     sms_update_initialize();
-     init_smsU_err_tbl();
+#ifndef DEBUG
+     if (fork())
+       exit(0);
+     n = open("/dev/tty", O_RDWR|FNDELAY);
+     if (n > 0) {
+        (void) ioctl(n, TIOCNOTTY, (char *)NULL);
+        (void) close(n);
+     }
+#endif
+
+     umask(0022);
+     initialize_sms_error_table();
+     initialize_krb_error_table();
+     mr_update_initialize();
 
      /* wait for connection */
      gdb_init();
@@ -102,7 +120,7 @@ main(argc, argv)
         exit(1);
      }
 
-     sms_log_info("got connection");
+     mr_log_info("got connection");
      /* got a connection; loop forever */
      while (1) {
          register char *cp;
@@ -127,8 +145,8 @@ main(argc, argv)
              }
          }
          sprintf(buf, "unknown request received: %s\n", STRING_DATA(str));
-         sms_log_error(buf);
-         code = send_int(SMSU_UNKNOWN_PROC);
+         mr_log_error(buf);
+         code = send_int(MR_UNKNOWN_PROC);
          if (code) {
              err(connection_errno(conn), "%s: sending UNKNOWN_PROC");
          }
@@ -143,3 +161,85 @@ send_ok()
      static int zero = 0;
      return((code = send_object(conn, (char *)&zero, INTEGER_T)));
 }
+
+
+initialize()
+{
+     /* keep have_authorization around */
+     have_file = 0;
+     have_instructions = 0;
+     done = 0;
+     if (STRING_DATA(instructions) != (char *)NULL)
+         string_free(&instructions);
+}
+
+
+/*
+ * quit request:
+ *
+ * syntax:
+ * >>> quit
+ * <<< (int)0
+ * any arguments are ignored
+ *
+ * function:
+ *     closes connection from MR
+ */
+int
+quit(str)
+     char *str;
+{
+#ifdef lint
+     str = (char *)NULL;
+#endif /* lint */
+     (void) send_ok();
+     sever_connection(conn);
+     mr_log_info("Closing connection.");
+     exit(0);
+}
+
+
+/*
+ * lose(msg)
+ *
+ * put <msg> to log as error, break connection, and exit
+ */
+
+lose(msg)
+    char *msg;
+{
+    sprintf(buf, "%s: %s", error_message(code), msg);
+    mr_log_error(buf);
+    if (conn)
+       sever_connection(conn);
+    exit(1);
+}
+
+/*
+ * report_error(msg)
+ *
+ * send back (external) <code>; if error, punt big with <lose(msg)>
+ */
+
+report_error(msg)
+    char *msg;
+{
+    code = send_object(conn, (char *)&code, INTEGER_T);
+    if (code) {
+       code = connection_errno(conn);
+       lose(msg);
+    }
+}
+
+/*
+ * reject_call(c)
+ *
+ * set (external) <code> to <c> and call <report_error>
+ */
+
+reject_call(c)
+    int c;
+{
+    code = c;
+    report_error("call rejected");
+}
This page took 0.048586 seconds and 4 git commands to generate.