Конфигурирование открытого плагина каталога

В 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

Ваш плагин Доступа Каталога должен реализовать по крайней мере две функции:

Необходимо использовать заказные вызовы для плагина, таким образом, можно поддерживать удаленную конфигурацию, а также локальную конфигурацию. Если необходимо поддерживать конфигурацию Вашего Открываемые плагин 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 описывает каждый метод.

Таблица 11-1  методы интерфейса DirectoryAccessPlugin

Метод

Описание

setPluginAPIImplementor:

Предоставляет конструктору API, используемому для обратных вызовов.

saveChanges:

Вызванный, когда нажата кнопка Apply.

revertChanges:

Вызванный, когда нажата кнопка Revert.

applicationWillQuitSavingChanges:

Вызванный перед выходами приложения, с save параметр, указывающий, сохранить ли изменения. При необходимости saveChanges будет вызван после applicationWillQuitSavingChanges.

applicationWillLockSavingChanges:

Вызванный перед блокировками приложения, с save параметр, указывающий, сохранить ли изменения. При необходимости saveChanges или revertChanges будет вызван после applicationWillLockSavingChanges.

isDirty:

Указывает, имеет ли плагин DirectoryAccess какие-либо несохраненные изменения. Возвратиться YES от isDirty гарантировать, что пользователю предлагают сохранить изменения при выходе или блокировке.

configureButtonClicked:

Вызванный, когда Ваш плагин DirectoryAccess выбран, когда кнопка Configure нажата или если дважды щелкают по Вашему плагину.

setEnabled

Используемый для переопределения состояния флажка Enabled.

isEnabledForLocation

Используемый для переопределения состояния флажка 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.

Таблица 11-2  Новые методы интерфейса DirectoryAccessPlugin

Метод

Описание

canSetEnabledForLocation:

Используемый, чтобы определить, разрешить ли или отключить флажок в списке Служб.

имя хоста

Возвращает имя хоста сконфигурированной машины; полезный при конфигурировании плагина в удаленной системе.

saveSearchPolicies

Причины любые незаконченные поисковые изменения политики, которые будут сохранены; может использоваться в сочетании с другими методами, управляющими поисковыми списками политики.

isNodeOnAuthSearchPolicy:

Возвраты YES если указанное имя узла находится на политике поиска аутентификации; иначе, возвраты NO.

isNodeonContactsSearchPolicy:

Возвраты YES если указанное имя узла находится на политике поиска контактов; иначе, возвраты NO.

addNodeToAuthSeachPolicy:

Добавляет указанное имя узла к политике поиска аутентификации и изменяет политику поиска аутентификации на пользовательскую поисковую политику при необходимости.

addNodeToContactsSearchPolicy:

Добавляет, что указанное имя узла к контактам ищет политику, и изменяется, контакты ищут политику на пользовательскую поисковую политику при необходимости.

deleteNodeFromAuthSearchPolicy:

Удаляет указанное имя узла из политики поиска аутентификации.

deleteNodeFromContactsSearchPolicy:

Удаляет указанное имя узла из политики поиска контактов.

deleteNodesFromAuthSearchPolicyWithPrefix

Удаляет все имена узла, имеющие указанный префикс от политики поиска аутентификации. Полезный при отключении плагина.

deleteNodesFromContactsSearchPolcyWithPrefix

Удаляет все имена узла, имеющие указанный префикс от политики поиска контактов. Полезный при отключении плагина.

nodeNameChangedFrom: to:

Переименовывает любые узлы на любой поисковой политике от старого названия до нового имени. Полезный, когда изменение конфигурации в Вашем плагине изменяет имя узла.

plug-inVersionWithPrefix:

Возвращает номер версии из именованного плагина Info.plist. Полезный при использовании одного плагина конфигурации для конфигурирования различных версий Открыть плагина Directory.

isPluginEnabled:

Возвраты YES если Открыть плагин Directory установлен быть включенным; иначе возвраты NO.

setPlugin: enabled:

Устанавливает включенное состояние указанного плагина, как указано. Полезный, если Вы хотите включить свой плагин при конфигурировании его, чтобы быть добавленными к поисковой политике из листа пользовательской конфигурации.

Файл 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 вызовите отказавший.