| |
1 /* |
| |
2 * Copyright (c) 2004 Angelo Laub |
| |
3 * |
| |
4 * This program is free software; you can redistribute it and/or modify |
| |
5 * it under the terms of the GNU General Public License version 2 |
| |
6 * as published by the Free Software Foundation. |
| |
7 * |
| |
8 * This program is distributed in the hope that it will be useful, |
| |
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| |
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| |
11 * GNU General Public License for more details. |
| |
12 * |
| |
13 * You should have received a copy of the GNU General Public License |
| |
14 * along with this program (see the file COPYING included with this |
| |
15 * distribution); if not, write to the Free Software Foundation, Inc., |
| |
16 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| |
17 */ |
| |
18 |
| |
19 #include "installer.h" |
| |
20 |
| |
21 int main(int argc, char *argv[]) |
| |
22 { |
| |
23 NSAutoreleasePool *pool = [NSAutoreleasePool new]; |
| |
24 NSString *thisBundle = [[NSString stringWithUTF8String:argv[0]] stringByDeletingLastPathComponent]; |
| |
25 |
| |
26 NSString *tunPath = [thisBundle stringByAppendingPathComponent:@"/tun.kext"]; |
| |
27 NSString *tapPath = [thisBundle stringByAppendingPathComponent:@"/tap.kext"]; |
| |
28 |
| |
29 NSString *tunExecutable = [tunPath stringByAppendingPathComponent:@"/Contents/MacOS/tun"]; |
| |
30 NSString *tapExecutable = [tapPath stringByAppendingPathComponent:@"/Contents/MacOS/tap"]; |
| |
31 |
| |
32 NSString *helperPath = [thisBundle stringByAppendingPathComponent:@"/openvpnstart"]; |
| |
33 NSString *openvpnPath = [thisBundle stringByAppendingPathComponent:@"/openvpn"]; |
| |
34 |
| |
35 runTask( |
| |
36 @"/usr/sbin/chown", |
| |
37 [NSArray arrayWithObjects:@"-R",@"root:wheel",thisBundle,nil] |
| |
38 ); |
| |
39 |
| |
40 |
| |
41 runTask( |
| |
42 @"/bin/chmod", |
| |
43 [NSArray arrayWithObjects:@"-R",@"755",tunPath,tapPath,nil] |
| |
44 ); |
| |
45 |
| |
46 runTask( |
| |
47 @"/bin/chmod", |
| |
48 [NSArray arrayWithObjects:@"744", |
| |
49 tunExecutable, |
| |
50 tapExecutable, |
| |
51 helperPath, |
| |
52 openvpnPath, |
| |
53 nil] |
| |
54 ); |
| |
55 runTask( |
| |
56 @"/bin/chmod", |
| |
57 [NSArray arrayWithObjects:@"4111",helperPath,nil] |
| |
58 ); |
| |
59 [pool release]; |
| |
60 return 0; |
| |
61 } |
| |
62 |
| |
63 void runTask(NSString *launchPath,NSArray *arguments) |
| |
64 { |
| |
65 NSTask* task = [[[NSTask alloc] init] autorelease]; |
| |
66 [task setArguments:arguments]; |
| |
67 [task setLaunchPath:launchPath]; |
| |
68 |
| |
69 NS_DURING { |
| |
70 [task launch]; |
| |
71 } NS_HANDLER { |
| |
72 NSLog(@"Exception raised while executing helper %@: %@",launchPath, localException); |
| |
73 exit(EXIT_FAILURE); |
| |
74 } |
| |
75 NS_ENDHANDLER |
| |
76 [task waitUntilExit]; |
| |
77 } |