+/*
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
package org.argeo.slc.jsch;
import java.io.BufferedReader;
private Resource stdOut = null;
private ExecutionResources executionResources;
+ private String user;
+
/**
* If set, stdout is written to it as a list of lines. Cleared before each
* run.
private Boolean logEvenIfStdOutLines = false;
private Boolean quiet = false;
+ public RemoteExec() {
+ }
+
+ public RemoteExec(SshTarget sshTarget, String cmd) {
+ setSshTarget(sshTarget);
+ setCommand(cmd);
+ }
+
public void run(Session session) {
List<String> commandsToUse = new ArrayList<String>(commands);
String commandToUse = command;
}
if (forceShell) {
- if (commandToUse.indexOf(';') >= 0
- || commandToUse.indexOf('\n') >= 0) {
- StringTokenizer st = new StringTokenizer(commandToUse, ";\n");
+ // for the time being do not interpret both \n and ;
+ // priority to \n
+ // until we know how to parse ; within ""
+ if (commandToUse.indexOf('\n') >= 0) {
+ StringTokenizer st = new StringTokenizer(commandToUse, "\n");
+ while (st.hasMoreTokens()) {
+ String cmd = st.nextToken();
+ commandsToUse.add(cmd);
+ }
+ } else if (commandToUse.indexOf(';') >= 0) {
+ StringTokenizer st = new StringTokenizer(commandToUse, ";");
while (st.hasMoreTokens()) {
String cmd = st.nextToken();
commandsToUse.add(cmd);
commandToUse = null;
}
+ // run as user
+ if (user != null) {
+ if (commandsToUse.size() > 0) {
+ commandsToUse.add(0, "su - " + user);
+ commandsToUse.add("exit");
+ } else {
+ if (command.indexOf('\"') >= 0)
+ throw new SlcException(
+ "Don't know how to su a command with \", use shell instead.");
+ commandToUse = "su - " + user + " -c \"" + command + "\"";
+ }
+ }
+
// execute command(s)
if (commandToUse != null) {
if (commandsToUse.size() != 0)
this.executionResources = executionResources;
}
+ public void setUser(String user) {
+ this.user = user;
+ }
+
}