-// **********************************************************************
-// The Cheat - A universal game cheater for Mac OS X
-// (C) 2003-2005 Chaz McGarvey (BrokenZipper)
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 1, or (at your option)
-// any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-//
+/*
+ * The Cheat - The legendary universal game trainer for Mac OS X.
+ * http://www.brokenzipper.com/trac/wiki/TheCheat
+ *
+ * Copyright (c) 2003-2011, Charles McGarvey et al.
+ *
+ * Distributable under the terms and conditions of the 2-clause BSD
+ * license; see the file COPYING for the legal text of the license.
+ */
#import "AppController.h"
#import "HelpController.h"
#import "PreferenceController.h"
-// Privilage elevation libs
-#include <security/authorization.h>
-#include <security/authorizationdb.h>
-#include <security/authorizationtags.h>
-#include <sys/types.h>
-#include <unistd.h>
-
@implementation AppController
- (id)init
{
- if ( self = [super init] )
- {
- if( geteuid() != 0 )
- {
- [self launchAuthPrgm];
- [self setDelegate:self];
- }
+ if ( self = [super init] ) {
+ [self setDelegate:self];
}
- if( geteuid() != 0 )
- {
- NSRunAlertPanel(@"The Cheat must be run as root,",
- @"Due to a limitation of Leopard, the application needs elevated privileges to run.",
- @"Exit", nil, nil );
- [self terminate: 0];
- }
-
return self;
}
-- (int) preAuthorize
-{
- int err;
- AuthorizationFlags authFlags;
-
-
- NSLog (@"MyWindowController: preAuthorize");
-
- if (_authRef)
- return errAuthorizationSuccess;
-
- NSLog (@"MyWindowController: preAuthorize: ** calling AuthorizationCreate...**\n");
-
- authFlags = kAuthorizationFlagDefaults;
- err = AuthorizationCreate (NULL, kAuthorizationEmptyEnvironment, authFlags, &_authRef);
- if (err != errAuthorizationSuccess)
- return err;
-
- NSLog (@"MyWindowController: preAuthorize: ** calling AuthorizationCopyRights...**\n");
-
- _authItem.name = kAuthorizationRightExecute;
- _authItem.valueLength = 0;
- _authItem.value = NULL;
- _authItem.flags = 0;
- _authRights.count = 1;
- _authRights.items = (AuthorizationItem*) malloc (sizeof (_authItem));
- memcpy (&_authRights.items[0], &_authItem, sizeof (_authItem));
- authFlags = kAuthorizationFlagDefaults
- | kAuthorizationFlagExtendRights
- | kAuthorizationFlagInteractionAllowed
- | kAuthorizationFlagPreAuthorize;
- err = AuthorizationCopyRights (_authRef, &_authRights, kAuthorizationEmptyEnvironment, authFlags, NULL);
-
- return err;
-}
-
-- (int) launchAuthPrgm
-{
- AuthorizationFlags authFlags;
- int err;
-
- // path
- NSString * path = [[NSBundle mainBundle] executablePath];
- if (![[NSFileManager defaultManager] isExecutableFileAtPath: path])
- return -1;
-
- // auth
-
- if (!_authRef)
- {
- err = [self preAuthorize];
- if (err != errAuthorizationSuccess)
- return err;
- }
-
- // launch
-
- NSLog (@"MyWindowController: launchWithPath: ** calling AuthorizationExecuteWithPrivileges...**\n");
- authFlags = kAuthorizationFlagDefaults;
- err = AuthorizationExecuteWithPrivileges (_authRef, [path cString], authFlags, NULL, NULL);
- if(err==0) [NSApp terminate:self];
-
- return err;
-}
- (void)dealloc
{
[super dealloc];
}
-
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#pragma mark NSApplication Delegate
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
+ [NSApp activateIgnoringOtherApps:YES];
+
// check if this is the first launch
if ( ![[NSUserDefaults standardUserDefaults] boolForKey:TCFirstLaunchPref] ) {
// FIRST LAUNCH
ChazCheckForUpdate( TCUpdateCheckURL, NO );
}
- // automaticall start the cheat server if the pref is set
+ // automatically start the cheat server if the pref is set
if ( [[NSUserDefaults standardUserDefaults] boolForKey:TCRunServerPref] ) {
if ( ![self startCheatServer] ) {
// inform the user that the server won't start