2012-11-29 26 views
9

सेब BetterAuthorizationSample और आगे संजात (http://www.stevestreeting.com/2011/11/25/escalating-privileges-on-mac-os-x-securely-and-without-using-deprecated-methods/) मैं आवेदन करने के लिए एक छोटा सा परिवर्तन करना और पूरे सुरक्षा & ServiceManagement ढांचे की बेहतर समझ हासिल करने के लिए कोशिश कर रहा हूँ के माध्यम से देख रहे हैं .. इसलिए मैं के लिए रवाना हुए एक बटन जोड़ें जो SMJobBless - SMJobRemove() के विपरीत के माध्यम से स्थापित नौकरी को हटा देता है। सरल लेकिन हालांकि AuthorizationCreate() कॉल एक संवाद प्रदर्शित करता है जो एक सहायक स्थापित करने की अनुमति देता है और अनुरोध करता है और उसे हटा नहीं देता है।बदलें प्राधिकरण संवाद AuthorizationCreate() के द्वारा दिखाया

यह संवाद है जो मुझे मिलता है (kSMRightModifySystemDaemons का उपयोग करके)। जैसा कि आप देख सकते हैं कि यह कहता है कि मेरा ऐप एक नया सहायक उपकरण जोड़ने का प्रयास करता है। जो मेरे उपयोगकर्ताओं को भ्रमित करेगा क्योंकि ऐप वास्तव में स्थापित सहायक उपकरण को हटाने का प्रयास करता है। अपने स्वयं के कस्टम दिखा -

enter image description here

मैं कैसे इस संवाद मेरे वास्तविक कार्रवाई (नौकरी हटाना) को प्रतिबिंबित करने के लिए बदल जाता है पर ज्ञान को खोजने के लिए मांग कर रहा हूँ, वहाँ भी जो पूरी तरह से संवाद अनुकूलित करने के लिए लग रहे हैं कई अन्य एप्लिकेशन हैं लेबल और बटन ..

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; 
} 

मैं authItem kSMRightBlessPrivilegedHelper से kSMRightModifySystemDaemons के लिए बदल रहा है, लेकिन यह सब किया था साथ प्रयोग किया है प्रदर्शित करने के लिए 'जोड़ें' के बजाय 'स्थापित'

संवाद बदल था

यहां कुछ सहायता की सराहना करेंगे ...

+1

समाधान AuthorizationRightSet() का उपयोग करने के लिए एक नया सेट सही है, जिसमें पिछले पैरामीटर (localeTableName) निर्दिष्ट डिफ़ॉल्ट-शीघ्र, कैसे वास्तव में यह डिफ़ॉल्ट बटन पाठ लेने के लिए प्राप्त करने के लिए की अभी भी अनिश्चित है, लेकिन कम से कम बनाने के लिए है लेबल आसानी से – DavidMIRV

+0

बदला जा सकता है, तो आप कैसे मैं 'AuthorizationRightSet()' का उपयोग संवाद मैं इनाम ;-) –

+0

एप्पल अवार्ड ख़ुशी से होगा में और अधिक समझ में डाल करने के लिए यहाँ एक उदाहरण है समझा सकता है: https://developer.apple.com /library/mac/technotes/tn2095/_index.html#//apple_ref/doc/uid/DTS10003110-CH1-SECTION7। सही प्रोग्राम "जब आप एक गैर-खाली descriptionKey साथ AuthorizationRightSet फोन जोड़ा जा रहा है, इस पर हर स्थानीयकरण बंडल में तो iterates। प्रत्येक स्थानीयकरण के लिए, यह उचित स्थानीयकरण तालिका फ़ाइल के लिए लग रहा है और फिर उस तालिका में वर्णन कुंजी को ऊपर लग रहा है। यह परिणामी स्ट्रिंग को दाएं विनिर्देशन में डिफ़ॉल्ट-प्रॉम्प्ट डिक्शनरी में जोड़ता है। " – markhunte

उत्तर

0

मैंने पहले इसका उपयोग नहीं किया है लेकिन आपका प्रश्न दिलचस्प पाया है इसलिए मैंने ऐप्पल के दस्तावेज़ीकरण को थोड़ा पढ़ा और मुझे आश्चर्य हुआ कि kAuthorizationEnvironmentPrompt के साथ पर्यावरण स्थापित करना क्या आप चाहते हैं क्या करेंगे?

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. 

आप इस के साथ एक AuthorizationItem बनाएंगे, और फिर उस से युक्त है, और फिर एक AuthorizationItemSet environment: पैरामीटर के लिए AuthorizationCreate कॉल में सेट गुजरती हैं।

मैं कोशिश करता हूं।

अन्य विचार जो मैंने प्रलेखन पढ़ा था, एक कमांड लाइन उपकरण था जो कमांड लाइन टूल ("SomethingSomethingHelper") के निष्पादन को हटा और अधिकृत करता है जो उपयोगकर्ता को कम भ्रमित कर सकता है (इसलिए AuthorizationExecuteWithPrivileges या kAuthorizationRightExecute या जो भी हो)।

+1

प्रमाणीकरण एक्सेक्यूटविथप्रिविलेज = –

+0

बहिष्कृत यह एक संकेत है लेकिन कोई जवाब नहीं आईएमओ –

+0

@ दाईज-दंजन मैं जवाब देने वाले चम्मच में विश्वास नहीं करता हूं। किसी को आगे बढ़ने के लिए पर्याप्त दिशा दें और वे और जानेंगे। मेरा मानना ​​है कि यह _does_ संभावित रूप से उत्तर दे रहा है, मेरे पास परीक्षण ऐप लिखने का समय नहीं था। – Dad