X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fthecheat;a=blobdiff_plain;f=main.m;h=a984ac26dadd4cd138b9e3e182adc88a8ac34b66;hp=7075d5dff800dfcd9b569558a32c3f2185b07d99;hb=HEAD;hpb=ad02580588e2ca41f15ba8f9bd084561d8d485c2 diff --git a/main.m b/main.m index 7075d5d..a984ac2 100644 --- a/main.m +++ b/main.m @@ -1,29 +1,28 @@ -// ********************************************************************** -// 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 #import #import #import #include "ChazLog.h" +#include +#include +#include + +/* + * I think this function was ripped from the iHaxGamez project, so it + * remains licensed under the GPL. + */ void authMe(char * FullPathToMe) { // get authorization as root @@ -74,13 +73,29 @@ void authMe(char * FullPathToMe) } } +/* + * I think this function was ripped from the iHaxGamez project, so it + * remains licensed under the GPL. + */ +bool checkExecutablePermissions(void) +{ + NSDictionary *applicationAttributes = [[NSFileManager defaultManager] fileAttributesAtPath:[[NSBundle mainBundle] executablePath] traverseLink: YES]; + + // We expect 2755 as octal (1517 as decimal, -rwxr-sr-x as extended notation) + return ([applicationAttributes filePosixPermissions] == 1517 && [[applicationAttributes fileGroupOwnerAccountName] isEqualToString: @"procmod"]); +} + +/* + * I think this function was ripped from the iHaxGamez project, so it + * remains licensed under the GPL. + */ bool amIWorthy(void) { // running as root? AuthorizationRef myAuthRef; OSStatus stat = AuthorizationCopyPrivilegedReference(&myAuthRef,kAuthorizationFlagDefaults); - return stat == errAuthorizationSuccess; + return stat == errAuthorizationSuccess || checkExecutablePermissions(); } int main( int argc, char *argv[] ) @@ -92,20 +107,33 @@ int main( int argc, char *argv[] ) ChazDebugSetup(); ChazMapLogToDebug(); - [pool release]; +#ifdef __ppc__ + // PPC machines whose operating system is below leopard do not need authorization + SInt32 osxMajorVersion; + Gestalt(gestaltSystemVersionMinor, &osxMajorVersion); + if (osxMajorVersion < 5) + { + [pool release]; + return NSApplicationMain(argc, (const char **) argv); + } +#endif if (amIWorthy()) { - printf("Don't forget to flush! ;-) "); // signal back to close caller +#ifndef _DEBUG + printf("Don't forget to flush! ;-) "); // signal back to close caller +#endif fflush(stdout); + [pool release]; return NSApplicationMain(argc, (const char **) argv); } else { authMe(argv[0]); + [pool release]; return 0; } ChazDebugCleanup(); -} \ No newline at end of file +}