public void addProcess(final String processName, final List<String> command, final Map<String, String> env, final String workingDirectory, final boolean isPrivileged, final boolean respawn) { // Create a new authKey final byte[] authKey = new byte[16]; new Random(new SecureRandom().nextLong()).nextBytes(authKey); // addProcess(processName, authKey, command, env, workingDirectory, isPrivileged, respawn); }
processController.processStopped(processName, endTime - startTime); state = State.DOWN; processController.removeProcess(processName); } else if (isPrivileged() && exitCode == ExitCodes.HOST_CONTROLLER_ABORT_EXIT_CODE) { if (processController.getOngoingProcessCount() > 1) { respawn = true; respawnCount = ManagedProcess.this.incrementAndGetRespawnCount(); processController.removeProcess(processName); new Thread(new Runnable() { public void run() { processController.removeProcess(processName); new Thread(new Runnable() { public void run() { respawn = true; respawnCount = ManagedProcess.this.incrementAndGetRespawnCount(); if (isPrivileged() && processController.getOngoingProcessCount() > 1) {
} catch (IOException e) { e.printStackTrace(); processController.operationFailed(processName, ProcessMessageHandler.OperationType.START); log.failedToStartProcess(processName); return; final InputStream stderr = process.getErrorStream(); final InputStream stdout = process.getInputStream(); final Thread stderrThread = new Thread(new ReadTask(stderr, processController.getStderr())); stderrThread.setName(String.format("stderr for %s", processName)); stderrThread.start(); final Thread stdoutThread = new Thread(new ReadTask(stdout, processController.getStdout())); stdoutThread.setName(String.format("stdout for %s", processName)); stdoutThread.start(); processController.processStarted(processName); } else { processController.operationFailed(processName, ProcessMessageHandler.OperationType.START);
processName = readUTFZBytes(dataStream); ProcessLogger.SERVER_LOGGER.tracef("Received send_stdin for process %s", processName); processController.sendStdin(processName, dataStream); } else { ProcessLogger.SERVER_LOGGER.tracef("Ignoring send_stdin message from untrusted source"); ProcessLogger.SERVER_LOGGER.tracef("Received add_process for process %s", processName); final String authKey = new String(authBytes, Charset.forName("US-ASCII")); processController.addProcess(processName, processId, authKey, Arrays.asList(command), env, workingDirectory, false, false); } else { ProcessLogger.SERVER_LOGGER.tracef("Ignoring add_process message from untrusted source"); operationType = ProcessMessageHandler.OperationType.START; processName = readUTFZBytes(dataStream); processController.startProcess(processName); ProcessLogger.SERVER_LOGGER.tracef("Received start_process for process %s", processName); } else { processController.stopProcess(processName); } else { ProcessLogger.SERVER_LOGGER.tracef("Ignoring stop_process message from untrusted source"); operationType = ProcessMessageHandler.OperationType.REMOVE; processName = readUTFZBytes(dataStream); processController.removeProcess(processName); } else { ProcessLogger.SERVER_LOGGER.tracef("Ignoring remove_process message from untrusted source"); if (isPrivileged) {
processName = readUTFZBytes(dataStream); SERVER_LOGGER.tracef("Received send_stdin for process %s", processName); processController.sendStdin(processName, dataStream); } else { SERVER_LOGGER.tracef("Ignoring send_stdin message from untrusted source"); processController.addProcess(processName, authKey, Arrays.asList(command), env, workingDirectory, false, false); } else { SERVER_LOGGER.tracef("Ignoring add_process message from untrusted source"); operationType = ProcessMessageHandler.OperationType.START; processName = readUTFZBytes(dataStream); processController.startProcess(processName); SERVER_LOGGER.tracef("Received start_process for process %s", processName); } else { processController.stopProcess(processName); } else { SERVER_LOGGER.tracef("Ignoring stop_process message from untrusted source"); operationType = ProcessMessageHandler.OperationType.REMOVE; processName = readUTFZBytes(dataStream); processController.removeProcess(processName); } else { SERVER_LOGGER.tracef("Ignoring remove_process message from untrusted source"); if (isPrivileged) { operationType = ProcessMessageHandler.OperationType.INVENTORY; processController.sendInventory();
configuration.setReadExecutor(Executors.newCachedThreadPool(threadFactory)); final ProcessController processController = new ProcessController(configuration, System.out, System.err); final InetSocketAddress boundAddress = processController.getServer().getBoundAddress(); initialCommand.add("-D" + "jboss.home.dir=" + jbossHome); processController.addProcess(HOST_CONTROLLER_PROCESS_NAME, initialCommand, Collections.<String, String>emptyMap(), currentWorkingDir, true, true); processController.startProcess(HOST_CONTROLLER_PROCESS_NAME);
public void handleMessage(final Connection connection, final InputStream dataStream) throws IOException { final int cmd = readUnsignedByte(dataStream); if (cmd != Protocol.AUTH) { ProcessLogger.SERVER_LOGGER.receivedUnknownGreetingCode(Integer.valueOf(cmd), connection.getPeerAddress()); connection.close(); return; } final int version = StreamUtils.readUnsignedByte(dataStream); if (version < 1) { ProcessLogger.SERVER_LOGGER.receivedInvalidVersion(connection.getPeerAddress()); connection.close(); return; } final byte[] authCode = new byte[ProcessController.AUTH_BYTES_ENCODED_LENGTH]; StreamUtils.readFully(dataStream, authCode); final ManagedProcess process = processController.getServerByAuthCode(authCode); if (process == null) { ProcessLogger.SERVER_LOGGER.receivedUnknownCredentials(connection.getPeerAddress()); StreamUtils.safeClose(connection); return; } ProcessLogger.SERVER_LOGGER.tracef("Received authentic connection from %s", connection.getPeerAddress()); connection.setMessageHandler(new ConnectedMessageHandler(processController, process.isPrivileged())); processController.addManagedConnection(connection); dataStream.close(); // Reset the respawn count for the connecting process process.resetRespawnCount(); }
public void addProcess(final String processName, int id, final String authKey, final List<String> command, final Map<String, String> env, final String workingDirectory, final boolean isPrivileged, final boolean respawn) { for (String s : command) { if (s == null) { throw ProcessLogger.ROOT_LOGGER.nullCommandComponent(); } } synchronized (lock) { if (shutdown) { return; } final Map<String, ManagedProcess> processes = this.processes; if (processes.containsKey(processName)) { ProcessLogger.ROOT_LOGGER.duplicateProcessName(processName); // ignore return; } final ManagedProcess process = new ManagedProcess(processName, id, command, env, workingDirectory, lock, this, authKey, isPrivileged, respawn); processes.put(processName, process); processesByKey.put(new Key(authKey.getBytes(Charset.forName("US-ASCII"))), process); processAdded(processName); } }
processName = readUTFZBytes(dataStream); ProcessLogger.SERVER_LOGGER.tracef("Received send_stdin for process %s", processName); processController.sendStdin(processName, dataStream); } else { ProcessLogger.SERVER_LOGGER.tracef("Ignoring send_stdin message from untrusted source"); ProcessLogger.SERVER_LOGGER.tracef("Received add_process for process %s", processName); final String authKey = new String(authBytes, Charset.forName("US-ASCII")); processController.addProcess(processName, processId, authKey, Arrays.asList(command), env, workingDirectory, false, false); } else { ProcessLogger.SERVER_LOGGER.tracef("Ignoring add_process message from untrusted source"); operationType = ProcessMessageHandler.OperationType.START; processName = readUTFZBytes(dataStream); processController.startProcess(processName); ProcessLogger.SERVER_LOGGER.tracef("Received start_process for process %s", processName); } else { processController.stopProcess(processName); } else { ProcessLogger.SERVER_LOGGER.tracef("Ignoring stop_process message from untrusted source"); operationType = ProcessMessageHandler.OperationType.REMOVE; processName = readUTFZBytes(dataStream); processController.removeProcess(processName); } else { ProcessLogger.SERVER_LOGGER.tracef("Ignoring remove_process message from untrusted source"); if (isPrivileged) {
configuration.setReadExecutor(Executors.newCachedThreadPool(threadFactory)); final ProcessController processController = new ProcessController(configuration, System.out, System.err); final InetSocketAddress boundAddress = processController.getServer().getBoundAddress(); initialCommand.add("-D" + "jboss.home.dir=" + jbossHome); processController.addProcess(HOST_CONTROLLER_PROCESS_NAME, initialCommand, Collections.<String, String>emptyMap(), currentWorkingDir, true, true); processController.startProcess(HOST_CONTROLLER_PROCESS_NAME);
public void handleMessage(final Connection connection, final InputStream dataStream) throws IOException { final int cmd = readUnsignedByte(dataStream); if (cmd != Protocol.AUTH) { ProcessLogger.SERVER_LOGGER.receivedUnknownGreetingCode(Integer.valueOf(cmd), connection.getPeerAddress()); connection.close(); return; } final int version = StreamUtils.readUnsignedByte(dataStream); if (version < 1) { ProcessLogger.SERVER_LOGGER.receivedInvalidVersion(connection.getPeerAddress()); connection.close(); return; } final byte[] authCode = new byte[ProcessController.AUTH_BYTES_ENCODED_LENGTH]; StreamUtils.readFully(dataStream, authCode); final ManagedProcess process = processController.getServerByAuthCode(authCode); if (process == null) { ProcessLogger.SERVER_LOGGER.receivedUnknownCredentials(connection.getPeerAddress()); StreamUtils.safeClose(connection); return; } ProcessLogger.SERVER_LOGGER.tracef("Received authentic connection from %s", connection.getPeerAddress()); connection.setMessageHandler(new ConnectedMessageHandler(processController, process.isPrivileged())); processController.addManagedConnection(connection); dataStream.close(); // Reset the respawn count for the connecting process process.resetRespawnCount(); }
public void addProcess(final String processName, int id, final String authKey, final List<String> command, final Map<String, String> env, final String workingDirectory, final boolean isPrivileged, final boolean respawn) { for (String s : command) { if (s == null) { throw ProcessLogger.ROOT_LOGGER.nullCommandComponent(); } } synchronized (lock) { if (shutdown) { return; } final Map<String, ManagedProcess> processes = this.processes; if (processes.containsKey(processName)) { ProcessLogger.ROOT_LOGGER.duplicateProcessName(processName); // ignore return; } final ManagedProcess process = new ManagedProcess(processName, id, command, env, workingDirectory, lock, this, authKey, isPrivileged, respawn); processes.put(processName, process); processesByKey.put(new Key(authKey.getBytes(Charset.forName("US-ASCII"))), process); processAdded(processName); } }
process = builder.start(); } catch (IOException e) { processController.operationFailed(processName, ProcessMessageHandler.OperationType.START); log.failedToStartProcess(e,processName); return; final InputStream stderr = process.getErrorStream(); final InputStream stdout = process.getInputStream(); final Thread stderrThread = new Thread(new ReadTask(stderr, processController.getStderr())); stderrThread.setName(String.format("stderr for %s", processName)); stderrThread.start(); final Thread stdoutThread = new Thread(new ReadTask(stdout, processController.getStdout())); stdoutThread.setName(String.format("stdout for %s", processName)); stdoutThread.start(); processController.processStarted(processName); } else { processController.operationFailed(processName, ProcessMessageHandler.OperationType.START);
configuration.setReadExecutor(Executors.newCachedThreadPool(threadFactory)); final ProcessController processController = new ProcessController(configuration, System.out, System.err); final InetSocketAddress boundAddress = processController.getServer().getBoundAddress(); initialCommand.add("-D" + "jboss.home.dir=" + jbossHome); processController.addProcess(HOST_CONTROLLER_PROCESS_NAME, initialCommand, Collections.<String, String>emptyMap(), currentWorkingDir, true, true); processController.startProcess(HOST_CONTROLLER_PROCESS_NAME);
processController.processStopped(processName, endTime - startTime); state = State.DOWN; processController.removeProcess(processName); } else if (isPrivileged() && exitCode == ExitCodes.HOST_CONTROLLER_ABORT_EXIT_CODE) { if (processController.getOngoingProcessCount() > 1) { respawn = true; respawnCount = ManagedProcess.this.incrementAndGetRespawnCount(); processController.removeProcess(processName); new Thread(new Runnable() { public void run() { processController.removeProcess(processName); new Thread(new Runnable() { public void run() { respawn = true; respawnCount = ManagedProcess.this.incrementAndGetRespawnCount(); if (isPrivileged() && processController.getOngoingProcessCount() > 1) {
public void handleMessage(final Connection connection, final InputStream dataStream) throws IOException { final int cmd = readUnsignedByte(dataStream); if (cmd != Protocol.AUTH) { SERVER_LOGGER.receivedUnknownGreetingCode(Integer.valueOf(cmd), connection.getPeerAddress()); connection.close(); return; } final int version = StreamUtils.readUnsignedByte(dataStream); if (version < 1) { SERVER_LOGGER.receivedInvalidVersion(connection.getPeerAddress()); connection.close(); return; } final byte[] authCode = new byte[16]; StreamUtils.readFully(dataStream, authCode); final ManagedProcess process = processController.getServerByAuthCode(authCode); if (process == null) { SERVER_LOGGER.receivedUnknownCredentials(connection.getPeerAddress()); StreamUtils.safeClose(connection); return; } SERVER_LOGGER.tracef("Received authentic connection from %s", connection.getPeerAddress()); connection.setMessageHandler(new ConnectedMessageHandler(processController, process.isPrivileged())); processController.addManagedConnection(connection); dataStream.close(); // Reset the respawn count for the connecting process process.resetRespawnCount(); }
public void addProcess(final String processName, final List<String> command, final Map<String, String> env, final String workingDirectory, final boolean isPrivileged, final boolean respawn) { // Create a new authKey final byte[] authBytes = new byte[ProcessController.AUTH_BYTES_LENGTH]; new Random(new SecureRandom().nextLong()).nextBytes(authBytes); String authKey = Base64.getEncoder().encodeToString(authBytes); addProcess(processName, -1, authKey, command, env, workingDirectory, isPrivileged, respawn); }
public void addProcess(final String processName, final byte[] authKey, final List<String> command, final Map<String, String> env, final String workingDirectory, final boolean isPrivileged, final boolean respawn) { for (String s : command) { if (s == null) { throw MESSAGES.nullCommandComponent(); } } synchronized (lock) { if (shutdown) { return; } final Map<String, ManagedProcess> processes = this.processes; if (processes.containsKey(processName)) { ROOT_LOGGER.duplicateProcessName(processName); // ignore return; } final ManagedProcess process = new ManagedProcess(processName, command, env, workingDirectory, lock, this, authKey, isPrivileged, respawn); processes.put(processName, process); processesByKey.put(new Key(authKey), process); processAdded(processName); } }
process = builder.start(); } catch (IOException e) { processController.operationFailed(processName, ProcessMessageHandler.OperationType.START); log.failedToStartProcess(e,processName); return; final InputStream stderr = process.getErrorStream(); final InputStream stdout = process.getInputStream(); final Thread stderrThread = new Thread(new ReadTask(stderr, processController.getStderr())); stderrThread.setName(String.format("stderr for %s", processName)); stderrThread.start(); final Thread stdoutThread = new Thread(new ReadTask(stdout, processController.getStdout())); stdoutThread.setName(String.format("stdout for %s", processName)); stdoutThread.start(); processController.processStarted(processName); } else { processController.operationFailed(processName, ProcessMessageHandler.OperationType.START);
processController.processStopped(processName, endTime - startTime); state = State.DOWN; processController.removeProcess(processName); } else if (isPrivileged() && exitCode == ExitCodes.HOST_CONTROLLER_ABORT_EXIT_CODE) { if (processController.getOngoingProcessCount() > 1) { respawn = true; respawnCount = ManagedProcess.this.incrementAndGetRespawnCount(); processController.removeProcess(processName); new Thread(new Runnable() { public void run() { processController.removeProcess(processName); new Thread(new Runnable() { public void run() { respawn = true; respawnCount = ManagedProcess.this.incrementAndGetRespawnCount(); if (isPrivileged() && processController.getOngoingProcessCount() > 1) {