]> andersk Git - moira.git/commitdiff
add support for printservers table
authordanw <danw>
Tue, 25 May 1999 22:06:10 +0000 (22:06 +0000)
committerdanw <danw>
Tue, 25 May 1999 22:06:10 +0000 (22:06 +0000)
clients/moira/f_defs.h
clients/moira/menus.c
clients/moira/printer.c

index 2d9c469df9f532a78898784fb9f96336fa0cca3d..f5181a4d2a58d340c00ec94da6d7650fb4603104 100644 (file)
@@ -149,6 +149,11 @@ int DeletePrn(int argc, char **argv);
 int AddPrn(int argc, char **argv);
 int ChngPrn(int argc, char **argv);
 int UpdateHWAddr(int argc, char **argv);
+int GetPrintSrv(int argc, char **argv);
+int AddPrintSrv(int argc, char **argv);
+int DelPrintSrv(int argc, char **argv);
+int ChangePrintSrv(int argc, char **argv);
+
 
 /* zephyr.c */
 int AddZephyr(int argc, char **argv);
index bf9d47dc5b2e44fb97d064de62a3234767d9f3c9..2c4146e1a01162759f82036880eebf6431dbe1d1 100644 (file)
@@ -620,6 +620,31 @@ Menu dcm_menu = {
     }
 };
 
+Menu printserver_menu = {
+  NULLFUNC,
+  NULLFUNC,
+  "Print Server Menu",
+  4,
+  {
+    { GetPrintSrv, NULLMENU, 2, {
+      {"get", "Get Print Server Information"},
+      {"name", "Name of server: "}
+    } },
+    { AddPrintSrv, NULLMENU, 2, {
+      {"add", "Add a New Print Server"},
+      {"name", "Name of server: "}
+    } },
+    { ChangePrintSrv, NULLMENU, 2, {
+      {"change", "Modify a Print Server"},
+      {"name", "Name of server: "}
+    } },
+    { DelPrintSrv, NULLMENU, 2, {
+      {"delete", "Delete a Print Server"},
+      {"name", "Name of server: "}
+    } }
+  }
+};
+
 /*
  * Printer Menu
  */
@@ -628,7 +653,7 @@ Menu printer_menu = {
   NULLFUNC,
   NULLFUNC,
   "Printer Menu",
-  10,
+  11,
   {
     { GetPrn, NULLMENU, 2, {
       {"get", "Get Printer Information"},
@@ -669,11 +694,11 @@ Menu printer_menu = {
     { UpdateHWAddr, NULLMENU, 2, {
       {"hwaddr", "Update Printer Hardware Address"},
       {"name", "Printer hostname: "}
-    } }
+    } },
+    SUBMENU("server", "Print Servers Menu", &printserver_menu),
   }
 };
 
-
 /*
  * Zephyr Menu
  */
index 5b25cbe7a3d1819a6c554e8d76c51f98040fe6d8..344532ec8795f9356c1864e2b9bdbd5e9b01cd88 100644 (file)
@@ -27,9 +27,14 @@ RCSID("$Header$");
 
 void RealDeletePrn(char **info, Bool one_item);
 void ChangePrn(char **info, Bool one_item);
+void ChangePrintSrvLoop(char **info, Bool one);
 extern int GetAliasValue(int argc, char **argv, void *retval);
 int StoreHWAddr(int argc, char **argv, void *retval);
 
+static char *PrintPrintSrvInfo(char **info);
+static char **SetPrintSrvDefaults(char **info, char *name);
+static char **AskPrintSrvInfo(char **info);
+
 #define BY_NAME 0
 #define BY_ETHERNET 1
 #define BY_HOSTNAME 2
@@ -496,3 +501,191 @@ int UpdateHWAddr(int argc, char **argv)
   free(hwaddr);
   return DM_NORMAL;
 }
