95 lines
3.0 KiB
Diff
95 lines
3.0 KiB
Diff
From a5b0caf63837acfd876ee15e3823fbfdf5685432 Mon Sep 17 00:00:00 2001
|
|
From: Dinesh Prasanth M K <dmoluguw@redhat.com>
|
|
Date: Wed, 30 Jan 2019 12:31:29 -0500
|
|
Subject: [PATCH] Add exec method to execute shell commands with input
|
|
|
|
- This is an effort to move duplicate code from PKI code
|
|
base to JSS code base
|
|
|
|
- This chunk of code was originally introduced in PKI
|
|
code: https://github.com/dogtagpki/pki/pull/131
|
|
|
|
- This PR is a joined effort of:
|
|
https://github.com/dogtagpki/pki/pull/122
|
|
|
|
Signed-off-by: Dinesh Prasanth M K <dmoluguw@redhat.com>
|
|
---
|
|
.../jss/netscape/security/util/Utils.java | 57 +++++++++++++++++++
|
|
1 file changed, 57 insertions(+)
|
|
|
|
diff --git a/org/mozilla/jss/netscape/security/util/Utils.java b/org/mozilla/jss/netscape/security/util/Utils.java
|
|
index b1a3c341..b45381ae 100644
|
|
--- a/org/mozilla/jss/netscape/security/util/Utils.java
|
|
+++ b/org/mozilla/jss/netscape/security/util/Utils.java
|
|
@@ -25,6 +25,7 @@
|
|
import java.io.FileWriter;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
+import java.io.InputStreamReader;
|
|
import java.io.OutputStream;
|
|
import java.io.OutputStreamWriter;
|
|
import java.io.PrintWriter;
|
|
@@ -96,6 +97,62 @@ public static boolean exec(String cmd) {
|
|
return false;
|
|
}
|
|
|
|
+ public static String readFromStream(InputStream inputStream) throws IOException {
|
|
+ StringBuilder sb = new StringBuilder();
|
|
+ BufferedReader br = null;
|
|
+ try {
|
|
+ br = new BufferedReader(new InputStreamReader(inputStream));
|
|
+ String line = null;
|
|
+ while ((line = br.readLine()) != null) {
|
|
+ sb.append(line + System.getProperty("line.separator"));
|
|
+ }
|
|
+ } finally {
|
|
+ br.close();
|
|
+ }
|
|
+ return sb.toString().trim();
|
|
+ }
|
|
+
|
|
+ public static void writeToStream(OutputStream outputStream, String input) throws IOException {
|
|
+ BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
|
|
+ writer.write(input);
|
|
+ writer.flush();
|
|
+ writer.close();
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Utility method to execute system commands
|
|
+ *
|
|
+ * @param cmd The command to be executed and its arguments
|
|
+ * @param input The stdin input to be passed to the cmd
|
|
+ * @return stdout or stderr of the command executed
|
|
+ * @throws IOException
|
|
+ * @throws InterruptedException
|
|
+ */
|
|
+ public static String exec(String[] cmd, String input) throws IOException, InterruptedException {
|
|
+
|
|
+ ProcessBuilder pb = new ProcessBuilder(cmd);
|
|
+
|
|
+ Process p = pb.start();
|
|
+
|
|
+ if (input != null) {
|
|
+ writeToStream(p.getOutputStream(), input);
|
|
+ }
|
|
+
|
|
+ p.waitFor();
|
|
+
|
|
+ String output;
|
|
+ if (p.exitValue() == 0) {
|
|
+ output = readFromStream(p.getInputStream());
|
|
+ } else {
|
|
+ output = readFromStream(p.getErrorStream());
|
|
+ }
|
|
+ p.destroy();
|
|
+
|
|
+ return output;
|
|
+ }
|
|
+
|
|
+
|
|
+
|
|
public static String SpecialURLDecode(String s) {
|
|
if (s == null)
|
|
return null;
|