HEX
Server: LiteSpeed
System: Linux shams.tasjeel.ae 5.14.0-611.5.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Nov 11 08:09:09 EST 2025 x86_64
User: infowars (1469)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: //lib64/python3.9/site-packages/slapdtest/__pycache__/_slapdtest.cpython-39.opt-1.pyc
a

�.dlL�@s6dZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
Z
ddlmZddl
mZdejd<ddlZej�ej�e��ZdZd	Zeej�d
d��d��Zd
evr�dZn
eed�Zdd�Zd&dd�Zdd�Z dd�Z!dd�Z"dd�Z#dd�Z$ej%ddfd d!�Z&Gd"d#�d#�Z'Gd$d%�d%e
j(�Z)dS)'zz
slapdtest - module for spawning test instances of OpenLDAP's slapd server

See https://www.python-ldap.org/ for details.
�N)�
SysLogHandler)�which)�
quote_plus�1Z
LDAPNOINITadn: cn=config
objectClass: olcGlobal
cn: config
olcServerID: %(serverid)s
olcLogLevel: %(loglevel)s
olcAllows: bind_v2
olcAuthzRegexp: {0}"gidnumber=%(root_gid)s\+uidnumber=%(root_uid)s,cn=peercred,cn=external,cn=auth" "%(rootdn)s"
olcAuthzRegexp: {1}"C=DE, O=python-ldap, OU=slapd-test, CN=([A-Za-z]+)" "ldap://ou=people,dc=local???($1)"
olcTLSCACertificateFile: %(cafile)s
olcTLSCertificateFile: %(servercert)s
olcTLSCertificateKeyFile: %(serverkey)s
olcTLSVerifyClient: try

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModuleLoad: back_%(database)s

dn: olcDatabase=%(database)s,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: %(database)s
olcSuffix: %(suffix)s
olcRootDN: %(rootdn)s
olcRootPW: %(rootpw)s
olcDbDirectory: %(directory)s
z	127.0.0.1�CI_DISABLED��:�LDAPIFZAF_UNIXcCs|S)zIdentity decorator

    �)Z	test_itemr
r
�:/usr/lib64/python3.9/site-packages/slapdtest/_slapdtest.py�identity?srcCs2tj�dd�st�|�S|tvr*t�|�StSdS)z@Skip test unless test case is executed on CI like Travis CI
    ZCIFN)�os�environ�get�unittest�skiprr)�reason�featurer
r
r�skip_unless_ciFs


rcCstjstddd�StSdS)zNDecorator for TLS tests

    Tests are not skipped on CI (e.g. Travis CI)
    ztest needs ldap.TLS_AVAILZTLS�rN)�ldapZ	TLS_AVAILrrr
r
r
r�requires_tlsRsrcCstjstddd�StSdS)Nztest needs ldap.SASL_AVAILZSASLr)r�
SASL_AVAILrrr
r
r
r�
requires_sasl]s
�rcCststddd�StSdS)Nz"test needs ldapi support (AF_UNIX)r	r)�
HAVE_LDAPIrrr
r
r
r�requires_ldapies
�rcCstjstddd�StSdS)Nztest needs ldap.INIT_FDZINIT_FDr)rZ
INIT_FD_AVAILrrr
r
r
r�requires_init_fdls
�rcCs>|�tj�}tjdkr2dD]}||vr|�|�qtj�|�S)z:Add /sbin and related directories to a command search path�win32)z/usr/local/sbinz/sbinz	/usr/sbin)�splitr
�pathsep�sys�platform�append�join)�pathZdirectoriesZsbinr
r
r�	_add_sbints
r%z%(levelname)s %(message)sz%%(asctime)s %(levelname)s %(message)sc	Cs�dtjvr4tjd}zt|�}Wnty2Yn0t�|�}|r�tj�d�r�tjd�	||f�d�}tj
jdtjd�}|�
|�|�|�|r�tj|d�}t��}|�
|�|�|�|�|�|S)z]
    Returns a combined SysLogHandler/StreamHandler logging instance
    with formatters
    ZLOGLEVELz/dev/log� )Zfmt)ZaddressZfacility)r
r�int�
ValueError�loggingZ	getLoggerr$�existsZ	Formatterr#�handlersrZ
LOG_DAEMONZsetFormatterZ
addHandlerZ
StreamHandlerZsetLevel)	Zlog_nameZ	log_levelZsys_log_formatZconsole_log_formatZ
new_loggerZmy_syslog_formatterZmy_syslog_handlerZmy_stream_formatterZmy_stream_handlerr
r
r�combined_logger}s0



