OSX Preference Pane Source Import
[openafs.git] / src / platform / DARWIN / AFSPreference / TaskUtil.m
1 //
2 //  TaskUtil.m
3 //  AFSCommander
4 //
5 //  Created by Claudio Bisegni on 25/06/07.
6 //  Copyright 2007 INFN - National Institute of Nuclear Physics. All rights reserved.
7 //
8
9 #import "TaskUtil.h"
10
11
12 @implementation TaskUtil
13
14 // -------------------------------------------------------------------------------
15 //  executeTaskSearchingPath:
16 // -------------------------------------------------------------------------------
17 +(NSString*) executeTaskSearchingPath:(NSString*)unixCommand args:(NSArray*)args
18 {
19         NSString *commResult = nil;
20         NSString *commPath = [self searchExecutablePath:unixCommand];
21         if(commPath != nil){
22                 commResult = [self executeTask:commPath
23                                                    arguments:args];
24         }
25         return commResult;      
26 }
27
28 // -------------------------------------------------------------------------------
29 //  executeTask:
30 // -------------------------------------------------------------------------------
31 +(NSString*) searchExecutablePath:(NSString*)unixCommand
32 {
33         NSString *commPath = [self executeTask:@"/usr/bin/which" arguments:[NSArray arrayWithObjects:unixCommand, nil]];
34         return commPath;        
35 }
36
37 // -------------------------------------------------------------------------------
38 //  executeTask:
39 // -------------------------------------------------------------------------------
40 +(NSString*) executeTask:(NSString*) taskName arguments:(NSArray *)args{
41         NSLog(taskName);
42         NSString *result = nil;
43         int status = 0;
44         NSFileHandle *file = nil;
45         NSDictionary *environment =  [NSDictionary dictionaryWithObjectsAndKeys: @"$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin",@"PATH",nil];
46                 
47         NSPipe *pipe = [NSPipe pipe];
48         NSTask *taskToRun  = [[NSTask alloc] init];
49         
50         [taskToRun setLaunchPath: taskName];
51         [taskToRun setArguments: args];
52         [taskToRun setEnvironment:environment];
53         [taskToRun setStandardOutput: pipe];
54         file = [pipe fileHandleForReading];
55         [taskToRun launch];
56         [taskToRun waitUntilExit];
57         status = [taskToRun terminationStatus];
58         if (status == 0){
59                 NSLog(@"Task succeeded.");
60                 NSData *data = [file readDataToEndOfFile];
61                 // remove the \n character from unix command
62                 if([data length] > 0){
63                         NSData *realData = [NSData dataWithBytes:[data bytes] 
64                                                                                           length:[data length]-1];
65                 
66                         [taskToRun release];
67                         result = [[NSString alloc] initWithData: realData 
68                                                                                    encoding: NSUTF8StringEncoding];
69                         NSLog(result);
70                 }
71         } else {
72                 NSLog(@"Task failed.");
73         }
74         return [result autorelease];
75 }
76
77
78 // -------------------------------------------------------------------------------
79 //  executeTask:
80 // -------------------------------------------------------------------------------
81 +(int) executeTaskWithAuth:(NSString*) taskName arguments:(NSArray *)args authExtForm:(NSData*)auth {
82         NSLog(taskName);
83         NSString *result = nil;
84         int status = 0;
85         NSFileHandle *file = nil;
86         NSDictionary *environment =  [NSDictionary dictionaryWithObjectsAndKeys: @"$PATH:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin",@"PATH",nil];
87         
88         NSPipe *pipe = [NSPipe pipe];
89         NSPipe *pipeIn = [NSPipe pipe];
90         NSTask *taskToRun  = [[NSTask alloc] init];
91         
92         [taskToRun setLaunchPath: taskName];
93         [taskToRun setArguments: args];
94         [taskToRun setEnvironment:environment];
95         [taskToRun setStandardOutput: pipe];
96         [taskToRun setStandardInput: pipeIn];
97         file = [pipe fileHandleForReading];
98         //Write to standard in
99         [taskToRun launch];
100         
101         NSFileHandle* taskInput = [[ taskToRun standardInput ] fileHandleForWriting ];
102         [taskInput writeData:auth];
103         [taskToRun waitUntilExit];
104         status = [taskToRun terminationStatus];
105         if (status == 0){
106                 NSLog(@"Task succeeded.");
107                 NSData *data = [file readDataToEndOfFile];
108                 // remove the \n character from unix command
109                 if([data length] > 0){
110                         NSData *realData = [NSData dataWithBytes:[data bytes] 
111                                                                                           length:[data length]-1];
112                         
113                         [taskToRun release];
114                         result = [[NSString alloc] initWithData: realData 
115                                                                                    encoding: NSUTF8StringEncoding];
116                         NSLog(result);
117                         [result release];
118                 }
119         } else {
120                 NSLog(@"Task failed.");
121         }
122         
123         return status;
124 }
125
126 @end