123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- """Definitions for constants exported by OpenLDAP
-
- This file lists all constants we know about, even those that aren't
- available in the OpenLDAP version python-ldap is compiled against.
-
- The information serves two purposes:
-
- - Generate a C header with the constants
- - Provide support for building documentation without compiling python-ldap
-
- """
-
- # This module cannot import anything from ldap.
- # When building documentation, it is used to initialize ldap.__init__.
-
- from __future__ import print_function
-
- class Constant(object):
- """Base class for a definition of an OpenLDAP constant
- """
-
- def __init__(self, name, optional=False, requirements=(), doc=None):
- self.name = name
- if optional:
- self_requirement = 'defined(LDAP_{})'.format(self.name)
- requirements = list(requirements) + [self_requirement]
- self.requirements = requirements
- self.doc = self.__doc__ = doc
-
-
- class Error(Constant):
- """Definition for an OpenLDAP error code
-
- This is a constant at the C level; in Python errors are provided as
- exception classes.
- """
-
- c_template = 'add_err({self.name});'
-
-
- class Int(Constant):
- """Definition for an OpenLDAP integer constant"""
-
- c_template = 'add_int({self.name});'
-
-
- class TLSInt(Int):
- """Definition for a TLS integer constant -- requires HAVE_TLS"""
-
- def __init__(self, *args, **kwargs):
- requrements = list(kwargs.get('requirements', ()))
- kwargs['requirements'] = ['HAVE_TLS'] + requrements
- super(TLSInt, self).__init__(*args, **kwargs)
-
-
- class Feature(Constant):
- """Definition for a feature: 0 or 1 based on a C #ifdef
-
- """
-
- c_template = '\n'.join([
- '',
- '#ifdef {self.c_feature}',
- 'if (PyModule_AddIntConstant(m, "{self.name}", 1) != 0) return -1;',
- '#else',
- 'if (PyModule_AddIntConstant(m, "{self.name}", 0) != 0) return -1;',
- '#endif',
- '',
- ])
-
-
- def __init__(self, name, c_feature, **kwargs):
- super(Feature, self).__init__(name, **kwargs)
- self.c_feature = c_feature
-
-
- class Str(Constant):
- c_template = 'add_string({self.name});'
-
-
- API_2004 = 'LDAP_API_VERSION >= 2004'
-
- CONSTANTS = (
- Error('ADMINLIMIT_EXCEEDED'),
- Error('AFFECTS_MULTIPLE_DSAS'),
- Error('ALIAS_DEREF_PROBLEM'),
- Error('ALIAS_PROBLEM'),
- Error('ALREADY_EXISTS'),
- Error('AUTH_METHOD_NOT_SUPPORTED'),
- Error('AUTH_UNKNOWN'),
- Error('BUSY'),
- Error('CLIENT_LOOP'),
- Error('COMPARE_FALSE'),
- Error('COMPARE_TRUE'),
- Error('CONFIDENTIALITY_REQUIRED'),
- Error('CONNECT_ERROR'),
- Error('CONSTRAINT_VIOLATION'),
- Error('CONTROL_NOT_FOUND'),
- Error('DECODING_ERROR'),
- Error('ENCODING_ERROR'),
- Error('FILTER_ERROR'),
- Error('INAPPROPRIATE_AUTH'),
- Error('INAPPROPRIATE_MATCHING'),
- Error('INSUFFICIENT_ACCESS'),
- Error('INVALID_CREDENTIALS'),
- Error('INVALID_DN_SYNTAX'),
- Error('INVALID_SYNTAX'),
- Error('IS_LEAF'),
- Error('LOCAL_ERROR'),
- Error('LOOP_DETECT'),
- Error('MORE_RESULTS_TO_RETURN'),
- Error('NAMING_VIOLATION'),
- Error('NO_MEMORY'),
- Error('NO_OBJECT_CLASS_MODS'),
- Error('NO_OBJECT_CLASS_MODS'),
- Error('NO_RESULTS_RETURNED'),
- Error('NO_SUCH_ATTRIBUTE'),
- Error('NO_SUCH_OBJECT'),
- Error('NOT_ALLOWED_ON_NONLEAF'),
- Error('NOT_ALLOWED_ON_RDN'),
- Error('NOT_SUPPORTED'),
- Error('OBJECT_CLASS_VIOLATION'),
- Error('OPERATIONS_ERROR'),
- Error('OTHER'),
- Error('PARAM_ERROR'),
- Error('PARTIAL_RESULTS'),
- Error('PROTOCOL_ERROR'),
- Error('REFERRAL'),
- Error('REFERRAL_LIMIT_EXCEEDED'),
- Error('RESULTS_TOO_LARGE'),
- Error('SASL_BIND_IN_PROGRESS'),
- Error('SERVER_DOWN'),
- Error('SIZELIMIT_EXCEEDED'),
- Error('STRONG_AUTH_NOT_SUPPORTED'),
- Error('STRONG_AUTH_REQUIRED'),
- Error('SUCCESS'),
- Error('TIMELIMIT_EXCEEDED'),
- Error('TIMEOUT'),
- Error('TYPE_OR_VALUE_EXISTS'),
- Error('UNAVAILABLE'),
- Error('UNAVAILABLE_CRITICAL_EXTENSION'),
- Error('UNDEFINED_TYPE'),
- Error('UNWILLING_TO_PERFORM'),
- Error('USER_CANCELLED'),
- Error('VLV_ERROR'),
- Error('X_PROXY_AUTHZ_FAILURE'),
-
- Error('CANCELLED', requirements=['defined(LDAP_API_FEATURE_CANCEL)']),
- Error('NO_SUCH_OPERATION', requirements=['defined(LDAP_API_FEATURE_CANCEL)']),
- Error('TOO_LATE', requirements=['defined(LDAP_API_FEATURE_CANCEL)']),
- Error('CANNOT_CANCEL', requirements=['defined(LDAP_API_FEATURE_CANCEL)']),
-
- Error('ASSERTION_FAILED', optional=True),
-
- Error('PROXIED_AUTHORIZATION_DENIED', optional=True),
-
- # simple constants
-
- Int('API_VERSION'),
- Int('VENDOR_VERSION'),
-
- Int('PORT'),
- Int('VERSION1'),
- Int('VERSION2'),
- Int('VERSION3'),
- Int('VERSION_MIN'),
- Int('VERSION'),
- Int('VERSION_MAX'),
- Int('TAG_MESSAGE'),
- Int('TAG_MSGID'),
-
- Int('REQ_BIND'),
- Int('REQ_UNBIND'),
- Int('REQ_SEARCH'),
- Int('REQ_MODIFY'),
- Int('REQ_ADD'),
- Int('REQ_DELETE'),
- Int('REQ_MODRDN'),
- Int('REQ_COMPARE'),
- Int('REQ_ABANDON'),
-
- Int('TAG_LDAPDN'),
- Int('TAG_LDAPCRED'),
- Int('TAG_CONTROLS'),
- Int('TAG_REFERRAL'),
-
- Int('REQ_EXTENDED'),
- Int('TAG_NEWSUPERIOR', requirements=[API_2004]),
- Int('TAG_EXOP_REQ_OID', requirements=[API_2004]),
- Int('TAG_EXOP_REQ_VALUE', requirements=[API_2004]),
- Int('TAG_EXOP_RES_OID', requirements=[API_2004]),
- Int('TAG_EXOP_RES_VALUE', requirements=[API_2004]),
- Int('TAG_SASL_RES_CREDS', requirements=[API_2004, 'defined(HAVE_SASL)']),
-
- Int('SASL_AUTOMATIC'),
- Int('SASL_INTERACTIVE'),
- Int('SASL_QUIET'),
-
- # reversibles
-
- Int('RES_BIND'),
- Int('RES_SEARCH_ENTRY'),
- Int('RES_SEARCH_RESULT'),
- Int('RES_MODIFY'),
- Int('RES_ADD'),
- Int('RES_DELETE'),
- Int('RES_MODRDN'),
- Int('RES_COMPARE'),
- Int('RES_ANY'),
-
- Int('RES_SEARCH_REFERENCE'),
- Int('RES_EXTENDED'),
- Int('RES_UNSOLICITED'),
-
- Int('RES_INTERMEDIATE'),
-
- # non-reversibles
-
- Int('AUTH_NONE'),
- Int('AUTH_SIMPLE'),
- Int('SCOPE_BASE'),
- Int('SCOPE_ONELEVEL'),
- Int('SCOPE_SUBTREE'),
- Int('SCOPE_SUBORDINATE', optional=True),
- Int('MOD_ADD'),
- Int('MOD_DELETE'),
- Int('MOD_REPLACE'),
- Int('MOD_INCREMENT'),
- Int('MOD_BVALUES'),
-
- Int('MSG_ONE'),
- Int('MSG_ALL'),
- Int('MSG_RECEIVED'),
-
- # (error constants handled above)
-
- Int('DEREF_NEVER'),
- Int('DEREF_SEARCHING'),
- Int('DEREF_FINDING'),
- Int('DEREF_ALWAYS'),
- Int('NO_LIMIT'),
-
- Int('OPT_API_INFO'),
- Int('OPT_DEREF'),
- Int('OPT_SIZELIMIT'),
- Int('OPT_TIMELIMIT'),
- Int('OPT_REFERRALS', optional=True),
- Int('OPT_ERROR_NUMBER'),
- Int('OPT_RESTART'),
- Int('OPT_PROTOCOL_VERSION'),
- Int('OPT_SERVER_CONTROLS'),
- Int('OPT_CLIENT_CONTROLS'),
- Int('OPT_API_FEATURE_INFO'),
- Int('OPT_HOST_NAME'),
-
- Int('OPT_DESC'),
- Int('OPT_DIAGNOSTIC_MESSAGE'),
-
- Int('OPT_ERROR_STRING'),
- Int('OPT_MATCHED_DN'),
- Int('OPT_DEBUG_LEVEL'),
- Int('OPT_TIMEOUT'),
- Int('OPT_REFHOPLIMIT'),
- Int('OPT_NETWORK_TIMEOUT'),
- Int('OPT_URI'),
-
- Int('OPT_DEFBASE', optional=True),
-
- TLSInt('OPT_X_TLS', optional=True),
- TLSInt('OPT_X_TLS_CTX'),
- TLSInt('OPT_X_TLS_CACERTFILE'),
- TLSInt('OPT_X_TLS_CACERTDIR'),
- TLSInt('OPT_X_TLS_CERTFILE'),
- TLSInt('OPT_X_TLS_KEYFILE'),
- TLSInt('OPT_X_TLS_REQUIRE_CERT'),
- TLSInt('OPT_X_TLS_CIPHER_SUITE'),
- TLSInt('OPT_X_TLS_RANDOM_FILE'),
- TLSInt('OPT_X_TLS_DHFILE'),
- TLSInt('OPT_X_TLS_NEVER'),
- TLSInt('OPT_X_TLS_HARD'),
- TLSInt('OPT_X_TLS_DEMAND'),
- TLSInt('OPT_X_TLS_ALLOW'),
- TLSInt('OPT_X_TLS_TRY'),
- TLSInt('OPT_X_TLS_PEERCERT', optional=True),
-
- TLSInt('OPT_X_TLS_VERSION', optional=True),
- TLSInt('OPT_X_TLS_CIPHER', optional=True),
- TLSInt('OPT_X_TLS_PEERCERT', optional=True),
-
- # only available if OpenSSL supports it => might cause
- # backward compatibility problems
- TLSInt('OPT_X_TLS_CRLCHECK', optional=True),
-
- TLSInt('OPT_X_TLS_CRLFILE', optional=True),
-
- TLSInt('OPT_X_TLS_CRL_NONE'),
- TLSInt('OPT_X_TLS_CRL_PEER'),
- TLSInt('OPT_X_TLS_CRL_ALL'),
- TLSInt('OPT_X_TLS_NEWCTX', optional=True),
- TLSInt('OPT_X_TLS_PROTOCOL_MIN', optional=True),
- TLSInt('OPT_X_TLS_PACKAGE', optional=True),
-
- Int('OPT_X_SASL_MECH'),
- Int('OPT_X_SASL_REALM'),
- Int('OPT_X_SASL_AUTHCID'),
- Int('OPT_X_SASL_AUTHZID'),
- Int('OPT_X_SASL_SSF'),
- Int('OPT_X_SASL_SSF_EXTERNAL'),
- Int('OPT_X_SASL_SECPROPS'),
- Int('OPT_X_SASL_SSF_MIN'),
- Int('OPT_X_SASL_SSF_MAX'),
- Int('OPT_X_SASL_NOCANON', optional=True),
- Int('OPT_X_SASL_USERNAME', optional=True),
- Int('OPT_CONNECT_ASYNC', optional=True),
- Int('OPT_X_KEEPALIVE_IDLE', optional=True),
- Int('OPT_X_KEEPALIVE_PROBES', optional=True),
- Int('OPT_X_KEEPALIVE_INTERVAL', optional=True),
-
- Int('DN_FORMAT_LDAP'),
- Int('DN_FORMAT_LDAPV3'),
- Int('DN_FORMAT_LDAPV2'),
- Int('DN_FORMAT_DCE'),
- Int('DN_FORMAT_UFN'),
- Int('DN_FORMAT_AD_CANONICAL'),
- # Int('DN_FORMAT_LBER'), # for testing only
- Int('DN_FORMAT_MASK'),
- Int('DN_PRETTY'),
- Int('DN_SKIP'),
- Int('DN_P_NOLEADTRAILSPACES'),
- Int('DN_P_NOSPACEAFTERRDN'),
- Int('DN_PEDANTIC'),
-
- Int('AVA_NULL'),
- Int('AVA_STRING'),
- Int('AVA_BINARY'),
- Int('AVA_NONPRINTABLE'),
-
- Int('OPT_SUCCESS'),
-
- # XXX - these should be errors
- Int('URL_ERR_BADSCOPE'),
- Int('URL_ERR_MEM'),
- # Int('LIBLDAP_R'),
-
- Feature('LIBLDAP_R', 'HAVE_LIBLDAP_R'),
- Feature('SASL_AVAIL', 'HAVE_SASL'),
- Feature('TLS_AVAIL', 'HAVE_TLS'),
-
- Str("CONTROL_MANAGEDSAIT"),
- Str("CONTROL_PROXY_AUTHZ"),
- Str("CONTROL_SUBENTRIES"),
- Str("CONTROL_VALUESRETURNFILTER"),
- Str("CONTROL_ASSERT"),
- Str("CONTROL_PRE_READ"),
- Str("CONTROL_POST_READ"),
- Str("CONTROL_SORTREQUEST"),
- Str("CONTROL_SORTRESPONSE"),
- Str("CONTROL_PAGEDRESULTS"),
- Str("CONTROL_SYNC"),
- Str("CONTROL_SYNC_STATE"),
- Str("CONTROL_SYNC_DONE"),
- Str("SYNC_INFO"),
- Str("CONTROL_PASSWORDPOLICYREQUEST"),
- Str("CONTROL_PASSWORDPOLICYRESPONSE"),
- Str("CONTROL_RELAX"),
- )
-
-
- def print_header(): # pragma: no cover
- """Print the C header file to standard output"""
-
- print('/*')
- print(' * Generated with:')
- print(' * python Lib/ldap/constants.py > Modules/constants_generated.h')
- print(' *')
- print(' * Please do any modifications there, then re-generate this file')
- print(' */')
- print('')
-
- current_requirements = []
-
- def pop_requirement():
- popped = current_requirements.pop()
- print('#endif')
- print()
-
- for definition in CONSTANTS:
- while not set(current_requirements).issubset(definition.requirements):
- pop_requirement()
-
- for requirement in definition.requirements:
- if requirement not in current_requirements:
- current_requirements.append(requirement)
- print()
- print('#if {}'.format(requirement))
-
- print(definition.c_template.format(self=definition))
-
- while current_requirements:
- pop_requirement()
-
-
- if __name__ == '__main__':
- print_header()
|