HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //usr/lib64/python3.6/site-packages/slapdtest/__pycache__/_slapdtest.cpython-36.opt-1.pyc
3

�`a�M�@s<dZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlZdej
d<ddlZddlmZmZejjejje��ZdZd	Zeej
jd
d�jd��Zd
ekr�dZn
eed�Zdd�Zd&dd�Z dd�Z!dd�Z"dd�Z#dd�Z$dd�Z%ej&ddfd d!�Z'Gd"d#�d#e(�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.
�)�unicode_literalsN)�
SysLogHandler�1Z
LDAPNOINIT)�
quote_plus�whicha|
serverID %(serverid)s
moduleload back_%(database)s
%(include_directives)s
loglevel %(loglevel)s
allow bind_v2

authz-regexp
  "gidnumber=%(root_gid)s\\+uidnumber=%(root_uid)s,cn=peercred,cn=external,cn=auth"
  "%(rootdn)s"

database %(database)s
directory "%(directory)s"
suffix "%(suffix)s"
rootdn "%(rootdn)s"
rootpw "%(rootpw)s"

TLSCACertificateFile "%(cafile)s"
TLSCertificateFile "%(servercert)s"
TLSCertificateKeyFile "%(serverkey)s"
# ignore missing client cert but fail with invalid client cert
TLSVerifyClient try

authz-regexp
    "C=DE, O=python-ldap, OU=slapd-test, CN=([A-Za-z]+)"
    "ldap://ou=people,dc=local???($1)"

z	127.0.0.1�CI_DISABLED��:�LDAPIFZAF_UNIXcCs|S)zIdentity decorator

    �)Z	test_itemrr�"/usr/lib64/python3.6/_slapdtest.py�identityCsr
cCs2tjjdd�stj|�S|tkr*tj|�StSdS)z@Skip test unless test case is executed on CI like Travis CI
    ZCIFN)�os�environ�get�unittest�skiprr
)�reason�featurerrr�skip_unless_ciJs


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
rrrr�requires_tlsVsrcCstjstddd�StSdS)Nztest needs ldap.SASL_AVAILZSASL)r)r�
SASL_AVAILrr
rrrr�
requires_saslas
rcCststddd�StSdS)Nz"test needs ldapi support (AF_UNIX)r
)r)�
HAVE_LDAPIrr
rrrr�requires_ldapiis
rcCstjstddd�StSdS)Nztest needs ldap.INIT_FDZINIT_FD)r)rZ
INIT_FD_AVAILrr
rrrr�requires_init_fdps
rcCsB|jtj�}tjdkr6xdD]}||kr|j|�qWtjj|�S)z:Add /sbin and related directories to a command search pathZwin32�/usr/local/sbin�/sbin�	/usr/sbin)rrr)�splitr�pathsep�sys�platform�append�join)�pathZdirectoriesZsbinrrr�	_add_sbinxs

r'z%(levelname)s %(message)sz%%(asctime)s %(levelname)s %(message)sc	Cs�dtjkr6tjd}yt|�}Wntk
r4YnXtj|�}|r�tjjd�r�tjdj	||f�d�}tj
jdtjd�}|j
|�|j|�|r�tj|d�}tj�}|j
|�|j|�|j|�|S)z]
    Returns a combined SysLogHandler/StreamHandler logging instance
    with formatters
    ZLOGLEVELz/dev/log� )Zfmt)ZaddressZfacility)rr�int�
ValueError�loggingZ	getLoggerr&�existsZ	Formatterr%ZhandlersrZ
LOG_DAEMONZsetFormatterZ
addHandlerZ
StreamHandlerZsetLevel)	Zlog_nameZ	log_levelZsys_log_formatZconsole_log_formatZ
new_loggerZmy_syslog_formatterZmy_syslog_handlerZmy_stream_formatterZmy_stream_handlerrrr�combined_logger�s,









r-c@s�eZdZdZeZdZdZdZdZ	dZ
eZdLZ
dMZejjd	ej��Zd
ejkrXejd
Zn(ejjd�rjdZnejjd�r|dZnd
Zejjdejjdej��Zejjdee��ZdZed�Zdd�Zedd��Z edd��Z!edd��Z"dd�Z#dNdd�Z$d d!�Z%d"d#�Z&d$d%�Z'd&d'�Z(d(d)�Z)d*d+�Z*d,d-�Z+d.d/�Z,d0d1�Z-d2d3�Z.d4d5�Z/d6d7�Z0d8d9�Z1d:d;�Z2d<d=�Z3dOd>d?�Z4dPd@dA�Z5dQdBdC�Z6dRdDdE�Z7dSdFdG�Z8dHdI�Z9dJdK�Z:d
S)T�SlapdObjectaO
    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.

    .. versionchanged:: 3.1

        Added context manager functionality
    Zmdbz#dc=slapd-test,dc=python-ldap,dc=orgZManagerZpasswordzstats stats2�schema�core.schemaZTMPZSCHEMAz/etc/openldap/schemaz/etc/ldap/schemaN�BIN�PATH�SBINg�?zpython-ldap-testcCs2d|_|j�|_|jd|_tjj|jd|j�|_tjj|jd�|_	tjj|jd�|_
tjj|jd�|_d|j|jf|_
tr�tjj|jd�}dt|�|_|j|_tj|_nd|_|j
|_d	|_|j�|jdkr�td
��tjjtd�|_tjjtd�|_tjjtd
�|_tjjtd�|_tjjtd�|_dS)Nizpython-ldap-test-%dr/z
slapd.confz
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_idrr&r%�TMPDIR�
testrundir�_schema_prefix�_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_pathrrr�__init__�s0


zSlapdObject.__init__cCsdj|d�S)Nzcn={self.root_cn},{self.suffix})rH)�format)rHrrr�root_dn�szSlapdObject.root_dncCs|jS)N)r=)rHrrr�hostname�szSlapdObject.hostnamecCs|jS)N)r6)rHrrr�portszSlapdObject.portcCsZ|jd�|_|jd�|_|jd�|_|jd�|_tjjdd�|_|jsV|jddd�|_dS)	N�ldapadd�
ldapdelete�
ldapmodify�
ldapwhoamiZSLAPDZslapdT)�in_sbin)	�
_find_command�PATH_LDAPADD�PATH_LDAPDELETE�PATH_LDAPMODIFY�PATH_LDAPWHOAMIrrr�
PATH_SLAPD)rHrrrrBszSlapdObject._find_commandsFcCsB|r|j}d}n
|j}d}t||d�}|dkr>tdj||���|S)Nr3r1)r&z\Command '{}' not found. Set the {} environment variable to override slapdtest's search path.)�	SBIN_PATH�BIN_PATHrr*rJ)rH�cmdrRr&Zvar_nameZcommandrrrrSs
zSlapdObject._find_commandcCs8tj|j�tj|j�|j|j�|j|j|j�dS)z�
        creates rundir structure

        for setting up a custom directory structure you have to override
        this method
        N)	r�mkdirr9r<�_create_sub_dirs�testrunsubdirs�_ln_schema_files�openldap_schema_filesrC)rHrrr�setup_rundirszSlapdObject.setup_rundircCs�ddl}ddl}|jj|j�s"dS|jjd|j�x�|j|jdd�D]~\}}}x8|D]0}|jjd|jj||��|j	|jj||��qTWx8|D]0}|jjd|jj||��|j
|jj||��q�WqDW|j
|j�|jjd|j�dS)	zH
        Recursively delete whole directory specified by `path'
        rNzclean-up %sF)�topdownz	remove %szrmdir %sz