��




r,c@s�eZdZdZeZdZdZdZdZ	dZ
eZdZ
dZej�d	e���Zd
ejvrXejd
Zn(ej�d�rjdZnej�d�r|dZnd
Zej�dej�dej��Zej�dee��Zed�Zdd�Zedd��Zedd��Z edd��Z!dd�Z"dKdd�Z#dd �Z$d!d"�Z%d#d$�Z&d%d&�Z'd'd(�Z(d)d*�Z)d+d,�Z*d-d.�Z+d/d0�Z,d1d2�Z-d3d4�Z.d5d6�Z/d7d8�Z0d9d:�Z1dLd;d<�Z2dMd=d>�Z3dNd?d@�Z4dOdAdB�Z5dPdCdD�Z6dQdEdF�Z7dGdH�Z8dIdJ�Z9d
S)R�SlapdObjecta�
    Controller class for a slapd instance, OpenLDAP's server.

    This class creates a temporary data store for slapd, runs it
    listening on a private Unix domain socket and TCP port,
    and initializes it with a top-level entry and the root user.

    When a reference to an instance of this class is lost, the slapd
    server is shut down.

    An instance can be used as a context manager. When exiting the context
    manager, the slapd server is shut down and the temporary data store is
    removed.

    :param openldap_schema_files: A list of schema names or schema paths to
        load at startup. By default this only contains `core`.

    .. versionchanged:: 3.1

        Added context manager functionality
    Zmdbz#dc=slapd-test,dc=python-ldap,dc=orgZManager�passwordzstats stats2)�slapd.d)z	core.ldifZTMPZSCHEMAz/etc/openldap/schemaz/etc/ldap/schemaN�BIN�PATH�SBINzpython-ldap-testcCs d|_|��|_|jd|_tj�|jd|j�|_tj�|jd�|_	tj�|jd�|_
d|j|jf|_t
r�tj�|jd�}dt|�|_|j|_tj|_nd|_|j|_d|_|��|jdur�td	��tj�td
�|_tj�td�|_tj�td�|_tj�td
�|_tj�td�|_dS)Nizpython-ldap-test-%dr/z
openldap-dataz
ldap://%s:%d/Zldapiz
ldapi://%sFz,SCHEMADIR is None, ldap schemas are missing.zcerts/ca.pemzcerts/server.pemzcerts/server.keyzcerts/client.pemzcerts/client.key)�_proc�_avail_tcp_port�_port�	server_idr
r$r#�TMPDIR�
testrundir�_slapd_conf�
_db_directory�
local_host�ldap_urirr�	ldapi_uri�default_ldap_urirr�cli_sasl_external�_find_commands�	SCHEMADIRr(�HERE�cafile�
servercert�	serverkeyZ
clientcertZ	clientkey)�selfZ
ldapi_pathr
r
r�__init__�s.


zSlapdObject.__init__cCsdj|d�S)Nzcn={self.root_cn},{self.suffix}�rF)�formatrHr
r
r�root_dn�szSlapdObject.root_dncCs|jS�N)r;rHr
r
r�hostname�szSlapdObject.hostnamecCs|jSrK)r5rHr
r
r�port�szSlapdObject.portcCsf|�d�|_|�d�|_|�d�|_|�d�|_|�d�|_tj�dd�|_	|j	sb|jddd	�|_	dS)
N�ldapadd�
ldapdelete�
ldapmodify�
ldapwhoami�slapaddZSLAPDZslapdT)�in_sbin)
�
_find_command�PATH_LDAPADD�PATH_LDAPDELETE�PATH_LDAPMODIFY�PATH_LDAPWHOAMI�PATH_SLAPADDr
rr�
PATH_SLAPDrHr
r
rr@szSlapdObject._find_commandsFcCsB|r|j}d}n
|j}d}t||d�}|dur>td�||���|S)Nr2r0)r$z\Command '{}' not found. Set the {} environment variable to override slapdtest's search path.)�	SBIN_PATH�BIN_PATHrr(rI)rF�cmdrSr$Zvar_nameZcommandr
r
rrTs��zSlapdObject._find_commandcCs(t�|j�t�|j�|�|j�dS)z�
        creates rundir structure

        for setting up a custom directory structure you have to override
        this method
        N)r
