Конфигурирование открытого плагина каталога
В OS X v10.1, Откройте, плагины Directory сконфигурированы через Приложение установки Каталога, поддерживающее локальную конфигурацию только. Когда администратор выбирает Ваш плагин для конфигурации, Приложение установки Каталога запускает Ваше сменное приложение конфигурирования. Приложение конфигурирования для запуска указано в файле списка свойств. Локальная конфигурация в OS X v10.1 описана в разделе Local Configuration.
В OS X v10.2 и позже, администраторы используют приложение Доступа Каталога для выбора плагинов Open Directory для конфигурации. Если Вы обеспечиваете плагин Доступа Каталога, использующий заказные вызовы для передачи с Вашим Открываемый плагин Directory, Ваш Открыть плагин Directory может быть сконфигурирован локально и удаленно. Локальная и удаленная конфигурация в OS X v10.2 и позже описана в разделе Remote Configuration.
Локальная конфигурация
В OS X v10.1, файл списка свойств используется для указания приложения конфигурирования, которое должно быть запущено, когда администратор выбирает плагин для конфигурации. CFBundleConfigAvail
свойство указывает полный путь, включая имя файла, для приложения конфигурирования для запуска. Например:
"CFBundleConfigAvail" = "/System/Library/Frameworks/DirectoryService.framework/ Resources/YourPlugInConfig.app" |
Когда приложение конфигурирования запускается, можно также указать имя конфигурационного файла для открытия:
“CFBundleConfigFile” = "/Library/Preferences/DirectoryService/ YourPlugInConfig.xml" |
В этом примере конфигурационный файл находится в формате XML, как обозначено расширением .xml
.
Если Ваш плагин не имеет приложения конфигурирования, он может установить CFBundleConfigAvail
к Not Available
. Если CFBundleConfigFile
свойство отсутствует в Вашем файле списка свойств или установлено в Not Available
, но CFBundleConfigFile
установлен в имя файла, файл открыт с его приложением по умолчанию. Если CFBundleConfigAvail
установлен, но CFBundleConfigFile
отсутствует или набор к Not Available
, приложение конфигурирования запускается без файла. Если оба свойства отсутствуют или набор к Not Available
, когда Ваш плагин выбран, кнопка Configure недоступна.
Удаленная конфигурация
OS X v10.2 и более поздние поддержки удаленная конфигурация. Для конфигурирования Вашего Открываемые плагин Directory удаленно необходимо создать плагин Доступа Каталога, имеющий то же имя как Ваш Открываемые плагин Directory, но заканчивающийся .daplug
вместо .dsplug
. Можно поместить плагин Доступа Каталога в комплект приложений Доступа Каталога:
/Applications/Utilities/Directory Access.app/Contents/PlugIns/myplug.daplug |
Ваш плагин Доступа Каталога должен реализовать по крайней мере две функции:
обработайте Сконфигурировать нажатие кнопки
примите объект PluginAPIImplementor, предоставляющий Вашему плагину Доступа Каталога информацию, необходимую для обработки локальных и удаленных соединений
Необходимо использовать заказные вызовы для плагина, таким образом, можно поддерживать удаленную конфигурацию, а также локальную конфигурацию. Если необходимо поддерживать конфигурацию Вашего Открываемые плагин Directory в OS X v10.1, а также OS X v10.2 и позже, необходимо будет использовать CFBundleConfigAvail
свойство в Вашем файле списка свойств для OS X v10.1 и имеет плагин Доступа Каталога для OS X v10.2 и позже. Если оба типа конфигурации будут установлены в той же системе рабочий OS X v10.2 или позже, то Ваш плагин Доступа Каталога переопределит запуск приложения конфигурирования, указанного CFBundleConfigAvail
свойство.
Плагины DirectoryAccess
Начиная с Mac OS 10.2, приложение Доступа Каталога, используемое администраторами для конфигурирования, Открывает Directory, плагины DirectoryAccess поддержек. Плагины DirectoryAccess сохранены в Contents/PlugIns
каталог в каталоге приложения Доступа Каталога. Плагин DirectoryAccess должен быть NSBundle, иметь имя, соответствующее Открыть плагин Directory, который он конфигурирует, и имейте расширение .daplug
. Для Mac OS 10.3 и позже, можно использовать pluginName
метод для переопределения показа имени в списке.
Основной класс пакета должен поддерживать интерфейс DirectoryAccessPlugin, описанный ниже:
- (void)setPluginAPIImplementor:(id)implementor; |
- (BOOL)saveChanges; // Return FALSE if can’t save for some reason. |
- (BOOL)revertChanges; |
- (BOOL)applicationWillQuitSavingChanges:(BOOL)save; |
- (BOOL)applicationWillLockSavingChanges:(BOOL)save; |
- (BOOL)isDirty; |
- (void)configureButtonClicked:(id)sender; |
- (void)setEnabled:(BOOL)enabled forLocation:(NSString*)location; |
- (BOOL)isEnabledForLocation:(NSString*)location; |
Таблица 11-1 описывает каждый метод.
Метод | Описание |
---|---|
| Предоставляет конструктору API, используемому для обратных вызовов. |
| Вызванный, когда нажата кнопка Apply. |
| Вызванный, когда нажата кнопка Revert. |
| Вызванный перед выходами приложения, с |
| Вызванный перед блокировками приложения, с |
| Указывает, имеет ли плагин DirectoryAccess какие-либо несохраненные изменения. Возвратиться |
| Вызванный, когда Ваш плагин DirectoryAccess выбран, когда кнопка Configure нажата или если дважды щелкают по Вашему плагину. |
| Используемый для переопределения состояния флажка Enabled. |
| Используемый для переопределения состояния флажка Enabled for Location. |
Основной класс Вашего пакета не требуется, чтобы реализовывать все методы в DirectoryAccessPlugin.h
; вместо этого, это должно реализовать только те методы, в которых фактически нуждается Ваш плагин DirectoryAccess. Наиболее вероятные методы, которые необходимо будет реализовать, setPluginAPIImplementor:
и configureButtonClicked:
.
Начиная с OS X v10.4, новые методы DirectoryAccess доступны:
// PluginAPIImplementor new methods available in OS X v10.4 and later |
- (BOOL)canSetEnabledForLocation:(NSString*)location; |
- (NSString*)hostName; |
- (BOOL)saveSearchPolicies; |
- (BOOL)isNodeOnAuthSearchPolicy:(NSString*)nodeName; |
- (BOOL)isNodeOnContactSearchPolicy:(NSString*)nodeName; |
- (void)addNodeToAuthSearchPolicy:(NSString*)nodeName; |
- (void)addNodeToContactsSearchPolicy:(NSString*)nodeName; |
- (void)deleteNodeFromAuthSearchPolicy:(NSString *)nodeName; |
- (void)deleteNodeFromContactsSearchPolicy:(NSString *)nodeName; |
- (void)deleteNodesFromAuthSearchPolicyWithPrefix:(NSString *)prefix; |
- (void)deleteNodesFromContactsSearchPolicyWithPrefix:(NSString *)prefix; |
- (void)nodeNameChangedFrom:(NSString*)oldNodeNameto:(NSString*)newNodeName; |
- (NSString *)pluginVersionWithPrefix:(NSString *)prefix; |
- (BOOL)isPluginEnabled:(NSString*)prefix; |
- (void)setPlugin:(NSString*)prefix enabled:(BOOL)enabled; |
Таблица 11-2 описывает новые методы интерфейса DirectoryAccessPlugin.
Метод | Описание |
---|---|
| Используемый, чтобы определить, разрешить ли или отключить флажок в списке Служб. |
имя хоста | Возвращает имя хоста сконфигурированной машины; полезный при конфигурировании плагина в удаленной системе. |
| Причины любые незаконченные поисковые изменения политики, которые будут сохранены; может использоваться в сочетании с другими методами, управляющими поисковыми списками политики. |
| Возвраты |
isNodeonContactsSearchPolicy: | Возвраты |
addNodeToAuthSeachPolicy: | Добавляет указанное имя узла к политике поиска аутентификации и изменяет политику поиска аутентификации на пользовательскую поисковую политику при необходимости. |
| Добавляет, что указанное имя узла к контактам ищет политику, и изменяется, контакты ищут политику на пользовательскую поисковую политику при необходимости. |
| Удаляет указанное имя узла из политики поиска аутентификации. |
deleteNodeFromContactsSearchPolicy: | Удаляет указанное имя узла из политики поиска контактов. |
| Удаляет все имена узла, имеющие указанный префикс от политики поиска аутентификации. Полезный при отключении плагина. |
| Удаляет все имена узла, имеющие указанный префикс от политики поиска контактов. Полезный при отключении плагина. |
| Переименовывает любые узлы на любой поисковой политике от старого названия до нового имени. Полезный, когда изменение конфигурации в Вашем плагине изменяет имя узла. |
| Возвращает номер версии из именованного плагина |
| Возвраты |
| Устанавливает включенное состояние указанного плагина, как указано. Полезный, если Вы хотите включить свой плагин при конфигурировании его, чтобы быть добавленными к поисковой политике из листа пользовательской конфигурации. |
Файл PluginAPIImplementor.h
определяет следующий объект и методы:
@interface PluginAPIImplementor : NSObject { |
} |
- (BOOL)preflightDSRef; |
- (BOOL)preflightAuthRights; |
- (OSStatus)makeAuthExternalForm:(AuthorizationExternalForm*)authExtForm; |
- (tDirReference)dsRef; |
- (AuthorizationRef)authorizationRef; |
- (void)pluginEnableStateChanged:(NSString*)pluginName to:(BOOL)newstate; |
- (void)reloadSearchPolicies; |
- (void)markDirty:(id)sender; |
PluginAPIImplementor
объект обеспечивает обратные вызовы для плагинов DirectoryAccess и передается с помощью setPluginAPIImplementor:
после того, как плагин загружается и инициализируется. Если Вы хотите Ваш Открываемые плагин Directory, чтобы быть конфигурируемыми удаленно, или если необходимо вызвать, любой Открывает функции Directory, необходимо использовать ссылку API, предоставленную dsRef
.
Рекомендуемая стратегия состоит в том, чтобы иметь специально именованный узел, такой как /MyPlugin
для названного плагина DirectoryAccess MyPlugin
, то, что Вы открываете и вызываете dsDoPluginCustomCall
читать и записать. Для внесения изменений можно использовать makeAuthExternalForm:
помещать воплощенный AuthorizationRef
в буфер так, чтобы Ваш плагин DirectoryAccess мог проверить, что пользователь разрешен внести изменения. Доступ каталога требует system.services.directory.configure права авторизации, которое можно проверить от использования плагина DirectoryAccess AuthorizationCopyRights
. Это препятствует тому, чтобы злонамеренный пользователь реконфигурировал Ваш Открываемый плагин Directory без первого обеспечения имени и пароля администратора.
Прежде, чем выполнить операцию чтения, необходимо вызвать preflightDSRef
. Это гарантирует, что соединение все еще установлено и повторно соединяется, если это не. Если возвращается этот метод NO
, Ваш плагин DirectoryAccess должен также возвратиться NO
указать работу перестало работать.
Прежде, чем выполнить операцию записи, необходимо вызвать preflightAuthRights
гарантировать что AuthorizationRef
все еще допустимо. Если preflightAuthRights
возвраты NO
, Ваш плагин DirectoryAccess должен также возвратиться NO
указать к приложению DirectoryAccess что saveChanges
вызовите отказавший.