cleaned-up %s)rZos.pathr&r,r9�_log�debug�walkr%�remove�rmdir�info)rHr�dirpathZdirnames�	filenames�filename�dirnamerrr�_cleanup_rundir+s

zSlapdObject._cleanup_rundircCsFtj�}z |j|jdf�|j�d}Wd|j�X|jjd|�|S)z;
        find an available port for TCP connection
        r�NzFound available port %d)�socketZbindr=Zgetsockname�closercrh)rHZsockrMrrrr5Bs
zSlapdObject._avail_tcp_portcshdj�fdd��jD��}t�j��j|�j�j�j�j�j	�j
tj�tj
��j�j�jd�}�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
        �
c3s|]}dj�j|d�VqdS)z'include "{schema_prefix}/{schema_file}")�
schema_prefix�schema_fileN)rJr:)�.0rs)rHrr�	<genexpr>Wsz)SlapdObject.gen_config.<locals>.<genexpr>)Zserveridrr�include_directivesZloglevel�databaseZ	directory�suffixZrootdnZrootpwZroot_uidZroot_gidrErFrG)r%r`�hexr7r:�slapd_loglevelrwr<rxrK�root_pwr�getuid�getgidrErFrG�slapd_conf_template)rHrvZconfig_dictr)rHr�
gen_configOs$

zSlapdObject.gen_configcCs:x4|D],}tjj|j|�}|jjd|�tj|�qWdS)z@
        create sub-directories beneath self.testrundir
        zCreate directory %sN)rr&r%r9rcrdr\)rHZ	dir_namesZdnameZdir_namerrrr]os
zSlapdObject._create_sub_dirscCsLxF|D]>}tjj||�}tjj|j|�}|jjd||�tj||�qWdS)z?
        write symbolic links to original schema files
        zCreate symlink %s -> %sN)rr&r%r:rcrd�symlink)rHZ
file_namesZ
source_dirZfnameZ	ln_sourceZ	ln_targetrrrr_xs

zSlapdObject._ln_schema_filesc
CsJ|jjd|j�t|jd��}|j|j��WdQRX|jjd|j�dS)z;Writes the slapd.conf file out, and returns the path to it.zWriting config to %s�wNzWrote config to %s)rcrdr;�open�writerrh)rHZconfig_filerrr�
_write_config�szSlapdObject._write_configcCs�|jjd|j�|jdd|jdg}|jjtj�rJ|jd�|jddg�n
|jd�t	j
|�}|j�d	krrtd
��|jj
d|j�dS)Nztesting config %sz-Ttestz-fz-uz-vz-d�configz-Qrzconfiguration test failedz
config ok: %s)rcrdr;rX�isEnabledForr+�DEBUGr$�extend�
subprocess�Popen�wait�RuntimeErrorrh)rHZ
popen_list�procrrr�_test_config�s


zSlapdObject._test_configcCs|jg}|jr|j|j�|jd|jd|jddj|�g}|jjt	j
�rV|jddg�n|jddg�|jjddj|��t
j|�|_xptd	�D]d}|jj�d
k	r�|j�td��tj|j�y|jjd|j�|j�Wntk
r�Yq�Xd
Sq�Wtd
��d
S)z0
        Spawns/forks the slapd process
        z-fz-Fz-hr(z-dz-1�0zstarting slapd: %r�
Nz slapd exited before opening portzslapd connection check to %szslapd did not start properly)r>r?r$rXr;r9r%rcr�r+r�r�rhr�r�r4�rangeZpoll�_stoppedr��timeZsleep�_start_sleeprdr@rQ)rHZurlsZ
slapd_args�_rrr�_start_slapd�s2
zSlapdObject._start_slapdcCs\|jdkrXtj|j�|j�|j�|j�|j�|j�|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)r4�atexit�register�stoprmrar�r�r�rcrd�pidr>r?)rHrrr�start�s
zSlapdObject.startcCs�|jdk	r.|jjd|jj�|jj�|j�|j�ttd�rNtj	|j
�n2ttd�r�ytjj|j
�Wnt
k
r~YnXdS)zU
        Stops the slapd server, and waits for it to terminate and cleans up
        Nzstopping slapd with pid %d�
unregister�
_exithandlers)r4rcrdr��	terminater�rm�hasattrr�r�r�r�rfr*)rHrrrr��s



zSlapdObject.stopcCs|jj�|j�|j�dS)z:
        Restarts the slapd server with same data
        N)r4r�r�r�)rHrrr�restart�s
zSlapdObject.restartcCs|jr|jj�|j�dS)z3Waits for the slapd process to terminate by itself.N)r4r�r�)rHrrrr��s
zSlapdObject.waitcCs&|jdk	r"|jjd|jj�d|_dS)z8Called when the slapd server is known to have terminatedNzslapd[%d] terminated)r4rcrhr�)rHrrrr��s
zSlapdObject._stoppedcCs>|jr(ddg}|jjtj�s:|jd�ndd|jd|jg}|S)Nz-YZEXTERNALz-Qz-xz-Dz-w)rArcr�r+r�r$rKr{)rHZ
authc_argsrrr�_cli_auth_args�s
zSlapdObject._cli_auth_argsc	Cs�|dkr|j}|d|g|j�|p$g}|jjddj|��tj|tjtjtjd�}|jjd|�|j|�\}}|dk	r�|jjd|�|dk	r�|jjd|�|j	�dkr�t
d	j|||���||fS)
Nz-HzRun command: %rr()�stdin�stdout�stderrz
stdin_data=%rzstdout_data=%rzstderr_data=%rrz{!r} process failed:
{!r}
{!r})r@r�rcrdr%r�r��PIPEZcommunicater�r�rJ)	rHZldapcommand�
extra_argsr>�
stdin_data�argsr�Zstdout_dataZstderr_datarrr�
_cli_popen
s$

zSlapdObject._cli_popencCs|j|j|d�dS)z8
        Runs ldapwhoami on this slapd instance
        )r�N)r�rW)rHr�rrrrQ%szSlapdObject.ldapwhoamicCs|j|j||jd�d�dS)zR
        Runs ldapadd on this slapd instance, passing it the ldif content
        zutf-8)r�r�N)r�rT�encode)rH�ldifr�rrrrN+s
zSlapdObject.ldapaddcCs|j|j||jd�d�dS)zR
        Runs ldapadd on this slapd instance, passing it the ldif content
        zutf-8)r�r�N)r�rVr�)rHr�r�rrrrP2s
zSlapdObject.ldapmodifycCs8|dkrg}|r|jd�|j|�|j|j|d�dS)zG
        Runs ldapdelete on this slapd instance, deleting 'dn'
        Nz-r)r�)r$r�rU)rHZdn�	recursiver�rrrrO9s

zSlapdObject.ldapdeletecCs|j�|S)N)r�)rHrrr�	__enter__DszSlapdObject.__enter__cCs|j�dS)N)r�)rH�exc_type�	exc_value�	tracebackrrr�__exit__HszSlapdObject.__exit__)r/)r0)F)NNN)N)N)N)FN);�__name__�
__module__�__qualname__�__doc__�SLAPD_CONF_TEMPLATEr~rwrxZroot_cnr{rz�	LOCALHOSTr=r^r`rrr�getcwdr8rCr&�isdir�defpathrZr'rYr�r-rcrI�propertyrKrLrMrBrSrarmr5rr]r_r�r�r�r�r�r�r�r�r�r�rQrNrPrOr�r�rrrrr.�sf
!


 	
&




r.c@s>eZdZdZeZdZdZd	dd�Ze	dd��Z
e	dd��ZdS)
�
SlapdTestCasezE
    test class which also clones or initializes a running slapd
    NcKs8|j|jjf|�}d|_|j|p&|jj|p0|jj�|S)z@
        return a LDAPObject instance after simple bind
        �)�ldap_object_class�serverr>Zprotocol_versionZ
simple_bind_srKr{)rHZwhoZcred�kwargsZ	ldap_connrrr�_open_ldap_connUszSlapdTestCase._open_ldap_conncCs|j�|_|jj�dS)N)�server_classr�r�)�clsrrr�
setUpClass_s
zSlapdTestCase.setUpClasscCs|jj�dS)N)r�r�)r�rrr�
tearDownClassdszSlapdTestCase.tearDownClass)NN)r�r�r�r�r.r�r�r�r��classmethodr�r�rrrrr�Ls

r�)N),r�Z
__future__rrror"r�r�r+r�Zlogging.handlersrrrrZldap.compatrrr&�abspathrl�__file__rDr�r��setrr rrr�r
rrrrrr'ZWARNr-�objectr.ZTestCaser�rrrr�<module>sF


 *