[Python-modules-commits] [python-ldap3] 01/03: Import python-ldap3_0.9.9.3.orig.tar.gz
Brian May
bam at moszumanska.debian.org
Wed Nov 18 23:39:27 UTC 2015
This is an automated email from the git hooks/post-receive script.
bam pushed a commit to branch master
in repository python-ldap3.
commit a2ec7f5e5025fb3a1f2b75fa04c8c67159a89d77
Author: Brian May <bam at debian.org>
Date: Thu Nov 19 10:24:25 2015 +1100
Import python-ldap3_0.9.9.3.orig.tar.gz
---
PKG-INFO | 6 +-
README.rst | 2 +-
_version.json | 4 +-
ldap3.egg-info/PKG-INFO | 6 +-
ldap3.egg-info/SOURCES.txt | 3 +
ldap3/__init__.py | 746 +++++++--------
ldap3/abstract/entry.py | 400 ++++----
ldap3/abstract/reader.py | 1022 ++++++++++-----------
ldap3/core/connection.py | 60 +-
ldap3/core/exceptions.py | 1154 +++++++++++------------
ldap3/core/pooling.py | 570 ++++++------
ldap3/core/server.py | 147 +--
ldap3/core/usage.py | 68 +-
ldap3/extend/__init__.py | 16 +-
ldap3/extend/microsoft/dirSync.py | 91 ++
ldap3/operation/bind.py | 2 +-
ldap3/operation/search.py | 14 +-
ldap3/protocol/controls.py | 40 +
ldap3/protocol/convert.py | 7 +-
ldap3/protocol/formatters/standard.py | 5 +-
ldap3/protocol/microsoft.py | 103 ++-
ldap3/protocol/rfc2696.py | 12 +-
ldap3/protocol/rfc4512.py | 1606 +++++++++++++++++----------------
ldap3/strategy/async.py | 427 ++++-----
ldap3/strategy/base.py | 40 +-
ldap3/strategy/restartable.py | 516 +++++------
ldap3/strategy/reusable.py | 820 ++++++++---------
ldap3/strategy/sync.py | 425 ++++-----
ldap3/utils/asn1.py | 18 -
ldap3/utils/conv.py | 301 +++---
ldap3/utils/hashed.py | 3 +-
ldap3/version.py | 6 +-
requirements.txt | 2 +-
setup.cfg | 2 +-
test/testBindOperation.py | 21 +-
test/testMicrosoftAD.py | 171 ++++
test/testModifyDNOperation.py | 14 +-
test/testSearchOperation.py | 17 +-
test/testSearchOperationJSON.py | 11 +-
test/testTls.py | 12 +-
40 files changed, 4739 insertions(+), 4151 deletions(-)
diff --git a/PKG-INFO b/PKG-INFO
index 08a1512..c764cdc 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,7 +1,7 @@
Metadata-Version: 1.1
Name: ldap3
-Version: 0.9.9.1
-Summary: A strictly RFC 4511 conforming LDAP V3 pure Python client. Same codebase for Python 2, Python3, PyPy and PyPy 3
+Version: 0.9.9.3
+Summary: A strictly RFC 4510 conforming LDAP V3 pure Python client. Same codebase for Python 2, Python3, PyPy and PyPy 3
Home-page: https://github.com/cannatag/ldap3
Author: Giovanni Cannata
Author-email: cannatag at gmail.com
@@ -21,7 +21,7 @@ Description: LDAP3
:target: https://pypi.python.org/pypi/ldap3/
:alt: License
- ldap3 is a strictly RFC 4511 conforming LDAP V3 pure Python **client**. The same codebase works with Python, Python 3, PyPy and PyPy3.
+ ldap3 is a strictly RFC 4510 conforming LDAP V3 pure Python **client**. The same codebase works with Python, Python 3, PyPy and PyPy3.
This project was formerly named **python3-ldap**. The name has been changed to avoid confusion with the python-ldap library.
diff --git a/README.rst b/README.rst
index 9024729..8b8ca9e 100644
--- a/README.rst
+++ b/README.rst
@@ -13,7 +13,7 @@ LDAP3
:target: https://pypi.python.org/pypi/ldap3/
:alt: License
-ldap3 is a strictly RFC 4511 conforming LDAP V3 pure Python **client**. The same codebase works with Python, Python 3, PyPy and PyPy3.
+ldap3 is a strictly RFC 4510 conforming LDAP V3 pure Python **client**. The same codebase works with Python, Python 3, PyPy and PyPy3.
This project was formerly named **python3-ldap**. The name has been changed to avoid confusion with the python-ldap library.
diff --git a/_version.json b/_version.json
index 8f046a2..af39626 100644
--- a/_version.json
+++ b/_version.json
@@ -4,8 +4,8 @@
"status": "development - beta",
"package_name": "ldap3",
"url": "https://github.com/cannatag/ldap3",
- "description": "A strictly RFC 4511 conforming LDAP V3 pure Python client. Same codebase for Python 2, Python3, PyPy and PyPy 3",
+ "description": "A strictly RFC 4510 conforming LDAP V3 pure Python client. Same codebase for Python 2, Python3, PyPy and PyPy 3",
"author": "Giovanni Cannata",
- "version": "0.9.9.1",
+ "version": "0.9.9.3",
"license": "LGPL v3"
}
diff --git a/ldap3.egg-info/PKG-INFO b/ldap3.egg-info/PKG-INFO
index 08a1512..c764cdc 100644
--- a/ldap3.egg-info/PKG-INFO
+++ b/ldap3.egg-info/PKG-INFO
@@ -1,7 +1,7 @@
Metadata-Version: 1.1
Name: ldap3
-Version: 0.9.9.1
-Summary: A strictly RFC 4511 conforming LDAP V3 pure Python client. Same codebase for Python 2, Python3, PyPy and PyPy 3
+Version: 0.9.9.3
+Summary: A strictly RFC 4510 conforming LDAP V3 pure Python client. Same codebase for Python 2, Python3, PyPy and PyPy 3
Home-page: https://github.com/cannatag/ldap3
Author: Giovanni Cannata
Author-email: cannatag at gmail.com
@@ -21,7 +21,7 @@ Description: LDAP3
:target: https://pypi.python.org/pypi/ldap3/
:alt: License
- ldap3 is a strictly RFC 4511 conforming LDAP V3 pure Python **client**. The same codebase works with Python, Python 3, PyPy and PyPy3.
+ ldap3 is a strictly RFC 4510 conforming LDAP V3 pure Python **client**. The same codebase works with Python, Python 3, PyPy and PyPy3.
This project was formerly named **python3-ldap**. The name has been changed to avoid confusion with the python-ldap library.
diff --git a/ldap3.egg-info/SOURCES.txt b/ldap3.egg-info/SOURCES.txt
index 80e610e..2e751ed 100644
--- a/ldap3.egg-info/SOURCES.txt
+++ b/ldap3.egg-info/SOURCES.txt
@@ -27,6 +27,7 @@ setup.py
./ldap3/extend/__init__.py
./ldap3/extend/operation.py
./ldap3/extend/microsoft/__init__.py
+./ldap3/extend/microsoft/dirSync.py
./ldap3/extend/novell/__init__.py
./ldap3/extend/novell/getBindDn.py
./ldap3/extend/novell/listReplicas.py
@@ -50,6 +51,7 @@ setup.py
./ldap3/operation/search.py
./ldap3/operation/unbind.py
./ldap3/protocol/__init__.py
+./ldap3/protocol/controls.py
./ldap3/protocol/convert.py
./ldap3/protocol/microsoft.py
./ldap3/protocol/novell.py
@@ -117,6 +119,7 @@ test/testExtensions.py
test/testFormatGeneralizedTime.py
test/testLDIF-change.py
test/testLDIF-content.py
+test/testMicrosoftAD.py
test/testMockSyncStrategy.py
test/testModifyDNOperation.py
test/testModifyOperation.py
diff --git a/ldap3/__init__.py b/ldap3/__init__.py
index 8f0468c..e2cc914 100644
--- a/ldap3/__init__.py
+++ b/ldap3/__init__.py
@@ -1,353 +1,393 @@
-"""
-"""
-
-# Created on 2013.05.15
-#
-# Author: Giovanni Cannata
-#
-# Copyright 2015 Giovanni Cannata
-#
-# This file is part of ldap3.
-#
-# ldap3 is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# ldap3 is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with ldap3 in the COPYING and COPYING.LESSER files.
-# If not, see <http://www.gnu.org/licenses/>.
-
-# authentication
-ANONYMOUS = 'ANONYMOUS'
-SIMPLE = 'SIMPLE'
-SASL = 'SASL'
-NTLM = 'NTLM'
-
-SASL_AVAILABLE_MECHANISMS = ['EXTERNAL', 'DIGEST-MD5', 'GSSAPI']
-
-AUTO_BIND_NONE = 'NONE'
-AUTO_BIND_NO_TLS = 'NO_TLS'
-AUTO_BIND_TLS_BEFORE_BIND = 'TLS_BEFORE_BIND'
-AUTO_BIND_TLS_AFTER_BIND = 'TLS_AFTER_BIND'
-
-# server IP dual stack mode
-IP_SYSTEM_DEFAULT = 'IP_SYSTEM_DEFAULT'
-IP_V4_ONLY = 'IP_V4_ONLY'
-IP_V6_ONLY = 'IP_V6_ONLY'
-IP_V4_PREFERRED = 'IP_V4_PREFERRED'
-IP_V6_PREFERRED = 'IP_V6_PREFERRED'
-ADDRESS_INFO_REFRESH_TIME = 300 # seconds to wait before refreshing address info from dns
-
-# search scope
-BASE = 'BASE'
-LEVEL = 'LEVEL'
-SUBTREE = 'SUBTREE'
-
-# search alias
-DEREF_NEVER = 'NEVER'
-DEREF_SEARCH = 'SEARCH'
-DEREF_BASE = 'FINDING_BASE'
-DEREF_ALWAYS = 'ALWAYS'
-
-# search attributes
-ALL_ATTRIBUTES = '*'
-NO_ATTRIBUTES = '1.1' # as per RFC 4511
-ALL_OPERATIONAL_ATTRIBUTES = '+' # as per RFC 3673
-
-CASE_INSENSITIVE_ATTRIBUTE_NAMES = True
-CASE_INSENSITIVE_SCHEMA_NAMES = True
-
-# checks
-ATTRIBUTES_EXCLUDED_FROM_CHECK = [ALL_ATTRIBUTES,
- ALL_OPERATIONAL_ATTRIBUTES,
- NO_ATTRIBUTES,
- 'ldapSyntaxes',
- 'matchingRules',
- 'matchingRuleUse',
- 'dITContentRules',
- 'dITStructureRules',
- 'nameForms',
- 'altServer',
- 'namingContexts',
- 'supportedControl',
- 'supportedExtension',
- 'supportedFeatures',
- 'supportedCapabilities',
- 'supportedLdapVersion',
- 'supportedSASLMechanisms',
- 'vendorName',
- 'vendorVersion',
- 'subschemaSubentry']
-
-# modify type
-MODIFY_ADD = 'MODIFY_ADD'
-MODIFY_DELETE = 'MODIFY_DELETE'
-MODIFY_REPLACE = 'MODIFY_REPLACE'
-MODIFY_INCREMENT = 'MODIFY_INCREMENT'
-
-# client strategies
-SYNC = 'SYNC'
-ASYNC = 'ASYNC'
-LDIF = 'LDIF'
-RESTARTABLE = 'RESTARTABLE'
-REUSABLE = 'REUSABLE'
-MOCK_SYNC = 'MOCK_SYNC'
-MOCK_ASYNC = 'MOCK_ASYNC'
-
-CLIENT_STRATEGIES = [SYNC,
- ASYNC,
- LDIF,
- RESTARTABLE,
- REUSABLE,
- MOCK_SYNC]
-
-# get rootDSE info
-NONE = 'NO_INFO'
-DSA = 'DSA'
-SCHEMA = 'SCHEMA'
-ALL = 'ALL'
-
-OFFLINE_EDIR_8_8_8 = 'EDIR_8_8_8'
-OFFLINE_AD_2012_R2 = 'AD_2012_R2'
-OFFLINE_SLAPD_2_4 = 'SLAPD_2_4'
-OFFLINE_DS389_1_3_3 = 'DS389_1_3_3'
-
-# abstraction layer
-ABSTRACTION_OPERATIONAL_ATTRIBUTE_PREFIX = 'OPER_'
-
-# server pooling
-FIRST = 'FIRST'
-ROUND_ROBIN = 'ROUND_ROBIN'
-RANDOM = 'RANDOM'
-
-POOLING_STRATEGIES = [FIRST, ROUND_ROBIN, RANDOM]
-
-# communication
-SESSION_TERMINATED_BY_SERVER = 'TERMINATED_BY_SERVER'
-RESPONSE_COMPLETE = 'RESPONSE_FROM_SERVER_COMPLETE'
-RESPONSE_SLEEPTIME = 0.05 # seconds to wait while waiting for a response in asynchronous strategies
-RESPONSE_WAITING_TIMEOUT = 20 # waiting timeout for receiving a response in asynchronous strategies
-SOCKET_SIZE = 4096 # socket byte size
-CHECK_AVAILABILITY_TIMEOUT = 2.5 # default timeout for socket connect when checking availability
-
-# restartable strategy
-RESTARTABLE_SLEEPTIME = 2 # time to wait in a restartable strategy before retrying the request
-RESTARTABLE_TRIES = 30 # number of times to retry in a restartable strategy before giving up. Set to True for unlimited retries
-
-# reusable strategies (Threaded)
-TERMINATE_REUSABLE = 'TERMINATE_REUSABLE_CONNECTION'
-REUSABLE_THREADED_POOL_SIZE = 10
-REUSABLE_THREADED_LIFETIME = 3600 # 1 hour
-DEFAULT_THREADED_POOL_NAME = 'reusable_default_pool'
-
-# LDAP protocol
-LDAP_MAX_INT = 2147483647
-
-# LDIF
-LDIF_LINE_LENGTH = 78
-
-# result codes
-RESULT_SUCCESS = 0
-RESULT_OPERATIONS_ERROR = 1
-RESULT_PROTOCOL_ERROR = 2
-RESULT_TIME_LIMIT_EXCEEDED = 3
-RESULT_SIZE_LIMIT_EXCEEDED = 4
-RESULT_COMPARE_FALSE = 5
-RESULT_COMPARE_TRUE = 6
-RESULT_AUTH_METHOD_NOT_SUPPORTED = 7
-RESULT_STRONGER_AUTH_REQUIRED = 8
-RESULT_REFERRAL = 10
-RESULT_ADMIN_LIMIT_EXCEEDED = 11
-RESULT_UNAVAILABLE_CRITICAL_EXTENSION = 12
-RESULT_CONFIDENTIALITY_REQUIRED = 13
-RESULT_SASL_BIND_IN_PROGRESS = 14
-RESULT_NO_SUCH_ATTRIBUTE = 16
-RESULT_UNDEFINED_ATTRIBUTE_TYPE = 17
-RESULT_INAPPROPRIATE_MATCHING = 18
-RESULT_CONSTRAINT_VIOLATION = 19
-RESULT_ATTRIBUTE_OR_VALUE_EXISTS = 20
-RESULT_INVALID_ATTRIBUTE_SYNTAX = 21
-RESULT_NO_SUCH_OBJECT = 32
-RESULT_ALIAS_PROBLEM = 33
-RESULT_INVALID_DN_SYNTAX = 34
-RESULT_ALIAS_DEREFERENCING_PROBLEM = 36
-RESULT_INAPPROPRIATE_AUTHENTICATION = 48
-RESULT_INVALID_CREDENTIALS = 49
-RESULT_INSUFFICIENT_ACCESS_RIGHTS = 50
-RESULT_BUSY = 51
-RESULT_UNAVAILABLE = 52
-RESULT_UNWILLING_TO_PERFORM = 53
-RESULT_LOOP_DETECTED = 54
-RESULT_NAMING_VIOLATION = 64
-RESULT_OBJECT_CLASS_VIOLATION = 65
-RESULT_NOT_ALLOWED_ON_NON_LEAF = 66
-RESULT_NOT_ALLOWED_ON_RDN = 67
-RESULT_ENTRY_ALREADY_EXISTS = 68
-RESULT_OBJECT_CLASS_MODS_PROHIBITED = 69
-RESULT_AFFECT_MULTIPLE_DSAS = 71
-RESULT_OTHER = 80
-RESULT_LCUP_RESOURCES_EXHAUSTED = 113
-RESULT_LCUP_SECURITY_VIOLATION = 114
-RESULT_LCUP_INVALID_DATA = 115
-RESULT_LCUP_UNSUPPORTED_SCHEME = 116
-RESULT_LCUP_RELOAD_REQUIRED = 117
-RESULT_CANCELED = 118
-RESULT_NO_SUCH_OPERATION = 119
-RESULT_TOO_LATE = 120
-RESULT_CANNOT_CANCEL = 121
-RESULT_ASSERTION_FAILED = 122
-RESULT_AUTHORIZATION_DENIED = 123
-RESULT_E_SYNC_REFRESH_REQUIRED = 4096
-
-RESULT_CODES = {
- RESULT_SUCCESS: 'success',
- RESULT_OPERATIONS_ERROR: 'operationsError',
- RESULT_PROTOCOL_ERROR: 'protocolError',
- RESULT_TIME_LIMIT_EXCEEDED: 'timeLimitExceeded',
- RESULT_SIZE_LIMIT_EXCEEDED: 'sizeLimitExceeded',
- RESULT_COMPARE_FALSE: 'compareFalse',
- RESULT_COMPARE_TRUE: 'compareTrue',
- RESULT_AUTH_METHOD_NOT_SUPPORTED: 'authMethodNotSupported',
- RESULT_STRONGER_AUTH_REQUIRED: 'strongerAuthRequired',
- RESULT_REFERRAL: 'referral',
- RESULT_ADMIN_LIMIT_EXCEEDED: 'adminLimitExceeded',
- RESULT_UNAVAILABLE_CRITICAL_EXTENSION: 'unavailableCriticalExtension',
- RESULT_CONFIDENTIALITY_REQUIRED: 'confidentialityRequired',
- RESULT_SASL_BIND_IN_PROGRESS: 'saslBindInProgress',
- RESULT_NO_SUCH_ATTRIBUTE: 'noSuchAttribute',
- RESULT_UNDEFINED_ATTRIBUTE_TYPE: 'undefinedAttributeType',
- RESULT_INAPPROPRIATE_MATCHING: 'inappropriateMatching',
- RESULT_CONSTRAINT_VIOLATION: 'constraintViolation',
- RESULT_ATTRIBUTE_OR_VALUE_EXISTS: 'attributeOrValueExists',
- RESULT_INVALID_ATTRIBUTE_SYNTAX: 'invalidAttributeSyntax',
- RESULT_NO_SUCH_OBJECT: 'noSuchObject',
- RESULT_ALIAS_PROBLEM: 'aliasProblem',
- RESULT_INVALID_DN_SYNTAX: 'invalidDNSyntax',
- RESULT_ALIAS_DEREFERENCING_PROBLEM: 'aliasDereferencingProblem',
- RESULT_INAPPROPRIATE_AUTHENTICATION: 'inappropriateAuthentication',
- RESULT_INVALID_CREDENTIALS: 'invalidCredentials',
- RESULT_INSUFFICIENT_ACCESS_RIGHTS: 'insufficientAccessRights',
- RESULT_BUSY: 'busy',
- RESULT_UNAVAILABLE: 'unavailable',
- RESULT_UNWILLING_TO_PERFORM: 'unwillingToPerform',
- RESULT_LOOP_DETECTED: 'loopDetected',
- RESULT_NAMING_VIOLATION: 'namingViolation',
- RESULT_OBJECT_CLASS_VIOLATION: 'objectClassViolation',
- RESULT_NOT_ALLOWED_ON_NON_LEAF: 'notAllowedOnNonLeaf',
- RESULT_NOT_ALLOWED_ON_RDN: 'notAllowedOnRDN',
- RESULT_ENTRY_ALREADY_EXISTS: 'entryAlreadyExists',
- RESULT_OBJECT_CLASS_MODS_PROHIBITED: 'objectClassModsProhibited',
- RESULT_AFFECT_MULTIPLE_DSAS: 'affectMultipleDSAs',
- RESULT_OTHER: 'other',
- RESULT_LCUP_RESOURCES_EXHAUSTED: 'lcupResourcesExhausted',
- RESULT_LCUP_SECURITY_VIOLATION: 'lcupSecurityViolation',
- RESULT_LCUP_INVALID_DATA: 'lcupInvalidData',
- RESULT_LCUP_UNSUPPORTED_SCHEME: 'lcupUnsupportedScheme',
- RESULT_LCUP_RELOAD_REQUIRED: 'lcupReloadRequired',
- RESULT_CANCELED: 'canceled',
- RESULT_NO_SUCH_OPERATION: 'noSuchOperation',
- RESULT_TOO_LATE: 'tooLate',
- RESULT_CANNOT_CANCEL: 'cannotCancel',
- RESULT_ASSERTION_FAILED: 'assertionFailed',
- RESULT_AUTHORIZATION_DENIED: 'authorizationDenied',
- RESULT_E_SYNC_REFRESH_REQUIRED: 'e-syncRefreshRequired'
-}
-
-# do not raise exception for (in raise_exceptions connection mode)
-DO_NOT_RAISE_EXCEPTIONS = [RESULT_SUCCESS, RESULT_COMPARE_FALSE, RESULT_COMPARE_TRUE, RESULT_REFERRAL]
-
-# types for string and sequence
-if str != bytes: # python 3
- STRING_TYPES = (str, )
-else: # python 2
- STRING_TYPES = (str, unicode)
-
-from types import GeneratorType
-SEQUENCE_TYPES = (list, tuple, GeneratorType)
-
-# older and longer constants
-AUTH_ANONYMOUS = ANONYMOUS
-AUTH_SIMPLE = SIMPLE
-AUTH_SASL = SASL
-
-SEARCH_SCOPE_BASE_OBJECT = BASE
-SEARCH_SCOPE_SINGLE_LEVEL = LEVEL
-SEARCH_SCOPE_WHOLE_SUBTREE = SUBTREE
-
-SEARCH_NEVER_DEREFERENCE_ALIASES = DEREF_NEVER
-SEARCH_DEREFERENCE_IN_SEARCHING = DEREF_SEARCH
-SEARCH_DEREFERENCE_FINDING_BASE_OBJECT = DEREF_BASE
-SEARCH_DEREFERENCE_ALWAYS = DEREF_ALWAYS
-
-STRATEGY_SYNC = SYNC
-STRATEGY_ASYNC_THREADED = ASYNC
-STRATEGY_LDIF_PRODUCER = LDIF
-STRATEGY_SYNC_RESTARTABLE = RESTARTABLE
-STRATEGY_REUSABLE_THREADED = REUSABLE
-STRATEGY_MOCK_SYNC = MOCK_SYNC
-STRATEGY_MOCK_ASYNC = MOCK_SYNC
-
-POOLING_STRATEGY_FIRST = FIRST
-POOLING_STRATEGY_ROUND_ROBIN = ROUND_ROBIN
-POOLING_STRATEGY_RANDOM = RANDOM
-
-GET_NO_INFO = NONE
-GET_DSA_INFO = DSA
-GET_SCHEMA_INFO = SCHEMA
-GET_ALL_INFO = ALL
-
-# Hashed password
-HASHED_NONE = 'PLAIN'
-HASHED_SHA = 'SHA'
-HASHED_SHA256 = 'SHA256'
-HASHED_SHA384 = 'SHA384'
-HASHED_SHA512 = 'SHA512'
-HASHED_MD5 = 'MD5'
-HASHED_SALTED_SHA = 'SALTED_SHA'
-HASHED_SALTED_SHA256 = 'SALTED_SHA256'
-HASHED_SALTED_SHA384 = 'SALTED_SHA384'
-HASHED_SALTED_SHA512 = 'SALTED_SHA512'
-HASHED_SALTED_MD5 = 'SALTED_MD5'
-
-
-# centralized imports
-from .version import __author__, __version__, __email__, __description__, __status__, __license__, __url__
-from .core.server import Server
-from .core.connection import Connection
-from .core.tls import Tls
-from .core.pooling import ServerPool
-from .abstract import ObjectDef, AttrDef, Attribute, Entry, Reader, OperationalAttribute
-from .protocol.rfc4512 import DsaInfo, SchemaInfo
-
-# imports error Exceptions
-from .core.exceptions import LDAPException, LDAPExceptionError, LDAPSocketCloseError, LDAPReferralError, \
- LDAPAttributeError, LDAPBindError, LDAPCertificateError, LDAPChangesError, LDAPCommunicationError, LDAPConnectionIsReadOnlyError, \
- LDAPConnectionPoolNameIsMandatoryError, LDAPConnectionPoolNotStartedError, LDAPControlsError, LDAPEntryError, \
- LDAPInvalidDereferenceAliasesError, LDAPInvalidFilterError, LDAPInvalidScopeError, LDAPInvalidServerError, LDAPKeyError,\
- LDAPLDIFError, LDAPMetricsError, LDAPObjectClassError, LDAPObjectError, LDAPPasswordIsMandatoryError, LDAPReaderError,\
- LDAPSASLBindInProgressError, LDAPSASLMechanismNotSupportedError, LDAPSASLPrepError, LDAPSchemaError, LDAPServerPoolError, \
- LDAPServerPoolExhaustedError, LDAPSocketOpenError, LDAPSocketReceiveError, LDAPSocketSendError, LDAPSSLConfigurationError,\
- LDAPSSLNotSupportedError, LDAPStartTLSError, LDAPTypeError, LDAPUnknownAuthenticationMethodError, LDAPUnknownRequestError, \
- LDAPUnknownResponseError, LDAPUnknownStrategyError, LDAPDefinitionError, LDAPResponseTimeoutError, LDAPInvalidHashAlgorithmError
-
-# imports result code Exceptions
-from .core.exceptions import LDAPAdminLimitExceededResult, LDAPAffectMultipleDSASResult, LDAPAliasDereferencingProblemResult,\
- LDAPAliasProblemResult, LDAPAssertionFailedResult, LDAPAttributeOrValueExistsResult, LDAPAuthMethodNotSupportedResult, \
- LDAPAuthorizationDeniedResult, LDAPBusyResult, LDAPCanceledResult, LDAPCannotCancelResult, LDAPConfidentialityRequiredResult,\
- LDAPConstraintViolationResult, LDAPEntryAlreadyExistsResult, LDAPESyncRefreshRequiredResult, \
- LDAPInappropriateAuthenticationResult, LDAPInappropriateMatchingResult, LDAPInsufficientAccessRightsResult, \
- LDAPInvalidAttributeSyntaxResult, LDAPInvalidCredentialsResult, LDAPInvalidDNSyntaxResult, LDAPLCUPInvalidDataResult, \
- LDAPLCUPReloadRequiredResult, LDAPLCUPResourcesExhaustedResult, LDAPLCUPSecurityViolationResult, LDAPLCUPUnsupportedSchemeResult, \
- LDAPLoopDetectedResult, LDAPNamingViolationResult, LDAPNoSuchAttributeResult, LDAPNoSuchObjectResult, \
- LDAPNoSuchOperationResult, LDAPNotAllowedOnNotLeafResult, LDAPNotAllowedOnRDNResult, LDAPObjectClassModsProhibitedResult, \
- LDAPObjectClassViolationResult, LDAPOperationResult, LDAPOperationsErrorResult, LDAPOtherResult, LDAPProtocolErrorResult, \
- LDAPReferralResult, LDAPSASLBindInProgressResult, LDAPSizeLimitExceededResult, LDAPStrongerAuthRequiredResult, \
- LDAPTimeLimitExceededResult, LDAPTooLateResult, LDAPUnavailableCriticalExtensionResult, LDAPUnavailableResult, \
- LDAPUndefinedAttributeTypeResult, LDAPUnwillingToPerformResult, LDAPMaximumRetriesError, LDAPExtensionError, LDAPInvalidDnError, \
- LDAPPackageUnavailableError
+"""
+"""
+
+# Created on 2013.05.15
+#
+# Author: Giovanni Cannata
+#
+# Copyright 2015 Giovanni Cannata
+#
+# This file is part of ldap3.
+#
+# ldap3 is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# ldap3 is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with ldap3 in the COPYING and COPYING.LESSER files.
+# If not, see <http://www.gnu.org/licenses/>.
+
+# authentication
+ANONYMOUS = 'ANONYMOUS'
+SIMPLE = 'SIMPLE'
+SASL = 'SASL'
+NTLM = 'NTLM'
+
+# SASL MECHANISMS
+EXTERNAL = 'EXTERNAL'
+DIGEST_MD5 = 'DIGEST-MD5'
+KERBEROS = GSSAPI = 'GSSAPI'
+
+SASL_AVAILABLE_MECHANISMS = [EXTERNAL, DIGEST_MD5, GSSAPI]
+
+AUTO_BIND_NONE = 'NONE' # same as False
+AUTO_BIND_NO_TLS = 'NO_TLS' # same as True
+AUTO_BIND_TLS_BEFORE_BIND = 'TLS_BEFORE_BIND'
+AUTO_BIND_TLS_AFTER_BIND = 'TLS_AFTER_BIND'
+
+# server IP dual stack mode
+IP_SYSTEM_DEFAULT = 'IP_SYSTEM_DEFAULT'
+IP_V4_ONLY = 'IP_V4_ONLY'
+IP_V6_ONLY = 'IP_V6_ONLY'
+IP_V4_PREFERRED = 'IP_V4_PREFERRED'
+IP_V6_PREFERRED = 'IP_V6_PREFERRED'
+ADDRESS_INFO_REFRESH_TIME = 300 # seconds to wait before refreshing address info from dns
+
+# search scope
+BASE = 'BASE'
+LEVEL = 'LEVEL'
+SUBTREE = 'SUBTREE'
+
+# search alias
+DEREF_NEVER = 'NEVER'
+DEREF_SEARCH = 'SEARCH'
+DEREF_BASE = 'FINDING_BASE'
+DEREF_ALWAYS = 'ALWAYS'
+
+# search attributes
+ALL_ATTRIBUTES = '*'
+NO_ATTRIBUTES = '1.1' # as per RFC 4511
+ALL_OPERATIONAL_ATTRIBUTES = '+' # as per RFC 3673
+
+CASE_INSENSITIVE_ATTRIBUTE_NAMES = True # configurable parameter
+CASE_INSENSITIVE_SCHEMA_NAMES = True # configurable parameter
+
+# checks
+ATTRIBUTES_EXCLUDED_FROM_CHECK = [ALL_ATTRIBUTES,
+ ALL_OPERATIONAL_ATTRIBUTES,
+ NO_ATTRIBUTES,
+ 'ldapSyntaxes',
+ 'matchingRules',
+ 'matchingRuleUse',
+ 'dITContentRules',
+ 'dITStructureRules',
+ 'nameForms',
+ 'altServer',
+ 'namingContexts',
+ 'supportedControl',
+ 'supportedExtension',
+ 'supportedFeatures',
+ 'supportedCapabilities',
+ 'supportedLdapVersion',
+ 'supportedSASLMechanisms',
+ 'vendorName',
+ 'vendorVersion',
+ 'subschemaSubentry',
+ 'ACL']
+
+# modify type
+MODIFY_ADD = 'MODIFY_ADD'
+MODIFY_DELETE = 'MODIFY_DELETE'
+MODIFY_REPLACE = 'MODIFY_REPLACE'
+MODIFY_INCREMENT = 'MODIFY_INCREMENT'
+
+# client strategies
+SYNC = 'SYNC'
+ASYNC = 'ASYNC'
+LDIF = 'LDIF'
+RESTARTABLE = 'RESTARTABLE'
+REUSABLE = 'REUSABLE'
+MOCK_SYNC = 'MOCK_SYNC'
+MOCK_ASYNC = 'MOCK_ASYNC'
+
+CLIENT_STRATEGIES = [SYNC,
+ ASYNC,
+ LDIF,
+ RESTARTABLE,
+ REUSABLE,
+ MOCK_SYNC]
+
+# get rootDSE info
+NONE = 'NO_INFO'
+DSA = 'DSA'
+SCHEMA = 'SCHEMA'
+ALL = 'ALL'
+
+OFFLINE_EDIR_8_8_8 = 'EDIR_8_8_8'
+OFFLINE_AD_2012_R2 = 'AD_2012_R2'
+OFFLINE_SLAPD_2_4 = 'SLAPD_2_4'
+OFFLINE_DS389_1_3_3 = 'DS389_1_3_3'
+
+# abstraction layer
+ABSTRACTION_OPERATIONAL_ATTRIBUTE_PREFIX = 'OPER_' # configurable parameter
+
+# server pooling
+FIRST = 'FIRST'
+ROUND_ROBIN = 'ROUND_ROBIN'
+RANDOM = 'RANDOM'
+
+POOLING_STRATEGIES = [FIRST, ROUND_ROBIN, RANDOM]
+POOLING_LOOP_TIMEOUT = 10 # number of seconds to wait before restarting a cycle to find an active server in the pool - configurable parameter
+
+# communication
+SESSION_TERMINATED_BY_SERVER = 'TERMINATED_BY_SERVER'
+RESPONSE_COMPLETE = 'RESPONSE_FROM_SERVER_COMPLETE'
+RESPONSE_SLEEPTIME = 0.05 # seconds to wait while waiting for a response in asynchronous strategies - configurable parameter
+RESPONSE_WAITING_TIMEOUT = 20 # waiting timeout for receiving a response in asynchronous strategies - configurable parameter
+SOCKET_SIZE = 4096 # socket byte size - configurable parameter
+CHECK_AVAILABILITY_TIMEOUT = 2.5 # default timeout for socket connect when checking availability - configurable parameter
+
+# restartable strategy
+RESTARTABLE_SLEEPTIME = 2 # time to wait in a restartable strategy before retrying the request - configurable parameter
+RESTARTABLE_TRIES = 30 # number of times to retry in a restartable strategy before giving up. Set to True for unlimited retries - configurable parameter
+
+# reusable strategies (Threaded)
+TERMINATE_REUSABLE = 'TERMINATE_REUSABLE_CONNECTION'
+REUSABLE_THREADED_POOL_SIZE = 10 # configurable parameter
+REUSABLE_THREADED_LIFETIME = 3600 # 1 hour - configurable parameter
+DEFAULT_THREADED_POOL_NAME = 'reusable_default_pool'
+
+# LDAP protocol
+LDAP_MAX_INT = 2147483647
+
+# LDIF
+LDIF_LINE_LENGTH = 78
+
+# Hashed password
+HASHED_NONE = 'PLAIN'
+HASHED_SHA = 'SHA'
+HASHED_SHA256 = 'SHA256'
+HASHED_SHA384 = 'SHA384'
+HASHED_SHA512 = 'SHA512'
+HASHED_MD5 = 'MD5'
+HASHED_SALTED_SHA = 'SALTED_SHA'
+HASHED_SALTED_SHA256 = 'SALTED_SHA256'
+HASHED_SALTED_SHA384 = 'SALTED_SHA384'
+HASHED_SALTED_SHA512 = 'SALTED_SHA512'
+HASHED_SALTED_MD5 = 'SALTED_MD5'
+
+# result codes
+RESULT_SUCCESS = 0
+RESULT_OPERATIONS_ERROR = 1
+RESULT_PROTOCOL_ERROR = 2
+RESULT_TIME_LIMIT_EXCEEDED = 3
+RESULT_SIZE_LIMIT_EXCEEDED = 4
+RESULT_COMPARE_FALSE = 5
+RESULT_COMPARE_TRUE = 6
+RESULT_AUTH_METHOD_NOT_SUPPORTED = 7
+RESULT_STRONGER_AUTH_REQUIRED = 8
+RESULT_REFERRAL = 10
+RESULT_ADMIN_LIMIT_EXCEEDED = 11
+RESULT_UNAVAILABLE_CRITICAL_EXTENSION = 12
+RESULT_CONFIDENTIALITY_REQUIRED = 13
+RESULT_SASL_BIND_IN_PROGRESS = 14
+RESULT_NO_SUCH_ATTRIBUTE = 16
+RESULT_UNDEFINED_ATTRIBUTE_TYPE = 17
+RESULT_INAPPROPRIATE_MATCHING = 18
+RESULT_CONSTRAINT_VIOLATION = 19
+RESULT_ATTRIBUTE_OR_VALUE_EXISTS = 20
+RESULT_INVALID_ATTRIBUTE_SYNTAX = 21
+RESULT_NO_SUCH_OBJECT = 32
+RESULT_ALIAS_PROBLEM = 33
+RESULT_INVALID_DN_SYNTAX = 34
+RESULT_ALIAS_DEREFERENCING_PROBLEM = 36
+RESULT_INAPPROPRIATE_AUTHENTICATION = 48
+RESULT_INVALID_CREDENTIALS = 49
+RESULT_INSUFFICIENT_ACCESS_RIGHTS = 50
+RESULT_BUSY = 51
+RESULT_UNAVAILABLE = 52
+RESULT_UNWILLING_TO_PERFORM = 53
+RESULT_LOOP_DETECTED = 54
+RESULT_NAMING_VIOLATION = 64
+RESULT_OBJECT_CLASS_VIOLATION = 65
+RESULT_NOT_ALLOWED_ON_NON_LEAF = 66
+RESULT_NOT_ALLOWED_ON_RDN = 67
+RESULT_ENTRY_ALREADY_EXISTS = 68
+RESULT_OBJECT_CLASS_MODS_PROHIBITED = 69
+RESULT_AFFECT_MULTIPLE_DSAS = 71
+RESULT_OTHER = 80
+RESULT_LCUP_RESOURCES_EXHAUSTED = 113
+RESULT_LCUP_SECURITY_VIOLATION = 114
+RESULT_LCUP_INVALID_DATA = 115
+RESULT_LCUP_UNSUPPORTED_SCHEME = 116
+RESULT_LCUP_RELOAD_REQUIRED = 117
+RESULT_CANCELED = 118
+RESULT_NO_SUCH_OPERATION = 119
+RESULT_TOO_LATE = 120
+RESULT_CANNOT_CANCEL = 121
+RESULT_ASSERTION_FAILED = 122
+RESULT_AUTHORIZATION_DENIED = 123
+RESULT_E_SYNC_REFRESH_REQUIRED = 4096
+
+RESULT_CODES = {
+ RESULT_SUCCESS: 'success',
+ RESULT_OPERATIONS_ERROR: 'operationsError',
+ RESULT_PROTOCOL_ERROR: 'protocolError',
+ RESULT_TIME_LIMIT_EXCEEDED: 'timeLimitExceeded',
+ RESULT_SIZE_LIMIT_EXCEEDED: 'sizeLimitExceeded',
+ RESULT_COMPARE_FALSE: 'compareFalse',
+ RESULT_COMPARE_TRUE: 'compareTrue',
+ RESULT_AUTH_METHOD_NOT_SUPPORTED: 'authMethodNotSupported',
+ RESULT_STRONGER_AUTH_REQUIRED: 'strongerAuthRequired',
+ RESULT_REFERRAL: 'referral',
+ RESULT_ADMIN_LIMIT_EXCEEDED: 'adminLimitExceeded',
+ RESULT_UNAVAILABLE_CRITICAL_EXTENSION: 'unavailableCriticalExtension',
+ RESULT_CONFIDENTIALITY_REQUIRED: 'confidentialityRequired',
+ RESULT_SASL_BIND_IN_PROGRESS: 'saslBindInProgress',
+ RESULT_NO_SUCH_ATTRIBUTE: 'noSuchAttribute',
+ RESULT_UNDEFINED_ATTRIBUTE_TYPE: 'undefinedAttributeType',
+ RESULT_INAPPROPRIATE_MATCHING: 'inappropriateMatching',
+ RESULT_CONSTRAINT_VIOLATION: 'constraintViolation',
+ RESULT_ATTRIBUTE_OR_VALUE_EXISTS: 'attributeOrValueExists',
+ RESULT_INVALID_ATTRIBUTE_SYNTAX: 'invalidAttributeSyntax',
+ RESULT_NO_SUCH_OBJECT: 'noSuchObject',
+ RESULT_ALIAS_PROBLEM: 'aliasProblem',
+ RESULT_INVALID_DN_SYNTAX: 'invalidDNSyntax',
+ RESULT_ALIAS_DEREFERENCING_PROBLEM: 'aliasDereferencingProblem',
+ RESULT_INAPPROPRIATE_AUTHENTICATION: 'inappropriateAuthentication',
+ RESULT_INVALID_CREDENTIALS: 'invalidCredentials',
+ RESULT_INSUFFICIENT_ACCESS_RIGHTS: 'insufficientAccessRights',
+ RESULT_BUSY: 'busy',
+ RESULT_UNAVAILABLE: 'unavailable',
+ RESULT_UNWILLING_TO_PERFORM: 'unwillingToPerform',
+ RESULT_LOOP_DETECTED: 'loopDetected',
+ RESULT_NAMING_VIOLATION: 'namingViolation',
+ RESULT_OBJECT_CLASS_VIOLATION: 'objectClassViolation',
+ RESULT_NOT_ALLOWED_ON_NON_LEAF: 'notAllowedOnNonLeaf',
+ RESULT_NOT_ALLOWED_ON_RDN: 'notAllowedOnRDN',
+ RESULT_ENTRY_ALREADY_EXISTS: 'entryAlreadyExists',
+ RESULT_OBJECT_CLASS_MODS_PROHIBITED: 'objectClassModsProhibited',
+ RESULT_AFFECT_MULTIPLE_DSAS: 'affectMultipleDSAs',
+ RESULT_OTHER: 'other',
+ RESULT_LCUP_RESOURCES_EXHAUSTED: 'lcupResourcesExhausted',
+ RESULT_LCUP_SECURITY_VIOLATION: 'lcupSecurityViolation',
+ RESULT_LCUP_INVALID_DATA: 'lcupInvalidData',
+ RESULT_LCUP_UNSUPPORTED_SCHEME: 'lcupUnsupportedScheme',
+ RESULT_LCUP_RELOAD_REQUIRED: 'lcupReloadRequired',
+ RESULT_CANCELED: 'canceled',
+ RESULT_NO_SUCH_OPERATION: 'noSuchOperation',
+ RESULT_TOO_LATE: 'tooLate',
+ RESULT_CANNOT_CANCEL: 'cannotCancel',
+ RESULT_ASSERTION_FAILED: 'assertionFailed',
+ RESULT_AUTHORIZATION_DENIED: 'authorizationDenied',
+ RESULT_E_SYNC_REFRESH_REQUIRED: 'e-syncRefreshRequired'
+}
+
+# do not raise exception for (in raise_exceptions connection mode)
+DO_NOT_RAISE_EXCEPTIONS = [RESULT_SUCCESS, RESULT_COMPARE_FALSE, RESULT_COMPARE_TRUE, RESULT_REFERRAL]
+
+# types for string and sequence
+if str != bytes: # python 3
+ STRING_TYPES = (str, )
+else: # python 2
+ STRING_TYPES = (str, unicode)
+
+from types import GeneratorType
+SEQUENCE_TYPES = (list, tuple, GeneratorType)
+
+# older and longer constants
+AUTH_ANONYMOUS = ANONYMOUS
+AUTH_SIMPLE = SIMPLE
+AUTH_SASL = SASL
+
+SEARCH_SCOPE_BASE_OBJECT = BASE
+SEARCH_SCOPE_SINGLE_LEVEL = LEVEL
+SEARCH_SCOPE_WHOLE_SUBTREE = SUBTREE
+
+SEARCH_NEVER_DEREFERENCE_ALIASES = DEREF_NEVER
+SEARCH_DEREFERENCE_IN_SEARCHING = DEREF_SEARCH
+SEARCH_DEREFERENCE_FINDING_BASE_OBJECT = DEREF_BASE
+SEARCH_DEREFERENCE_ALWAYS = DEREF_ALWAYS
+
+STRATEGY_SYNC = SYNC
+STRATEGY_ASYNC_THREADED = ASYNC
+STRATEGY_LDIF_PRODUCER = LDIF
+STRATEGY_SYNC_RESTARTABLE = RESTARTABLE
+STRATEGY_REUSABLE_THREADED = REUSABLE
+STRATEGY_MOCK_SYNC = MOCK_SYNC
+STRATEGY_MOCK_ASYNC = MOCK_SYNC
+
+POOLING_STRATEGY_FIRST = FIRST
+POOLING_STRATEGY_ROUND_ROBIN = ROUND_ROBIN
+POOLING_STRATEGY_RANDOM = RANDOM
+
+GET_NO_INFO = NONE
+GET_DSA_INFO = DSA
+GET_SCHEMA_INFO = SCHEMA
+GET_ALL_INFO = ALL
+
+
+def get_config_parameter(parameter):
+ if parameter == 'CASE_INSENSITIVE_ATTRIBUTE_NAMES':
+ return CASE_INSENSITIVE_ATTRIBUTE_NAMES
+ elif parameter == 'CASE_INSENSITIVE_SCHEMA_NAMES':
+ return CASE_INSENSITIVE_SCHEMA_NAMES
+ elif parameter == 'ABSTRACTION_OPERATIONAL_ATTRIBUTE_PREFIX':
+ return ABSTRACTION_OPERATIONAL_ATTRIBUTE_PREFIX
+ elif parameter == 'POOLING_LOOP_TIMEOUT':
+ return POOLING_LOOP_TIMEOUT
+ elif parameter == 'RESPONSE_SLEEPTIME':
+ return RESPONSE_SLEEPTIME
+ elif parameter == 'RESPONSE_WAITING_TIMEOUT':
+ return RESPONSE_WAITING_TIMEOUT
+ elif parameter == 'SOCKET_SIZE':
+ return SOCKET_SIZE
+ elif parameter == 'CHECK_AVAILABILITY_TIMEOUT':
+ return CHECK_AVAILABILITY_TIMEOUT
+ elif parameter == 'RESTARTABLE_SLEEPTIME':
+ return RESTARTABLE_SLEEPTIME
+ elif parameter == 'RESTARTABLE_TRIES':
+ return RESTARTABLE_TRIES
+ elif parameter == 'REUSABLE_THREADED_POOL_SIZE':
+ return REUSABLE_THREADED_POOL_SIZE
+ elif parameter == 'REUSABLE_THREADED_LIFETIME':
+ return REUSABLE_THREADED_LIFETIME
+ elif parameter == 'DEFAULT_THREADED_POOL_NAME':
+ return DEFAULT_THREADED_POOL_NAME
+
+ raise LDAPConfigurationParameterError('configuration parameter %s not valid' % parameter)
+
+# centralized imports
+from .version import __author__, __version__, __email__, __description__, __status__, __license__, __url__
+from .core.server import Server
+from .core.connection import Connection
+from .core.tls import Tls
+from .core.pooling import ServerPool
+from .abstract import ObjectDef, AttrDef, Attribute, Entry, Reader, OperationalAttribute
+from .protocol.rfc4512 import DsaInfo, SchemaInfo
+
+# imports error Exceptions
+from .core.exceptions import LDAPException, LDAPExceptionError, LDAPConfigurationError, LDAPSocketCloseError, LDAPReferralError, \
+ LDAPAttributeError, LDAPBindError, LDAPCertificateError, LDAPChangesError, LDAPCommunicationError, LDAPConnectionIsReadOnlyError, \
+ LDAPConnectionPoolNameIsMandatoryError, LDAPConnectionPoolNotStartedError, LDAPControlsError, LDAPEntryError, \
+ LDAPInvalidDereferenceAliasesError, LDAPInvalidFilterError, LDAPInvalidScopeError, LDAPInvalidServerError, LDAPKeyError,\
+ LDAPLDIFError, LDAPMetricsError, LDAPObjectClassError, LDAPObjectError, LDAPPasswordIsMandatoryError, LDAPReaderError,\
+ LDAPSASLBindInProgressError, LDAPSASLMechanismNotSupportedError, LDAPSASLPrepError, LDAPSchemaError, LDAPServerPoolError, \
+ LDAPServerPoolExhaustedError, LDAPSocketOpenError, LDAPSocketReceiveError, LDAPSocketSendError, LDAPSSLConfigurationError,\
+ LDAPSSLNotSupportedError, LDAPStartTLSError, LDAPTypeError, LDAPUnknownAuthenticationMethodError, LDAPUnknownRequestError, \
+ LDAPUnknownResponseError, LDAPUnknownStrategyError, LDAPDefinitionError, LDAPResponseTimeoutError, LDAPInvalidHashAlgorithmError, \
+ LDAPSessionTerminatedByServerError, LDAPMaximumRetriesError, LDAPExtensionError, LDAPInvalidDnError, LDAPInvalidPortError, \
+ LDAPPackageUnavailableError, LDAPConfigurationParameterError, LDAPInvalidTlsSpecificationError
+
+# imports result code Exceptions
+from .core.exceptions import LDAPAdminLimitExceededResult, LDAPAffectMultipleDSASResult, LDAPAliasDereferencingProblemResult,\
+ LDAPAliasProblemResult, LDAPAssertionFailedResult, LDAPAttributeOrValueExistsResult, LDAPAuthMethodNotSupportedResult, \
+ LDAPAuthorizationDeniedResult, LDAPBusyResult, LDAPCanceledResult, LDAPCannotCancelResult, LDAPConfidentialityRequiredResult,\
+ LDAPConstraintViolationResult, LDAPEntryAlreadyExistsResult, LDAPESyncRefreshRequiredResult, \
+ LDAPInappropriateAuthenticationResult, LDAPInappropriateMatchingResult, LDAPInsufficientAccessRightsResult, \
+ LDAPInvalidAttributeSyntaxResult, LDAPInvalidCredentialsResult, LDAPInvalidDNSyntaxResult, LDAPLCUPInvalidDataResult, \
+ LDAPLCUPReloadRequiredResult, LDAPLCUPResourcesExhaustedResult, LDAPLCUPSecurityViolationResult, LDAPLCUPUnsupportedSchemeResult, \
+ LDAPLoopDetectedResult, LDAPNamingViolationResult, LDAPNoSuchAttributeResult, LDAPNoSuchObjectResult, \
+ LDAPNoSuchOperationResult, LDAPNotAllowedOnNotLeafResult, LDAPNotAllowedOnRDNResult, LDAPObjectClassModsProhibitedResult, \
+ LDAPObjectClassViolationResult, LDAPOperationResult, LDAPOperationsErrorResult, LDAPOtherResult, LDAPProtocolErrorResult, \
+ LDAPReferralResult, LDAPSASLBindInProgressResult, LDAPSizeLimitExceededResult, LDAPStrongerAuthRequiredResult, \
+ LDAPTimeLimitExceededResult, LDAPTooLateResult, LDAPUnavailableCriticalExtensionResult, LDAPUnavailableResult, \
+ LDAPUndefinedAttributeTypeResult, LDAPUnwillingToPerformResult
+
+
diff --git a/ldap3/abstract/entry.py b/ldap3/abstract/entry.py
index 9209e9e..1d5397c 100644
--- a/ldap3/abstract/entry.py
+++ b/ldap3/abstract/entry.py
@@ -1,200 +1,200 @@
-"""
-"""
-
-# Created on 2014.01.06
-#
-# Author: Giovanni Cannata
-#
-# Copyright 2015 Giovanni Cannata
-#
-# This file is part of ldap3.
-#
-# ldap3 is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# ldap3 is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with ldap3 in the COPYING and COPYING.LESSER files.
-# If not, see <http://www.gnu.org/licenses/>.
-
-from os import linesep
-import json
-from .. import STRING_TYPES
-from ..core.exceptions import LDAPKeyError, LDAPAttributeError, LDAPEntryError
-from ..utils.conv import check_json_dict, format_json, prepare_for_stream
-from ..protocol.rfc2849 import operation_to_ldif, add_ldif_header
-from ..utils.repr import to_stdout_encoding
-
-
-class Entry(object):
- """The Entry object contains a single entry from the result of an LDAP
- search. Attributes can be accessed either by sequence, by assignment
- or as dictionary keys. Keys are not case sensitive.
-
- The Entry object is read only
-
- - The DN is retrieved by get_entry_dn()
- - The Reader reference is in get_entry_reader()
- - Raw attributes values are retrieved by the get_raw_attributes() and
- get_raw_attribute() methods
-
- """
-
- def __init__(self, dn, reader):
- self.__dict__['_attributes'] = dict()
- self.__dict__['_dn'] = dn
- self.__dict__['_raw_attributes'] = None
- self.__dict__['_response'] = None
- self.__dict__['_reader'] = reader
-
- def __repr__(self):
- if self._dn:
- r = 'DN: ' + to_stdout_encoding(self._dn) + linesep
- if self._attributes:
- for attr in sorted(self._attributes):
- r += ' ' * 4 + repr(self._attributes[attr]) + linesep
- return r
- else:
- return object.__repr__(self)
-
- def __str__(self):
- return self.__repr__()
-
- def __iter__(self):
- for attribute in self._attributes:
- yield self._attributes[attribute]
- raise StopIteration
-
- def __contains__(self, item):
- return True if self.__getitem__(item) else False
-
- def __getattr__(self, item):
- if isinstance(item, STRING_TYPES):
- item = ''.join(item.split()).lower()
- for attr in self._attributes:
- if item == attr.lower():
- break
- else:
- raise LDAPKeyError('key not found')
- return self._attributes[attr]
-
- raise LDAPKeyError('key must be a string')
-
- def __setattr__(self, item, value):
- if item in self._attributes:
- raise LDAPAttributeError('attribute is read only')
- else:
- raise LDAPEntryError('entry is read only')
-
... 8802 lines suppressed ...
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-ldap3.git
More information about the Python-modules-commits
mailing list