+
+
+int GetPrintSrv(int argc, char **argv)
+{
+  int stat;
+  struct mqelem *elem = NULL, *top;
+  char *name;
+
+  name = canonicalize_hostname(strdup(argv[1]));
+  stat = do_mr_query("get_print_server", 1, &name, StoreInfo, &elem);
+  if (stat)
+    {
+      com_err(program_name, stat, " in GetPrintSrv");
+      return DM_NORMAL;
+    }
+
+  top = QueueTop(elem);
+  Loop(top, (void *) PrintPrintSrvInfo);
+  FreeQueue(top);              /* clean the queue. */
+  return DM_NORMAL;
+}
+
+static char *PrintPrintSrvInfo(char **info)
+{
+  char buf[BUFSIZ];
+  int status;
+
+  if (!info)           /* If no informaion */
+    {
+      Put_message("PrintPrintSrvInfo called with null info!");
+      return NULL;
+    }
+  Put_message("");
+  sprintf(buf, "Hostname: %s", info[PRINTSERVER_HOST]);
+  Put_message(buf);
+  sprintf(buf, "Kind: %-10s Printer Types: %s", info[PRINTSERVER_KIND],
+         info[PRINTSERVER_TYPES]);
+  Put_message(buf);
+  if (!strcmp(info[PRINTSERVER_OWNER_TYPE], "NONE"))
+    sprintf(buf, "Owner: %-25s", info[PRINTSERVER_OWNER_TYPE]);
+  else
+    {
+      sprintf(buf, "Owner: %s %-*s", info[PRINTSERVER_OWNER_TYPE],
+             24 - strlen(info[PRINTSERVER_OWNER_TYPE]),
+             info[PRINTSERVER_OWNER_NAME]);
+    }
+  strcat(buf, "LPC ACL: ");
+  strcat(buf, info[PRINTSERVER_LPC_ACL]);
+  Put_message(buf);
+  sprintf(buf, MOD_FORMAT, info[PRINTSERVER_MODBY], info[PRINTSERVER_MODTIME],
+         info[PRINTSERVER_MODWITH]);
+  Put_message(buf);
+
+  return info[PRINTSERVER_HOST];
+}
+
+static char **SetPrintSrvDefaults(char **info, char *name)
+{
+  info[PRINTSERVER_HOST] = strdup(name);
+  info[PRINTSERVER_KIND] = strdup("ATHENA");
+  info[PRINTSERVER_TYPES] = strdup("PRIVATE");
+  info[PRINTSERVER_OWNER_TYPE] = strdup("NONE");
+  info[PRINTSERVER_OWNER_NAME] = strdup("");
+  info[PRINTSERVER_LPC_ACL] = strdup("[none]");
+  info[PRINTSERVER_MODTIME] = info[PRINTSERVER_MODBY] =
+    info[PRINTSERVER_MODWITH] = NULL;
+
+  info[PRINTSERVER_END] = NULL;
+  return info;
+}
+
+static char **AskPrintSrvInfo(char **info)
+{
+  char buf[BUFSIZ];
+  char *args[3], *lpc_acl;
+  char *s, *d;
+  int status;
+
+  Put_message("");
+  sprintf(buf, "Print Server entry for %s.", info[PRINTSERVER_HOST]);
+  Put_message(buf);
+  Put_message("");
+
+  if (GetTypeFromUser("Kind of LPD", "lpd_kind", &info[PRINTSERVER_KIND]) ==
+      SUB_ERROR)
+    return NULL;
+  if (GetValueFromUser("Printer types", &info[PRINTSERVER_TYPES]) == SUB_ERROR)
+    return NULL;
+  if (GetTypeFromUser("Owner type", "ace_type", &info[PRINTSERVER_OWNER_TYPE])
+      == SUB_ERROR)
+    return NULL;
+  if (strcmp(info[PRINTSERVER_OWNER_TYPE], "NONE") &&
+      GetValueFromUser("Owner Name", &info[PRINTSERVER_OWNER_NAME]) ==
+      SUB_ERROR)
+    return NULL;
+  if (GetValueFromUser("LPC ACL", &info[PRINTSERVER_LPC_ACL]) == SUB_ERROR)
+    return NULL;
+
+  FreeAndClear(&info[PRINTSERVER_MODTIME], TRUE);
+  FreeAndClear(&info[PRINTSERVER_MODBY], TRUE);
+  FreeAndClear(&info[PRINTSERVER_MODWITH], TRUE);
+
+  return info;
+}
+
+int AddPrintSrv(int argc, char **argv)
+{
+  char *info[MAX_ARGS_SIZE], **args, *name;
+  int stat;
+
+  name = canonicalize_hostname(strdup(argv[1]));
+
+  if (!(stat = do_mr_query("get_print_server", 1, &name, NULL, NULL)))
+    {
+      Put_message ("A print server record for that host already exists.");
+      free(name);
+      return DM_NORMAL;
+    }
+  else if (stat != MR_NO_MATCH)
+    {
+      com_err(program_name, stat, " in AddPrintSrv");
+      free(name);
+      return DM_NORMAL;
+    }
+
+  args = AskPrintSrvInfo(SetPrintSrvDefaults(info, name));
+  free(name);
+  if (!args)
+    {
+      Put_message("Aborted.");
+      return DM_NORMAL;
+    }
+
+  if ((stat = do_mr_query("add_print_server", CountArgs(args),
+                         args, NULL, NULL)))
+    com_err(program_name, stat, " in AddPrintSrv");
+
+  FreeInfo(info);
+  return DM_NORMAL;
+}
+
+int ChangePrintSrv(int argc, char **argv)
+{
+  char *name, **args;
+  struct mqelem *elem = NULL;
+  int stat;
+
+  name = canonicalize_hostname(strdup(argv[1]));
+  if ((stat = do_mr_query("get_print_server", 1, &name, StoreInfo, &elem)))
+    {
+      free(name);
+      com_err(program_name, stat, " in ChangePrintSrv");
+      return DM_NORMAL;
+    }
+  free(name);
+
+  QueryLoop(elem, NullPrint, ChangePrintSrvLoop, "Change the print server");
+  FreeQueue(elem);
+  return DM_NORMAL;
+}
+
+void ChangePrintSrvLoop(char **info, Bool one)
+{
+  int stat;
+
+  if (!AskPrintSrvInfo(info))
+    return;
+
+  if ((stat = do_mr_query("update_print_server", CountArgs(info),
+                         info, NULL, NULL)))
+    com_err(program_name, stat, " in ChangePrintSrv");
+
+  FreeInfo(info);
+  return;
+}
+
+int DelPrintSrv(int argc, char **argv)
+{
+  int stat;
+  char *name;
+
+  name = canonicalize_hostname(strdup(argv[1]));
+
+  if ((stat = do_mr_query("delete_print_server", 1, &name, NULL, NULL)))
+    com_err(program_name, stat, " while deleting print server");
+  free(name);
+  return DM_NORMAL;
+}
This page took 0.069946 seconds and 5 git commands to generate.