123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- """
- """
-
- # Created on 2015.03.27
- #
- # Author: Giovanni Cannata
- #
- # Copyright 2015 - 2018 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/>.
-
- import ctypes
-
- from pyasn1.type.namedtype import NamedTypes, NamedType
- from pyasn1.type.tag import Tag, tagClassApplication, tagFormatConstructed
- from pyasn1.type.univ import Sequence, OctetString, Integer
- from .rfc4511 import ResultCode, LDAPString
- from .controls import build_control
-
-
- class SicilyBindResponse(Sequence):
- # SicilyBindResponse ::= [APPLICATION 1] SEQUENCE {
- #
- # resultCode ENUMERATED {
- # success (0),
- # protocolError (2),
- # adminLimitExceeded (11),
- # inappropriateAuthentication (48),
- # invalidCredentials (49),
- # busy (51),
- # unavailable (52),
- # unwillingToPerform (53),
- # other (80) },
- #
- # serverCreds OCTET STRING,
- # errorMessage LDAPString }
- # BindResponse ::= [APPLICATION 1] SEQUENCE {
- # COMPONENTS OF LDAPResult,
- # serverSaslCreds [7] OCTET STRING OPTIONAL }
- tagSet = Sequence.tagSet.tagImplicitly(Tag(tagClassApplication, tagFormatConstructed, 1))
- componentType = NamedTypes(NamedType('resultCode', ResultCode()),
- NamedType('serverCreds', OctetString()),
- NamedType('errorMessage', LDAPString())
- )
-
-
- class DirSyncControlRequestValue(Sequence):
- # DirSyncRequestValue ::= SEQUENCE {
- # Flags integer
- # MaxBytes integer
- # Cookie OCTET STRING }
- componentType = NamedTypes(NamedType('Flags', Integer()),
- NamedType('MaxBytes', Integer()),
- NamedType('Cookie', OctetString())
- )
-
-
- class DirSyncControlResponseValue(Sequence):
- # DirSyncResponseValue ::= SEQUENCE {
- # MoreResults INTEGER
- # unused INTEGER
- # CookieServer OCTET STRING
- # }
- componentType = NamedTypes(NamedType('MoreResults', Integer()),
- NamedType('unused', Integer()),
- NamedType('CookieServer', OctetString())
- )
-
-
- class SdFlags(Sequence):
- # SDFlagsRequestValue ::= SEQUENCE {
- # Flags INTEGER
- # }
- componentType = NamedTypes(NamedType('Flags', Integer())
- )
-
-
- class ExtendedDN(Sequence):
- # A flag value 0 specifies that the GUID and SID values be returned in hexadecimal string
- # A flag value of 1 will return the GUID and SID values in standard string format
- componentType = NamedTypes(NamedType('option', Integer())
- )
-
-
- def dir_sync_control(criticality, object_security, ancestors_first, public_data_only, incremental_values, max_length, cookie):
- control_value = DirSyncControlRequestValue()
- flags = 0x0
- if object_security:
- flags |= 0x00000001
-
- if ancestors_first:
- flags |= 0x00000800
-
- if public_data_only:
- flags |= 0x00002000
-
- if incremental_values:
- flags |= 0x80000000
- # converts flags to signed 32 bit (AD expects a 4 bytes long unsigned integer, but ASN.1 Integer type is signed
- # so the BER encoder gives back a 5 bytes long signed integer
- flags = ctypes.c_long(flags & 0xFFFFFFFF).value
-
- control_value.setComponentByName('Flags', flags)
- control_value.setComponentByName('MaxBytes', max_length)
- if cookie:
- control_value.setComponentByName('Cookie', cookie)
- else:
- control_value.setComponentByName('Cookie', OctetString(''))
- return build_control('1.2.840.113556.1.4.841', criticality, control_value)
-
-
- def extended_dn_control(criticality=False, hex_format=False):
- control_value = ExtendedDN()
- control_value.setComponentByName('option', Integer(not hex_format))
- return build_control('1.2.840.113556.1.4.529', criticality, control_value)
-
-
- def show_deleted_control(criticality=False):
- return build_control('1.2.840.113556.1.4.417', criticality, value=None)
-
-
- def security_descriptor_control(criticality=False, sdflags=0x0F):
- sdcontrol = SdFlags()
- sdcontrol.setComponentByName('Flags', sdflags)
- return [build_control('1.2.840.113556.1.4.801', criticality, sdcontrol)]
|