All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.vnetpublishing.java.suapp.mac.MacSudo Maven / Gradle / Ivy

There is a newer version: 0.0.5
Show newest version
package com.vnetpublishing.java.suapp.mac;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.management.ManagementFactory;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.vnetpublishing.java.suapp.ISudo;

public class MacSudo implements ISudo {

	public static String escapeParam(String param) 
	{
		String parts[] = param.split("\\s+");
		if (parts.length < 2) {
			return param;
		}
		
		return String.format(
			"\"%s\"",
			param.replaceAll("\\", "\\\\\\\\").replaceAll("\"", "\\\\\\\"")
		);
	}
	
	private static String toParams(String[] params) 
	{
		StringBuilder sb = new StringBuilder();
		if (params.length > 0) {
			sb.append(params[0]);
		}
		for(int idx=1;idx cargs = new ArrayList(args.length+1);
    	
    	cargs.add(command);
    	for(int idx=0;idx pargs = new ArrayList(3);
    	
    	pargs.add("/usr/bin/osascript");
    	pargs.add("-e");
    	pargs.add(String.format("do shell script \"%s\" with administrator privileges",toParams(cargs.toArray(new String[cargs.size()]))));
    	
    	try {
    		ProcessBuilder builder = new ProcessBuilder(pargs);
    		
    		builder.inheritIO();
    		
    		Process p1 = builder.start();
    		
    		p1.waitFor();
    		
			return p1.exitValue();
		} catch (IOException ex) {
			throw new IllegalStateException(ex);
		} catch (InterruptedException ex) {
			throw new IllegalStateException(ex);
		}
    }
    
	public int sudo(String[] args) {
		try {
			String jarPath = MacSudo.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        	String decodedPath = URLDecoder.decode(jarPath, "UTF-8");
        
        	ArrayList pargs = new ArrayList(args.length + 2);
        
        	String jcmd = System.getProperty("sun.java.command");
        	
        	
			if (jcmd == null || jcmd.length() < 1) {
				if (decodedPath.endsWith(".jar")) {
					pargs.add("-jar");
					pargs.add(decodedPath);
					
					if (args != null) {
						for(int idx=0;idx inputArguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
				
				Iterator iap = inputArguments.iterator();
				while(iap.hasNext()) {
					pargs.add(iap.next());
				}
				
				String[] cmd = jcmd.split("\\s+");
				
				if (cmd.length > 0 && cmd[0].endsWith(".jar")) {
					pargs.add("-jar");
				}
				
				for(int idx=0;idx




© 2015 - 2025 Weber Informatics LLC | Privacy Policy