Add query for existence of package
[hcoop/domtool2.git] / src / main-admin.sml
index 967f1e1..2e4c74b 100644 (file)
@@ -29,29 +29,40 @@ fun requestPerms user =
                  print "\n")) classes)
 
 val _ =
-    case CommandLine.arguments () of
-       ["shutdown"] => Main.requestShutdown ()
-      | ["grant", user, class, value] => Main.requestGrant {user = user, class = class, value = value}
-      | ["revoke", user, class, value] => Main.requestRevoke {user = user, class = class, value = value}
-      | ["perms", user] => requestPerms user
-      | ["perms"] => requestPerms (Posix.SysDB.Passwd.name (Posix.SysDB.getpwuid (Posix.ProcEnv.getuid ())))
-      | ["whohas", class, value] =>
-       (case Main.requestWhoHas {class = class, value = value} of
-            NONE => ()
-          | SOME users =>
-            (print ("whohas " ^ class ^ " / " ^ value ^ ":");
-             app (fn user => print (" " ^ user)) users;
-             print "\n"))
-      | "rmdom" :: doms => Main.requestRmdom doms
-      | ["regen"] => Main.requestRegen ()
-      | ["rmuser", user] => Main.requestRmuser user
-      | ["ping"] => OS.Process.exit (Main.requestPing ())
-      | ["slave-shutdown"] => Main.requestSlaveShutdown ()
-      | ["slave-ping"] => OS.Process.exit (Main.requestSlavePing ())
-      | ["package", node, pkg] => OS.Process.exit (Main.requestApt {node = node, pkg = pkg})
-      | ["cron", node, uname] => OS.Process.exit (Main.requestCron {node = node, uname = uname})
-      | ["ftp", node, uname] => OS.Process.exit (Main.requestFtp {node = node, uname = uname})
-      | ["tpe", node, uname] => OS.Process.exit (Main.requestTrustedPath {node = node, uname = uname})
-      | ["sockperm", node, uname] => OS.Process.exit (Main.requestSocketPerm {node = node, uname = uname})
-      | ["firewall", node, uname] => OS.Process.exit (Main.requestFirewall {node = node, uname = uname})
-      | _ => print "Invalid command-line arguments\n"
+    (case CommandLine.arguments () of
+        ["shutdown"] => Main.requestShutdown ()
+       | ["grant", user, class, value] => Main.requestGrant {user = user, class = class, value = value}
+       | ["revoke", user, class, value] => Main.requestRevoke {user = user, class = class, value = value}
+       | ["perms", user] => requestPerms user
+       | ["perms"] => requestPerms (Posix.SysDB.Passwd.name (Posix.SysDB.getpwuid (Posix.ProcEnv.getuid ())))
+       | ["whohas", class, value] =>
+        (case Main.requestWhoHas {class = class, value = value} of
+             NONE => ()
+           | SOME users =>
+             (print ("whohas " ^ class ^ " / " ^ value ^ ":");
+              app (fn user => print (" " ^ user)) users;
+              print "\n"))
+       | "rmdom" :: doms => Main.requestRmdom doms
+       | ["regen"] => Main.requestRegen ()
+       | ["regen", "-tc"] => Main.requestRegenTc ()
+       | ["rmuser", user] => Main.requestRmuser user
+       | ["ping"] => OS.Process.exit (Main.requestPing ())
+       | ["slave-shutdown"] => Main.requestSlaveShutdown ()
+       | ["slave-ping"] => OS.Process.exit (Main.requestSlavePing ())
+       | ["package", node, pkg] => OS.Process.exit (Main.requestApt {node = node, pkg = pkg})
+       | ["package-exists", node, pkg] => OS.Process.exit (Main.requestAptExists {node = node, pkg = pkg})
+       | ["cron", node, uname] => OS.Process.exit (Main.requestCron {node = node, uname = uname})
+       | ["ftp", node, uname] => OS.Process.exit (Main.requestFtp {node = node, uname = uname})
+       | ["tpe", node, uname] => OS.Process.exit (Main.requestTrustedPath {node = node, uname = uname})
+       | ["sockperm", node, uname] => OS.Process.exit (Main.requestSocketPerm {node = node, uname = uname})
+       | ["firewall", node, uname] => OS.Process.exit (Main.requestFirewall {node = node, uname = uname})
+       | ["describe", dom] => Main.requestDescribe dom
+       | ["users"] =>
+        (Acl.read Config.aclFile;
+         app (fn s => (print s; print "\n")) (Acl.users ()))
+       | ["reusers"] => Main.requestReUsers ()
+                     
+       | _ => (print "Invalid command-line arguments\n";
+              print "See the documentation: http://wiki.hcoop.net/DomTool/AdminProcedures\n"))
+    handle OpenSSL.OpenSSL s => (print ("OpenSSL exception: " ^ s ^ "\n");
+                                OS.Process.exit OS.Process.failure)