Running a Unix command as "root" with NSTask

Hi,
I'm new to objective-C and Cocoa programming. I already know C and C++ (from classes I had in Uni.) but this one goes farther than what I've seen. Stricltly for learning purposes, I'd like to make a three button window where you click on a button and it launches /etc/daily and the two other cron tasks. But, in order to launch those commands, you need to use sudo. I guess wrapping a Unix command in a Cocoa application uses NSTask, but how do you get the app to run with root access?
Any help will be appreciated
iBook G4 (12)   Mac OS X (10.4.8)  

How about launching Terminal with a script that calls
sudo? sudo will query the controllying TTY
(Terminal) for the user's (which had better be an
admin user) password.
There should be no way to do this without requiring
admin authentication, preferably interactive. If
there were, it would be a privilege escalation
vulnerability in OS X...
That is exactly what I am looking for: I'd like my application the ask for administrator privileges before running the Unix scripts.
iBook G4 (12")   Mac OS X (10.4.8)  
iBook G4 (12")   Mac OS X (10.4.8)  

Similar Messages

  • How to run piped Unix commands

    Hi,
    I'm trying to run piped Unix commands using Runtime.getRuntime().exec(...) but apparently the pipe symbol ("|") doesn't seem to work...
    Here is basically what I'm trying to do: running "command1 | command2" where both "command1" and "command2" have dynamic values. I could create a shell script and execute it through Java but there has to be a cleaner way...
    Can anyone help me with this?
    Thanks,
    Thierry

    The | symbol for a pipe is understood by a shell, so it was right to point to this direction.
    If you still have a problem, that might be because of another reason. What did happen, how exactly� did it not work? Did you take care of the stdin and stdout channels of the launched process?

  • How do I run a unix command to quit ARD if it is running on a remote server I am trying to access?

    how do I run a unix command to quit ARD if it is running on a remote server I am trying to access?

    killall "Remote Desktop"
    Regards.

  • How to run a unix command in java

    Hi all,
    I need to run a unix command in my standalone java application.my java program is in windows.Is it possible to run unix command on windows system.help me out.
    I tried this
    Process p = Runtime.getRuntime().exec("ps -ef");
                BufferedReader stdInput = new BufferedReader(new
                     InputStreamReader(p.getInputStream()));
                BufferedReader stdError = new BufferedReader(new
                     InputStreamReader(p.getErrorStream()));i get IO Exception -Create Process ps-ef error=2

    If you want to run a command from java for a windows platform, you should check windows knows the command.
    So, load up a DOS prompt and type ps -ef and see what happens.

  • Having trouble in running a unix command and getting the output

    Hi,
    I am trying to run a unix command from within the java code. I am not able to make it work. I am enclosing the code and the error message that I am getting. Any help is highly appreciated.
    import java.io.*;
    public class RunCommand {
        public static void main(String args[]) {
            String s = null;
            try {
                Process p = Runtime.getRuntime().exec("cat UNIX_ASCII_TEXT_FILE | A_UNIX_PROGRAM -d");
                BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
                BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
                // read the output from the command
                System.out.println("Here is the standard output of the command:\n");
                while ((s = stdInput.readLine()) != null) {
                    System.out.println(s);
                // read any errors from the attempted command
                System.out.println("Here is the standard error of the command (if any):\n");
                while ((s = stdError.readLine()) != null) {
                    System.out.println(s);
                System.exit(0);
            catch (IOException e) {
                System.out.println("exception happened - here's what I know: ");
                e.printStackTrace();
                System.exit(-1);
    }The error message that I am getting is
    Here is the standard output of the command:
    SLu|%%$$=
    Here is the standard error of the command (if any):
    cat: cannot open |
    cat: cannot open A_UNIX_PROGRAM
    cat: cannot open -dLooks like the cat command is working and not the pipe command and the command after the pipe. But when I run the UNIX command from the command prompt I get the expected result.

    You might read this article and see if its approach works.
    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

  • Run multiple unix commands from ODI procedure

    I want to run a series of unix commands from ODI procedure. I dont want to use Unix shell scripts. (I know that works).I am just trying to place the contents of the shell scripts in ODI procedure with Operating system as technology. But I am unable to execute the proecedure.
    For example below is a very small 3 line commands I would execute
    filename="/var/test.txt"
    ls -l $filename > /var/anotherfile.txt
    chmod 777 $filename
    I am not sure if there is any specific syntax that I have to follow for executing unix commands. Also I dont want to write a Jython and use os.system command as well.
    Appreciate any help on this

    First your original question... You can put more than one DOS command on a single line, simply separate each command with an ampersand (&). For example:
    mkdir c:\abc & cd abc & dir*
    Regarding your concerns about performance, well that would depend on exactly what you mean. Using CLIENT_HOST (or HOST on the server) simply opens a shell (DOS in this case) then passes your command to it. The performance of performing this action really isn't measurable. Basically you are just pressing a button and you should get a near immediate action. As for the performance of executing each command, that has nothing to do with Forms. Once the command is passed to the shell, the rest is a function of the shell and whatever command you passed.
    Having said that, if you were to write something sloppy like a loop (in pl/sql) which called CLIENT_HOST lots of times repeatedly, then yes there would be a performance problem because the pushing of the button will cause an exchange to and from the server and each cycle in the loop will do the same.
    So the answer to how performance is impacted will depend on what exactly you need to accomplish. If it is a single call to CLIENT_HOST, this should be fine.

  • Send UNIX command as root

    So I read in this thread  how to send a UNIX command via ARD as root.
    My question is why does ARD allow you to use root without entering a password?

    Because you're already authenticated to the client workstation as an administrator user.

  • Run a cmd command in LabVIEW with parameters

    I have an executable program, for example myprogram.exe, located in "C:\Documents and Settings\myname\myprogram.exe" (I use windows xp 32 bit)
    When I run the program (by running cmd and type "myprogram.exe > to_text.txt" on the command line), the program will print out the result to that text file.
    But when I try to run the whole thing on LabVIEW, I can't manage to do so. LabVIEW only supports using the "Run Command" of Windows, not the cmd. (using the SystemExec vi)
    So how can I run "myprogram.txt > to_text.txt" on LabVIEW as I run it in cmd? Moreover, how can I send the break event (by pressing Ctrl+C in the cmd) by LabVIEW to stop the program?
    With my appreciations!

    I made this a while ago and haven't tested it too much but it should do what you want.  Provide the application path, then the switches in the array.  It does work with built in commands like dir and copy.
    Unofficial Forum Rules and Guidelines - Hooovahh - LabVIEW Overlord
    If 10 out of 10 experts in any field say something is bad, you should probably take their opinion seriously.
    Attachments:
    Execute Command Line With Switches.vi ‏24 KB

  • Running multiple unix commands form java

    hi i have a probelm when i am trying to run more than one command from java:
    i want to run it by using bin/ksh -c (this will take the first arg so i have probelm with runnig commad like" less abc.txt)
    commands to be run:
    1- ll -tr
    2-mkdir x
    3-less abc.txt
    Runtime rt = Runtime.getRuntime();
    Process pr = rt.exec("/bin/ksh -c ll;pwd;less abc.txt");
    which commands i am allowing to run form the java and how can i make it
    best regrdas
    Thanks in advance.

    eddie100 wrote:
    hi i have a probelm when i am trying to run more than one command from java:
    i want to run it by using bin/ksh -c (this will take the first arg so i have probelm with runnig commad like" less abc.txt)
    commands to be run:
    1- ll -tr
    2-mkdir x
    3-less abc.txt
    Runtime rt = Runtime.getRuntime();
    Process pr = rt.exec("/bin/ksh -c ll;pwd;less abc.txt");
    which commands i am allowing to run form the java and how can i make it
    best regrdas
    Thanks in advance.put your commands in a shell script and then call the script from java ...
    import java.io.*;
    class Runner {
            public static void main(String[] argv) throws Throwable {
                    Process p = Runtime.getRuntime().exec("/export/home/caleb/c_code/t.sh");
                    BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
                    String line;
                    while( (line=br.readLine()) != null ) System.out.println(line);
    }

  • Running Unix command through Java

    Hi
    I am trying to run the unix command "rf filename" through Java and it doesnt seem to work.
    Can anyone help in this case please
    String cm = "rm ";
    String delFile =  args[0];        // this path is /data/temp/filename.doc
    Process p = Runtime.getRuntime.exec(cmd +delFile);Also since i dont have access to delete the file through my login i always login as root for a few commands.
    Is there a way i can specify user name & password & then run the command?
    Please let me know
    Thanx

    Please discard the above msg i got a solution by just adding file.delete
    thanx

  • Run Unix command from windows

    I would like to run a unix command and capture the output by running a java program on a windows 98 machine, this will be ran on a secure intranet. What is the best way to do that. If anyone knows of an example source code that would be great.
    thanks,
    Dean

    Try this. It always works for me.
    import java.io.*;
    public class Exec {
        private BufferedReader out;
        private Process p;
        public Exec(String cmd) throws IOException {
            p = Runtime.getRuntime().exec(cmd);
            out = new BufferedReader(new InputStreamReader(p.getInputStream()));
        public BufferedReader getBufferedReader() {
            return out;
        public void waitFor() throws InterruptedException {
            p.waitFor();
        public static void main(String [] args) throws IOException,
                InterruptedException {
            final Exec p = new Exec("your command goes here.");
            new Thread(new Runnable() {
                public void run() {
                    try {
                        String s = null;
                        while((s = p.getBufferedReader().readLine()) != null) {
                            System.out.println(s);
                    catch(IOException io){}
            }).start();
            p.waitFor();
    }

  • Looking to run unix command line from Finder

    I want to run a unix command directly from finder. Kind of like using command-G to "Go To Folder".
    If a current method isn't supported, I noticed that Terminal.app has a shortcut for "New Command" using command-N. What would be the right way to create a keyboard shortcut in Finder that would call Terminal->New Command?
    Thanks

    You might use a third-party macro expansion utility that permits creating keyboard macro shortcuts. Examples include QuicKey or iKey. There are also several text expansion utilities that also allow attaching keyboard shortcuts such as TextExpander or Typinator. The above can be found at VersionTracker or MacUpdate.
    You can also create an AppleScript using the Do Shell Script command. The resulting compiled script can be attached to an Automator action. I don't know if you can attach a keyboard shortcut but you can add an Automator action to the Services menu and to the Finder's contextual menu.

  • Help with Servlet and Unix Commands

    Hello,
    I want to write a Java Servlet that runs some Unix commands on the system..
    Any guidelines? A really small and simple java servlet example that runs "ls -la" for example and outputs the results would be great...
    Any help would be greatly appreciated :)
    Thanks in advance

    You'll want to use Runtime.exec() to run Unix commands.
    Why can't you just get this out of java.io.File.listFiles()? What's ls really doing for you here?
    If you insist on using Runtime.exec(), you'll want to read this:
    http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
    MOD

  • Send Unix command won't work under 10.2.8

    So I am running this command in a lab of 10.2.8 machines. I go to send Unix Command then I put this in:
    Send Unix Command
    user: root
    osascript -e 'tell application "System Events" to keystroke "map"'; \
    osascript -e 'tell application "System Events" to keystroke tab'; \
    osascript -e 'tell application "System Events" to delay 0.5'; \
    osascript -e 'tell application "System Events" to keystroke "map"'; \
    osascript -e 'tell application "System Events" to delay 0.5'; \
    osascript -e 'tell application "System Events" to keystroke return'
    Then I check Display all output.
    Then I check Run command as User: Root
    Then I send it.
    After that in the Display all output shows me this.
    cms132-30 (64.8.180.103)
    /bin/bash: Send: command not found
    /bin/bash: user:: command not found
    execution error: System Events got an error: NSCannotCreateScriptCommandError (10)
    execution error: System Events got an error: NSCannotCreateScriptCommandError (10)
    execution error: System Events got an error: NSCannotCreateScriptCommandError (10)
    execution error: System Events got an error: NSCannotCreateScriptCommandError (10)
    So I close that window and see an error message by that machine that says:
    Error: 1 "execution error: system events got an error: NSCannotCreateScriptCommandError (10)"
    So what is wrong with this? It works fine with 10.3.9 but not with 10.2.8
    Imac   Mac OS X (10.2.x)  

    It doesn't appear that the System Events under 10.2.x responds to the keystroke command (it doesn't appear in the AppleScript Dictionary.)

  • Using ARD to send UNIX command to add item to dock

    The ARD 3 Admin Guide, page 132, says the following command sequence will install an item in the dock of the target computer(s):
    4) Type or paste the following UNIX command (replace /PathToApplication with your own path to the desired application, and be sure to include the application file extension, .app):
    defaults write com.apple.dock persistent-apps -array-add '<dict><key>tiledata</
    key><dict><key>file-data</key>
    <dict><key>CFURLString</key><string>/Path_ToApplication
    </string><key>_CFURLStringType</key><integer>0</integer></dict>
    </dict></dict>';killall -HUP Dock
    Use “persistent-others” instead of “persistent-apps” if the item is anything other than an application.
    I am unable to make it work. Could anyone help with the correct syntax or suggestions as to how to perform a remote addition to the target computer dock.

    Do you have JSS? I ask because your script contains the word JAMF allot.. if you do have a jss, is there a reason your trying to use ARD instead of your JSS to run this script?
    When issuing the script from ARD as a send unix command, Have you cosnidered using the option to run command as user "root" ?
    are you sure you want to do this? the script look like it dose more then just disable the isite. And do you know how to undo this if you change your mind?

Maybe you are looking for