�mkdirr8r:�_create_sub_dirs�testrunsubdirsrHr
r
r�setup_rundirszSlapdObject.setup_rundirc	Cs�ddl}ddl}|j�|j�s"dS|j�d|j�|j|jdd�D]v\}}}|D]0}|j�d|j�||��|�	|j�||��qP|D]0}|j�d|j�||��|�
|j�||��q�qB|�
|j�|j�d|j�dS)	zH
        Recursively delete whole directory specified by `path'
        rNzclean-up %sF)�topdownz	remove %szrmdir %sz
cleaned-up %s)r
Zos.pathr$r*r8�_log�debug�walkr#�remove�rmdir�info)rFr
�dirpath�dirnames�	filenames�filename�dirnamer
r
r�_cleanup_rundir&s �zSlapdObject._cleanup_rundircCsNt��}z(|�|jdf�|��d}W|��n
|��0|j�d|�|S)z;
        find an available port for TCP connection
        r�zFound available port %d)�socketZbindr;Zgetsockname�closercrh)rFZsockrMr
r
rr4=szSlapdObject._avail_tcp_portc
CsHt|j�|j|j|j|j|j|jt�	�t�
�|j|j|j
d�}|j|S)z�
        generates a slapd.conf and returns it as one string

        for generating specific static configuration files you have to
        override this method
        )ZserveridZloglevel�databaseZ	directory�suffixZrootdnZrootpwZroot_uidZroot_gidrCrDrE)�hexr6�slapd_loglevelrrr:rsrJ�root_pwr
�getuid�getgidrCrDrE�slapd_conf_template)rFZconfig_dictr
r
r�
gen_configJs�zSlapdObject.gen_configcCs6|D],}tj�|j|�}|j�d|�t�|�qdS)z@
        create sub-directories beneath self.testrundir
        zCreate directory %sN)r
r$r#r8rcrdr^)rFZ	dir_namesZdnameZdir_namer
r
rr_aszSlapdObject._create_sub_dirscsf�j�d�j������dg��fdd��jD�}|D]}��ddd|g�q:�j�d�j�dS)z Loads the slapd.d configuration.zimporting configuration: %sz-n0cs,g|]$}tj�|�r|ntj��j|��qSr
)r
r$r*r#rA)�.0ZschemarHr
r�
<listcomp>os�
�z-SlapdObject._write_config.<locals>.<listcomp>Nz-lz
import ok: %s)rcrdr9rRrz�openldap_schema_files)rFZ
ldif_pathsZ	ldif_pathr
rHr�
_write_configjs
�zSlapdObject._write_configcCsv|j�d|j�|jdd|jddddg}tj|tjtjd�}|jd	krb|j�	|j
�d
��td��|j�
d|j�dS)
Nztesting config %sz-Ttest�-Fz-uz-v�-dZconfig)�stdout�stderrr�utf-8zconfiguration test failedz
config ok: %s)rcrdr9rZ�
subprocess�run�PIPEZSTDOUT�
returncode�errorr��decode�RuntimeErrorrh)rFZ
popen_list�pr
r
r�_test_configzs"��
zSlapdObject._test_configcCs|jg}|jr|�|j�|jd|jdd�|�g}|j�tj	�rP|�
ddg�n|�
ddg�|j�dd�|��t�
|�|_t��d}|j��d	ur�|��td
��z|j�d|j�|��Wn,ty�t��|kr�Yq�t�d�Yq�0d	Sq�td
��d	S)z0
        Spawns/forks the slapd process
        rz-hr&r�z-1�0zstarting slapd: %r�
Nz slapd exited before opening portzslapd connection check to %sg�������?zslapd did not start properly)r<r=r"rZr9r#rc�isEnabledForr)�DEBUG�extendrhr��Popenr3�time�	monotonicZpoll�_stoppedr�rdr>rQ�sleep)rFZurlsZ
slapd_argsZdeadliner
r
r�_start_slapd�s6
��zSlapdObject._start_slapdcCs\|jdurXt�|j�|��|��|��|��|��|j	�
d|jj|j|j
�dS)zW
        Starts the slapd server process running, and waits for it to come up.
        Nz(slapd with pid=%d listening on %s and %s)r3�atexit�register�stoprnrar~r�r�rcrd�pidr<r=rHr
r
r�start�s
�zSlapdObject.startcCsF|jdur.|j�d|jj�|j��|��|��t�|j	�dS)zU
        Stops the slapd server, and waits for it to terminate and cleans up
        Nzstopping slapd with pid %d)
r3rcrdr��	terminate�waitrnr�Z
unregisterr�rHr
r
rr��s

zSlapdObject.stopcCs|j��|��|��dS)z:
        Restarts the slapd server with same data
        N)r3r�r�r�rHr
r
r�restart�s
zSlapdObject.restartcCs|jr|j��|��dS)z3Waits for the slapd process to terminate by itself.N)r3r�r�rHr
r
rr��s
zSlapdObject.waitcCs&|jdur"|j�d|jj�d|_dS)z8Called when the slapd server is known to have terminatedNzslapd[%d] terminated)r3rcrhr�rHr
r
rr��s
zSlapdObject._stoppedcCs>|jr(ddg}|j�tj�s:|�d�ndd|jd|jg}|S)Nz-YZEXTERNALz-Qz-xz-Dz-w)r?rcr�r)r�r"rJrv)rFZ
authc_argsr
r
r�_cli_auth_args�s��zSlapdObject._cli_auth_argsc	Cs�|dur|j}|�d�d�d�r6|d|g|��}n|d|jg}||pJg7}|j�dd�|��tj	|tj
tj
tj
d�}|j�d	|�|�|�\}}|dur�|j�d
|�|dur�|j�d|�|��dkr�t
d
�|||���||fS)N�/���rz-HrzRun command: %rr&)�stdinr�r�z
stdin_data=%rzstdout_data=%rzstderr_data=%rrz{!r} process failed:
{!r}
{!r})r>r�
startswithr�r9rcrdr#r�r�r�Zcommunicater�r�rI)	rFZldapcommand�
extra_argsr<�
stdin_data�args�procZstdout_dataZstderr_datar
r
r�
_cli_popen�s0
���zSlapdObject._cli_popencCs|j|j|d�dS)z8
        Runs ldapwhoami on this slapd instance
        �r�N)r�rX)rFr�r
r
rrQszSlapdObject.ldapwhoamicCs|j|j||�d�d�dS�zR
        Runs ldapadd on this slapd instance, passing it the ldif content
        r�)r�r�N)r�rU�encode�rFZldifr�r
r
rrNs
�zSlapdObject.ldapaddcCs|j|j||�d�d�dSr�)r�rWr�r�r
r
rrP"s
�zSlapdObject.ldapmodifycCs8|durg}|r|�d�|�|�|j|j|d�dS)zG
        Runs ldapdelete on this slapd instance, deleting 'dn'
        Nz-rr�)r"r�rV)rFZdn�	recursiver�r
r
rrO)s

zSlapdObject.ldapdeletecCs$|j|j|r|�d�nd|d�dS)zR
        Runs slapadd on this slapd instance, passing it the ldif content
        r�N)r�r�)r�rYr�r�r
r
rrR4s
�zSlapdObject.slapaddcCs|��|SrK)r�rHr
r
r�	__enter__>szSlapdObject.__enter__cCs|��dSrK)r�)rF�exc_type�	exc_value�	tracebackr
r
r�__exit__BszSlapdObject.__exit__)F)NNN)N)N)N)FN)N):�__name__�
__module__�__qualname__�__doc__�SLAPD_CONF_TEMPLATEryrrrsZroot_cnrvru�	LOCALHOSTr;r`r}r
rr�getcwdr7rAr$�isdir�defpathr\r%r[r,rcrG�propertyrJrLrMr@rTrarnr4rzr_r~r�r�r�r�r�r�r�r�r�rQrNrPrOrRr�r�r
r
r
rr-�sl
 




	'�






r-c@s>eZdZdZeZdZdZd	dd�Ze	dd��Z
e	dd��ZdS)
�
SlapdTestCasezE
    test class which also clones or initializes a running slapd
    NcKs<|j|jjfi|��}d|_|�|p*|jj|p4|jj�|S)z@
        return a LDAPObject instance after simple bind
        �)�ldap_object_class�serverr<Zprotocol_versionZ
simple_bind_srJrv)rFZwhoZcred�kwargsZ	ldap_connr
r
r�_open_ldap_connOszSlapdTestCase._open_ldap_conncCs|��|_|j��dSrK)�server_classr�r���clsr
r
r�
setUpClassYs
zSlapdTestCase.setUpClasscCs|j��dSrK)r�r�r�r
r
r�
tearDownClass^szSlapdTestCase.tearDownClass)NN)r�r�r�r�r-r�r�r�r��classmethodr�r�r
r
r
rr�Fs


r�)N)*r�r
rpr r�r�r)r�Zlogging.handlersrr�shutilr�urllib.parserrrr$�abspathrm�__file__rBr�r��setrrrr�hasattrrrrrrrr%ZWARNr,r-ZTestCaser�r
r
r
r�<module>sH


�
$(