slapo-retcode - наложение генерации результирующих кодов для slapd
/usr/local/etc/openldap/slapd.conf
Наложение slapd(8) retcode полезно для тестирования поведения клиентов при возникновении сгенерированных сервером ошибочных или необычных ответов, например, кодов ошибок, отсылок, чрезмерного времени отклика и т.п.
Ошибочные ответы генерируются в соответствии с различными стратегиями.
Согласно первой стратегии, все операции, нацеленные на определённое конфигурируемое поддерево, приводят к поиску объекта, связанного с запрашиваемым DN, и проверке этого объекта на наличие данных кода возврата: кода ответа, а также опциональных полей (текстового сообщения, настраиваемой задержки, поля matched DN и, если код ответа был "referral", отсылки (или списка отсылок)).
В файле retcode.conf представлены широко известные коды ответов из документов, определяющих стандарты. Этот файл может быть включён после инициализации экземпляра данного наложения.
Во втором режиме при возвращении в качестве промежуточных ответов на поисковый запрос объектов, построенных на объектных классах, унаследованных от errAbsObject, таких как errObject или errAuxObject, они преобразуются в ответ, обусловленный содержимым этих объектов.
В третьем режиме в базе данных, к которой применяется наложение, ищутся объекты, построенные на объектных классах, унаследованных от errAbsObject; в случае нахождения таких объектов, их содержимое используется для вычисления соответствующего ответа.
Данное поведение отключается путём использования элемента управления manageDSAit (RFC 3296); в этом случае результирующий объект, независимо от того, присутствует ли он в каталоге, динамически генерируется наложением или содержится в запросе, обрабатывается как обычно.
Специфичные для наложения retcode директивы конфигурации должны иметь префикс retcode-, во избежание конфликтов с директивами базы данных, к которой применяется это наложение, или с другими наложениями, применяемыми к той же базе данных. Для конфигурации наложения могут быть использованы следующие директивы:
Эта директива определяет родительское DN поддерева, где будут находиться динамически сгенерированные записи. Если она не задана, используется суффикс базы данных, к которой применяется наложение.
retcode-item <RDN> <errCode> [op=<oplist>] [text=<message>] [ref=<referral>] [sleeptime=<sec>] [matched=<DN>] [unsolicited=<OID>[:<data>]] [flags=[pre|post-]disconnect[,...]]
Динамически сгенерированная запись, расположенная в поддереве retcode-parent. В качестве errCode указывается номер кода ответа; он может задаваться в любом формате, который поддерживает strtol(3). Опциональное поле oplist представляет собой список операций, вызов которых приведёт к генерации кода ответа; при его отсутствии действие директивы распространяется на все операции. Параметр matched представляет собой "совпавшее" DN, которое будет возвращено вместе с ошибкой, а параметр text - опциональное диагностическое сообщение. Параметр ref разрешено использовать только для кода возврата referral. Задание параметра sleeptime приведёт к тому, что slapd(8) выполнит задержку перед обработкой операции на указанное количество секунд. Параметр unsolicited может быть использован для возврата определённых в RFC 4511 сообщений произвольных уведомлений; если указанный в этом параметре OID отличен от "0", генерируется расширенный ответ с добавлением опциональных данных data. Если в параметре flags содержится disconnect или pre-disconnect, slapd(8) выполнит внезапное разъединение без отправки уведомления; при post-disconnect разъединение произойдёт непосредственно после отправки положенного ответа.
Включает использование хранимых в каталоге объектов с объектным классом errAbsObject. Это может привести к большому количеству излишней нагрузки на каталог.
Определяет время задержки в секундах перед фактической обработкой какой-либо операции. Если указано отрицательное число, в качестве времени задержки используется случайное количество секунд в промежутке от нуля до абсолютного значения аргумента данной директивы.
Наложение retcode использует описанный ниже набор схемы данных "return code". Этот набор схемы специально разработан для использования с данным наложением и для других целей не предназначен. Также имейте ввиду, что работа над этим набором схемы продолжается, и потому изменения могут вноситься без уведомления. Набор схемы автоматически загружается наложением.
Данный набор схемы включает несколько объектных классов и связанных с ними типов атрибутов, которые описаны ниже.
Код ошибки:
( 1.3.6.1.4.1.4203.666.11.4.1.1 NAME ( 'errCode' ) DESC 'LDAP error code' EQUALITY integerMatch ORDERING integerOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
Операции, которые запускают возврат кода ответа:
( 1.3.6.1.4.1.4203.666.11.4.1.2 NAME ( 'errOp' ) DESC 'Operations the errObject applies to' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
Текстовое сообщение:
( 1.3.6.1.4.1.4203.666.11.4.1.3 NAME ( 'errText' ) DESC 'LDAP error textual description' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
Время задержки, по прошествии которой ответ фактически возвращается клиенту:
( 1.3.6.1.4.1.4203.666.11.4.1.4 NAME ( 'errSleepTime' ) DESC 'Time to wait before returning the error' EQUALITY integerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
Возвращаемое клиенту "совпавшее" DN:
( 1.3.6.1.4.1.4203.666.11.4.1.5 NAME ( 'errMatchedDN' ) DESC 'Value to be returned as matched DN' EQUALITY distinguishedNameMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 SINGLE-VALUE )
OID, который требуется вернуть в качестве OID расширенного ответа в определённых в RFC 4511 ответах произвольных уведомлений (при значении "0" генерируется стандартный ответ, в котором идентификатор сообщения messageID установлен в 0):
( 1.3.6.1.4.1.4203.666.11.4.1.6 NAME ( 'errUnsolicitedOID' ) DESC 'OID to be returned within unsolicited response' EQUALITY objectIdentifierMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.38 SINGLE-VALUE )
Строка октетов, которую требуется вернуть в качестве данных в определённом в RFC 4511 ответе произвольного уведомления:
( 1.3.6.1.4.1.4203.666.11.4.1.7 NAME ( 'errUnsolicitedData' ) DESC 'Data to be returned within unsolicited response' SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 SINGLE-VALUE )
Если значение этого атрибута TRUE, slapd(8) производит внезапное отключение без уведомления; если FALSE, он отключается по мере необходимости после отправки ответа:
( 1.3.6.1.4.1.4203.666.11.4.1.8 NAME ( 'errDisconnect' ) DESC 'Disconnect without notice' SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE )
Абстрактный класс, наличие которого вызывает срабатывание наложения:
( 1.3.6.1.4.1.4203.666.11.4.3.0 NAME ( 'errAbsObject' ) SUP top ABSTRACT MUST ( errCode ) MAY ( cn $ description $ errOp $ errText $ errSleepTime $ errMatchedDN ) )
Автономный структурный объектный класс для объекта данных, специально созданного для возврата ответного сообщения:
( 1.3.6.1.4.1.4203.666.11.4.3.1 NAME ( 'errObject' ) SUP errAbsObject STRUCTURAL )
Вспомогательный объектный класс, предназначенный для изменения поведения существующих объектов:
( 1.3.6.1.4.1.4203.666.11.4.3.2 NAME ( 'errAuxObject' ) SUP errAbsObject AUXILIARY )
overlay retcode retcode-parent "ou=RetCodes,dc=example,dc=com" # retcode.conf можно найти в директории tests/data/ дерева исходных кодов include ./retcode.conf # Подождать 10 секунд, затем вернуть success (0x00) retcode-item "cn=Success after 10 seconds" 0x00 sleeptime=10 # Подождать 10 секунд, затем вернуть timelimitExceeded (0x03) retcode-item "cn=Timelimit after 10 seconds" 0x03 sleeptime=10
конфигурационный файл slapd по умолчанию.
slapd.conf(5), slapd-config(5), slapd(8). Наложение slapo-retcode(5) поддерживает динамическую конфигурацию через back-config.
Этот модуль был написан в 2005 году Pierangelo Masarati для SysNet.
OpenLDAP 2.4.47 | SLAPO-RETCODE(5) | 2018/12/19 |