2012-11-29 3 views
9

Blick durch Äpfel BetterAuthorizationSample und weitere Derivate (http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/) ich eine kleine Änderung an die Anwendung zu machen versuchen und eine besseres Verständnis der gesamten Sicherheits & Servicemanagement Rahmen zu gewinnen .. Deshalb ging ich zu Fügen Sie eine a-Schaltfläche hinzu, die den installierten Job durch die Umkehrung von SMJobBless - SMJobRemove() entfernt. Unkompliziert jedoch zeigt der AuthorizationCreate() - Aufruf ein Dialogfeld an, in dem die Berechtigung zum Installieren und Entfernen eines Helfers angegeben und angefordert wird.Änderungsberechtigung Dialog von AuthorizationCreate gezeigt()

Das ist der Dialog, den ich bekomme (mit kSMRightModifySystemDaemons). Wie Sie sehen können, versucht meine App, ein neues Hilfsprogramm hinzuzufügen. Das verwirrt meine Benutzer, weil die App versucht, das installierte Hilfsprogramm zu entfernen.

enter image description here

Ich suche Wissen zu finden, wie dieser Dialog geändert wird meine eigentliche Aktion (Job Removal) zu reflektieren, gibt es auch einige andere Anwendungen, die den Dialog vollständig anpassen scheinen - ihre eigenen zeigen Label und Buttons ..

BOOL doRemoveSystemTool(NSString* label, NSError** error) 
{ 
BOOL result = NO; 

AuthorizationItem authItem  = { kSMRightModifySystemDaemons, 0, NULL, 0 }; 
AuthorizationRights authRights = { 1, &authItem }; 
AuthorizationFlags flags  = kAuthorizationFlagDefaults    | 
kAuthorizationFlagInteractionAllowed | 
kAuthorizationFlagPreAuthorize   | 
kAuthorizationFlagExtendRights; 

AuthorizationRef authRef = NULL; 
//Obtain authorization 
OSStatus status = AuthorizationCreate(&authRights, kAuthorizationEmptyEnvironment, flags, &authRef); 
if (status != errAuthorizationSuccess) 
{ 
    NSLog(@"Failed to create AuthorizationRef, return code %ld", (long)status); 
} else 
{ 
    //We have authorization so proceed with removing the Job via SMJobRemove 
    result = SMJobRemove(kSMDomainSystemLaunchd, (CFStringRef)label, authRef, YES, (CFErrorRef *)error); 
} 
AuthorizationFree(authRef, kAuthorizationFlagDefaults); 
return result; 
} 

ich mit der authItem Wechsel zu kSMRightModifySystemDaemons von kSMRightBlessPrivilegedHelper experimentiert haben, aber all dies tat, war, den Dialog ändern ‚hinzufügen‘ angezeigt statt ‚Installieren‘

Würde mich sehr freuen hier etwas Hilfe ...

+1

Lösung ist die Verwendung von AuthorizationRightSet(), um eine neue rechte Gruppe zu erstellen, in der der letzte Parameter (localeTableName) die Standard-Eingabeaufforderung angibt, immer noch unsicher, wie genau es den Standardschaltflächentext, aber mindestens die abholen Label kann leicht geändert werden – DavidMIRV

+0

Wenn Sie erklären könnten, wie ich 'AuthorizationRightSet()' verwende, um mehr Sinn in den Dialog zu geben, würde ich gerne das Kopfgeld vergeben ;-) –

+0

Apple haben ein Beispiel hier: https://developer.apple.com /library/mac/technotes/tn2095/_index.html#//apple_ref/doc/uid/DTS10003110-CH1-SECTION7. Programmgesteuertes Hinzufügen von Rechten "Wenn Sie AuthorizationRightSet mit einem nicht-NULL-descriptionKey aufrufen, iteriert es über jede Lokalisierung im Paket. Für jede Lokalisierung sucht es nach der entsprechenden Lokalisierungstabellendatei und sucht dann den Beschreibungsschlüssel in dieser Tabelle fügt die resultierende Zeichenkette dem Default-Prompt-Dictionary in der richtigen Spezifikation hinzu. " – markhunte

Antwort

0

Ich habe dies nicht schon verwendet, aber Ihre Frage interessant gefunden, so habe ich ein wenig lesen von Apple-Dokumentation und darauf basierend, ob die Einrichtung der Umgebung mit einer kAuthorizationEnvironmentPrompt würde tun was du willst?

From AuthorizationTags.h: 
    The name of the AuthorizationItem that should be passed into the environment 
when specifying a invocation specific additional text. The value should be a 
localized UTF8 string. 

Sie würden eine AuthorizationItem mit diesem erstellen und dann einer AuthorizationItemSet enthält das, und dann für die environment: Parameter, um den Satz in den AuthorizationCreate Aufruf übergeben.

Ich würde das versuchen.

Die andere Idee, die ich beim Lesen der Dokumentation hatte, war ein Befehlszeilenprogramm, das das Entfernen und Autorisieren der Ausführung des Befehlszeilentools ("SomethingSomethingHelper") ausführt, das für den Benutzer weniger verwirrend sein kann (also AuthorizationExecuteWithPrivileges oder kAuthorizationRightExecute oder was auch immer).

+1

AuthorizationExecuteWithPrivileges = veraltet –

+0

das ist ein Hinweis, aber keine Antwort IMO –

+0

@ Daij-Djan Ich glaube nicht an Löffelfütterung Antworten. Geben Sie genügend Anweisungen, um jemanden auf eigene Faust voranzubringen, und sie werden mehr lernen. Ich glaube, das gibt möglicherweise die Antwort, ich hatte einfach keine Zeit, um die Test-App zu schreiben. – Dad