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.
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 ...
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
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 ;-) –
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