From 06c0abfe129ac9b7cd53d4c0ed6e89696509d588 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Wed, 6 Dec 2017 16:03:18 +0100 Subject: Update for WS17/18 (systemctl, rebootctl) --- .../openslx/taskmanager/tasks/RemoteReboot.java | 5 ++- .../org/openslx/taskmanager/tasks/Systemctl.java | 49 ++++++++++++++-------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java b/src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java index 041daaa..9f450b6 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java +++ b/src/main/java/org/openslx/taskmanager/tasks/RemoteReboot.java @@ -96,11 +96,12 @@ public class RemoteReboot extends AbstractTask int ret = -1; try { Shell shell = new SSH( client.clientip, port, "root", sshkey ); + String args = " " + minutes + " " + SSH.escape( client.machineuuid ); if ( shutdown ) { - ret = new Shell.Empty( shell ).exec( SHUTDOWN_CMD + " " + minutes ); + ret = new Shell.Empty( shell ).exec( SHUTDOWN_CMD + args ); status.clientStatus.put( client.machineuuid, minutes == 0 ? ClientStatus.SHUTDOWN : ClientStatus.SHUTDOWN_AT ); } else { - ret = new Shell.Empty( shell ).exec( REBOOT_CMD + " " + minutes ); + ret = new Shell.Empty( shell ).exec( REBOOT_CMD + args ); if ( ret == 0 ) { status.clientStatus.put( client.machineuuid, minutes == 0 ? ClientStatus.REBOOTING : ClientStatus.REBOOT_AT ); rebootingClients.add( client ); diff --git a/src/main/java/org/openslx/taskmanager/tasks/Systemctl.java b/src/main/java/org/openslx/taskmanager/tasks/Systemctl.java index a63ece3..1e2a9bf 100644 --- a/src/main/java/org/openslx/taskmanager/tasks/Systemctl.java +++ b/src/main/java/org/openslx/taskmanager/tasks/Systemctl.java @@ -23,39 +23,54 @@ public class Systemctl extends SystemCommandTask @Override protected String[] initCommandLine() { + boolean allowAll = false; + boolean asRoot = true; + // Check if operation is allowed switch ( operation ) { case "start": case "stop": case "enable": case "disable": case "restart": + case "status": + break; + case "show": + case "is-active": + allowAll = true; + asRoot = false; break; default: status.addMsg( "Unknown operation: " + operation ); return null; } - switch ( service ) { - case "dmsd": - break; - case "taskmanager": - if ( !operation.equals( "restart" ) ) { - status.addMsg( "Error: Service taskmanager can only be restarted." ); - return null; - } - break; - default: - status.addMsg( "Unknown service: " + operation ); - return null; + if ( !allowAll ) { + // Check if service is allowed + switch ( service ) { + case "dmsd": + case "dnbd3-server": + break; + case "taskmanager": + if ( !operation.equals( "restart" ) ) { + status.addMsg( "Error: Service taskmanager can only be restarted." ); + return null; + } + break; + default: + status.addMsg( "Unknown service: " + operation ); + return null; + } } List params = new ArrayList<>(); - params.add( "/usr/bin/sudo" ); - params.add( "-n" ); - params.add( "-u" ); - params.add( "root" ); + if ( asRoot ) { + params.add( "/usr/bin/sudo" ); + params.add( "-n" ); + params.add( "-u" ); + params.add( "root" ); + } params.add( "/bin/systemctl" ); params.add( operation ); params.add( service ); - this.timeoutSeconds = 10; + this.timeoutSeconds = 15; return params.toArray( new String[ params.size() ] ); } -- cgit v1.2.3-55-g7522