#import <Foundation/Foundation.h>
#define kProfilePath @"/System/Library/ServerSetup/UnConfigured/jabberProfile.plist"
#define kJabberXMLPath @"/private/etc/jabber/jabber.xml"
#define kJabberBackUpXMLPath @"/private/etc/jabber/jabber.xml.bak"
#define kShellPath @"/bin/sh"
#define kMarkArgTapPath @"/var/jabber/modules/proxy65/makeargtap"
#define kUserID 84 //jabber user
#define kUserIDString @"84"
#define kGroupID 84 //jabber group
#define kGroupIDString @"84"
NSString* getHostname();
NSString* getIpAddress();
NSDictionary* poaDict;
NSMutableString* xmlFile;
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
poaDict = [NSDictionary dictionaryWithContentsOfFile:kProfilePath];
xmlFile = [NSMutableString stringWithContentsOfFile:kJabberXMLPath];
NSString* hostname = getHostname();
//NSString* ipAddress = getIpAddress();
// exit if an error occured
if(!hostname) { return 1; }
//if(!ipAddress) { return 1; }
// modify the xml file
[xmlFile replaceOccurrencesOfString:@"localhost"
withString:hostname
options:nil
range:NSMakeRange(0,[xmlFile length])];
/*
[xmlFile replaceOccurrencesOfString:@"127.0.0.1"
withString:ipAddress
options:nil
range:NSMakeRange(0,[xmlFile length])];
[xmlFile replaceOccurrencesOfString:@"localloopback"
withString:@"127.0.0.1"
options:nil
range:NSMakeRange(0,[xmlFile length])];
*/
// append the number to the backup file, so we don't trash anything
int count = 1;
NSString* backupPath = kJabberBackUpXMLPath;
while([[NSFileManager defaultManager] fileExistsAtPath:backupPath]) {
backupPath = [NSString stringWithFormat:@" }
// make a copy for safekeeping
if(![[NSFileManager defaultManager] copyPath:kJabberXMLPath
toPath:backupPath
handler:nil]) {
NSLog(@"Error: Backup of return 1;
}
// write out the new file
if(![xmlFile writeToFile:kJabberXMLPath atomically:YES]) {
NSLog(@"Error: Writing of \" return 1;
}
// update the proxy65.tap file
NSArray* tapArgs = [NSArray arrayWithObjects:kMarkArgTapPath, hostname, @"secret", @"127.0.0.1", @"51234", hostname, @"7777", kUserIDString, kGroupIDString, nil];
[NSTask launchedTaskWithLaunchPath:kShellPath
arguments:tapArgs];
// chown the files to jabber user/group
if(chown([kJabberXMLPath cString], kUserID, kGroupID))
NSLog(@"Error: Chown of \" if(chown([backupPath cString], kUserID, kGroupID))
NSLog(@"Error: Chown of \"
[pool release];
return 0;
}
NSString* getHostname() {
NSString* host = [poaDict objectForKey:@"HostName"];
if(![host length]) {
NSLog(@"Error: No hostname found");
return nil;
}
return host;
}
NSString* getIpAddress() {
NSString* addr = nil;
NSArray* interfaces = [poaDict objectForKey:@"NetworkInterfaces"];
if([interfaces count] == 0) {
NSLog(@"Error: No interfaces found");
return nil;
}
NSDictionary* defaultInterface = [interfaces objectAtIndex:0];
NSDictionary* settings = [defaultInterface objectForKey:@"Settings"];
addr = [settings objectForKey:@"IPAddress"];
return addr;
}