HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/samba/__pycache__/gpclass.cpython-310.pyc
o

�/aV�@sXddlZddlZddlZddlZddlZej�dd�ddlmZddl	m
Z
ddlmZddl
mZddlmZmZddlmmZddlZddlmZdd	lmZdd
lmZddlmZddlm Z ddl!m"Z"dd
l#m$Z$ddl%m&Z&ddlm'Z'ddlm(Z(ddl)m*Z*m+Z+ddl,m-Z-z
ddl.m/Z/e/dd�Z0Wne1y�Gdd�d�Z0YnwGdd�d�Z2Gdd�d�Z3Gdd�de4�Z5Gdd�de5�Z6Gdd �d e5�Z7Gd!d"�d"e5�Z8	d#d$�Z9	d%d&�Z:d'd(�Z;d)d*�Z<d+d,�Z=d-d.�Z>d/d0�Z?dHd2d3�Z@d4d5�ZAdId7d8�ZBd9d:�ZCd;d<�ZDd=d>�ZEd?d@�ZF	AdJdBdC�ZGdKdDdE�ZHdKdFdG�ZIdS)L�Nz
bin/python)�
NTSTATUSError)�ConfigParser)�StringIO)�	get_bytes)�ABCMeta�abstractmethod)�Net)�nbt)�libsmb_samba_internal)�param)�LoadParm)�UUID)�NamedTemporaryFile)�preg)�misc)�ndr_pack�
ndr_unpack)�SMB_SIGNING_REQUIRED)�Enum�GPOSTATEzAPPLY ENFORCE UNAPPLYc@seZdZdZdZdZdS)r���N)�__name__�
__module__�__qualname__�APPLY�ENFORCE�UNAPPLY�rr�//usr/lib/python3/dist-packages/samba/gpclass.pyr/sc@sZeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�gp_loga[ Log settings overwritten by gpo apply
    The gp_log is an xml file that stores a history of gpo changes (and the
    original setting value).

    The log is organized like so:

<gp>
    <user name="KDC-1$">
        <applylog>
            <guid count="0" value="{31B2F340-016D-11D2-945F-00C04FB984F9}" />
        </applylog>
        <guid value="{31B2F340-016D-11D2-945F-00C04FB984F9}">
            <gp_ext name="System Access">
                <attribute name="minPwdAge">-864000000000</attribute>
                <attribute name="maxPwdAge">-36288000000000</attribute>
                <attribute name="minPwdLength">7</attribute>
                <attribute name="pwdProperties">1</attribute>
            </gp_ext>
            <gp_ext name="Kerberos Policy">
                <attribute name="ticket_lifetime">1d</attribute>
                <attribute name="renew_lifetime" />
                <attribute name="clockskew">300</attribute>
            </gp_ext>
        </guid>
    </user>
</gp>

    Each guid value contains a list of extensions, which contain a list of
    attributes. The guid value represents a GPO. The attributes are the values
    of those settings prior to the application of the GPO.
    The list of guids is enclosed within a user name, which represents the user
    the settings were applied to. This user may be the samaccountname of the
    local computer, which implies that these are machine policies.
    The applylog keeps track of the order in which the GPOs were applied, so
    that they can be rolled back in reverse, returning the machine to the state
    prior to policy application.
    NcCsptj|_||_||_|rt�|�|_nt�d�|_||_	|j�
d|�}|dur6t�|jd�}||jd<dSdS)ag Initialize the gp_log
        param user          - the username (or machine name) that policies are
                              being applied to
        param gpostore      - the GPOStorage obj which references the tdb which
                              contains gp_logs
        param db_log        - (optional) a string to initialize the gp_log
        �gp�user[@name="%s"]N�user�name)
rr�_state�gpostore�username�etree�
fromstring�gpdb�Elementr$�find�
SubElement�attrib)�selfr$r'�db_log�user_objrrr �__init__[s�zgp_log.__init__cCsZ|tjkr(|j�d|j�}|�d�}|dust|�dkr#tj|_dS||_dS||_dS)a( Policy application state
        param value         - APPLY, ENFORCE, or UNAPPLY

        The behavior of the gp_log depends on whether we are applying policy,
        enforcing policy, or unapplying policy. During an apply, old settings
        are recorded in the log. During an enforce, settings are being applied
        but the gp_log does not change. During an unapply, additions to the log
        should be ignored (since function calls to apply settings are actually
        reverting policy), but removals from the log are allowed.
        r#�applylogNr)rrr+r-r$�lenrr&)r0�valuer2�	apply_logrrr �stateps



zgp_log.statecCs�||_|j�d|j�}|�d|�}|dur"t�|d�}||jd<|jtj	krZ|�d�}|dur7t�|d�}|�d|�}|dur\t�|d�}dt
|�d|jd	<||jd<dSdSdS)
z� Log to a different GPO guid
        param guid          - guid value of the GPO from which we're applying
                              policy
        r#�guid[@value="%s"]N�guidr6r4z%dr�count)r:r+r-r$r)r.r/r&rrr5)r0r:r2�objr7�prev�itemrrr �set_guid�s"

�zgp_log.set_guidcCs�|jtjks|jtjkrdS|j�d|j�}|�d|j�}|dus'Jd��|�d|�}|dur=t�	|d�}||j
d<|�d|�}|durXt�	|d	�}||j
d<||_dSdS)
a Store an attribute in the gp_log
        param gp_ext_name   - Name of the extension applying policy
        param attribute     - The attribute being modified
        param old_val       - The value of the attribute prior to policy
                              application
        Nr#r9�gpo guid was not set�gp_ext[@name="%s"]�gp_extr%�attribute[@name="%s"]�	attribute)r&rrrr+r-r$r:r)r.r/�text)r0�gp_ext_namerD�old_valr2�guid_obj�ext�attrrrr �store�s


�zgp_log.storecCsh|j�d|j�}|�d|j�}|dusJd��|�d|�}|dur2|�d|�}|dur2|jSdS)a- Retrieve a stored attribute from the gp_log
        param gp_ext_name   - Name of the extension which applied policy
        param attribute     - The attribute being retrieved
        return              - The value of the attribute prior to policy
                              application
        r#r9Nr@rArC)r+r-r$r:rE�r0rFrDr2rHrIrJrrr �retrieve�szgp_log.retrievecCslg}|j�d|j�}|dur4|�d�}|dur4|�d�}dd�|D�}|jdd�|�d	d
�|D��|S)z� Return a list of applied ext guids
        return              - List of guids for gpos that have applied settings
                              to the system.
        r#Nr4zguid[@count]cSs g|]}|�d�|�d�f�qS)r;r6)�get)�.0�grrr �
<listcomp>�s�z,gp_log.get_applied_guids.<locals>.<listcomp>T)�reversecss�|]\}}|VqdS�Nr)rOr;r:rrr �	<genexpr>�s�z+gp_log.get_applied_guids.<locals>.<genexpr>)r+r-r$�findall�sort�extend)r0�guidsr2r7�	guid_objs�guids_by_countrrr �get_applied_guids�s

�zgp_log.get_applied_guidscCs�g}|j�d|j�}|D]7}|�d|�}|�d�}i}|D]}i}	|�d�}
|
D]
}|j|	|jd<q*|	||jd<q|�||f�q
|S)ai Return a list of applied ext guids
        return              - List of tuples containing the guid of a gpo, then
                              a dictionary of policies and their values prior
                              policy application. These are sorted so that the
                              most recently applied settings are removed first.
        r#r9rBrDr%)r+r-r$rUrEr/�append)r0rX�retr2r:�
guid_settings�exts�settingsrI�	attr_dict�attrsrJrrr �get_applied_settings�s

zgp_log.get_applied_settingscCs�|j�d|j�}|�d|j�}|dusJd��|�d|�}|durA|�d|�}|durC|�|�t|�dkrE|�|�dSdSdSdS)z� Remove an attribute from the gp_log
        param gp_ext_name   - name of extension from which to remove the
                              attribute
        param attribute     - attribute to remove
        r#r9Nr@rArCr)r+r-r$r:�remover5rLrrr �delete�s
�z
gp_log.deletecCs|j�|jt�|jd��dS)z Write gp_log changes to disk zutf-8N)r'rKr(r)�tostringr+�r0rrr �commit�sz
gp_log.commitrS)
rrr�__doc__r3r8r?rKrMr[rcrerhrrrr r!5s
%r!c@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�
GPOStoragecCs<tj�|�rt�|�|_dSt�|dtjtjtj	B�|_dS)Nr)
�os�path�isfile�tdb�open�log�Tdb�DEFAULT�O_CREAT�O_RDWR)r0�log_filerrr r3s zGPOStorage.__init__cC�|j��dSrS)rp�transaction_startrgrrr �start�zGPOStorage.startcCs,zt|j�t|���WStyYdSwrS)�intrprNr�	TypeError�r0�keyrrr �get_int	s
�zGPOStorage.get_intcCs|j�t|��SrS)rprNrr|rrr rNszGPOStorage.getcCst|||j�t|���SrS)r!rprNr)r0r$rrr �	get_gplogszGPOStorage.get_gplogcCs|j�t|�t|��dSrS)rprKr)r0r}�valrrr rKszGPOStorage.storecCrvrS)rp�transaction_cancelrgrrr �cancelryzGPOStorage.cancelcCs|j�t|��dSrS)rprerr|rrr reszGPOStorage.deletecCrvrS)rp�transaction_commitrgrrr rhryzGPOStorage.commitcCrvrS)rp�closergrrr �__del__!ryzGPOStorage.__del__N)
rrrr3rxr~rNrrKr�rerhr�rrrr rj�srjc@sPeZdZeZdd�Zedd��Zedd��Zdd�Z	ed	d
��Z
edd��Zd
S)rBcCs&||_||_||_|�|���|_dSrS)�logger�lp�credsr�get_username�gp_db)r0r�r�r�rKrrr r3(szgp_ext.__init__cC�dSrSr)r0�deleted_gpo_list�changed_gpo_listrrr �process_group_policy.�zgp_ext.process_group_policycCr�rSr)r0�policyrrr �read2r�zgp_ext.readcCs<|j�d�}tj�|t|����}tj�|�r|�|�SdS)N�	gpo_cache)	r��
cache_pathrkrl�join�check_safe_path�upper�existsr�)r0�afile�
local_path�	data_filerrr �parse6s

zgp_ext.parsecCr�rSrrgrrr �__str__=r�zgp_ext.__str__cCsiSrSr)r0�gporrr �rsopAr�zgp_ext.rsopN)rrrr�
__metaclass__r3rr�r�r�r�r�rrrr rB%s


rBc@�eZdZdd�ZdS)�
gp_inf_extc	Cs`t|d���}tdd�}t|_z|�t|����W|Sty/|�t|�d���Y|Sw)N�rb��
interpolation�utf-16)	ror�r�str�optionxform�readfpr�decode�UnicodeDecodeError)r0r�r��inf_confrrr r�Gs
��zgp_inf_ext.readN�rrrr�rrrr r�F�r�c@r�)�
gp_pol_extcCst|d���}ttj|�S)Nr�)ror�rr�file�r0r��rawrrr r�Sszgp_pol_ext.readNr�rrrr r�Rr�r�c@r�)�
gp_xml_extcCsBt|d���}zt�|���WSty t�|�d��YSw)Nr�r�)ror�r)r*r�r�r�rrr r�Ys�zgp_xml_ext.readNr�rrrr r�Xr�r�cCs.t||d�}|j|�d�tjtjBd�}|jS)N)r�r��realm)�domain�flags)r�finddcrNr	�NBT_SERVER_LDAP�
NBT_SERVER_DS�pdc_dns_name)r�r��net�	cldap_retrrr �get_dc_hostnameds
�r�cCs,g}t�|||�}|��r|�|���}|SrS)r��
ADS_STRUCT�connect�get_gpo_listr�)�dc_hostnamer�r��gpos�adsrrr r�ns
r�c

Cs�|��}tj�||�}z	tj|dd�Wnty-}z
|jtjkr#�WYd}~nd}~ww|�|�D]H}|dt	j
@rJt||tj�||d��q3|d��}td|d�}tj�||d��
dd�}	|�|�|	��|��t�|jtj�||��q3dS)	Ni�)�moder/r%F)re�dir�/�\)r�rkrlr��makedirs�OSError�errno�EEXIST�list�libsmb�FILE_ATTRIBUTE_DIRECTORY�
cache_gpo_dirr�replace�write�loadfiler��renamer%)
�conn�cache�sub_dir�loc_sub_dir�	local_dir�e�fdata�
local_name�f�fnamerrr r�vs(����r�cCsZt�d|�}d|��vrt�d|���}||�d�dd�}d|vr)tjj|�St|��)Nz/|\\�sysvolrz..)�re�split�lower�indexrkrlr�r�)rl�dirs�ldirsrrr r��sr�c	Cstt��}|�|j�|��}|�t�tj|d||d�}|�|�|�	d�}|D]}|j
s.q(t||t|j
��q(dS)Nr�)r�r�r�)
�s3param�get_context�load�
configfile�get_smb_signing�set_smb_signingrr��Connr��
file_sys_pathr�r�)	r�r�r�r��s3_lp�saved_signing_stater�r�r�rrr �check_refresh_gpo_list�s


�r�cs6|��}tdd�|D����fdd�|D�}|�|�S)NcSsg|]}|j�qSr)r%)rO�prrr rQ�sz)get_deleted_gpos_list.<locals>.<listcomp>csg|]}|�vr|�qSrr)rOr:��
current_guidsrr rQ�s)r[�setrc)r�r��applied_gpos�deleted_gposrr�r �get_deleted_gpos_list�s
r�cCs&|�tj�d|��}tt�|�d�S)Nr�r)r�rkrlr�rzr��gpo_get_sysvol_gpt_version)r�rl�gpt_pathrrr �gpo_version�sr�FcCs�|�|���}t||�}t|||�}t||�}	z	t||||�Wn
|�d|�YdS|r9|}
|�tj	�n3g}
|D](}|j
sCq=|j}t|j
��
�}
t||
�}||�|�kre|�d|�|
�|�q=|�tj�|��|D]5}z|||||�}|�|	|
�Wqrty�}z|�dt|��|�dt|��WYd}~qrd}~ww|D]}|j
s�q�|j}t|j
��
�}
t||
�}|�|d|�q�|��dS)Nz0Failed downloading gpt cache from '%s' using SMBzGPO %s has changedzFailed to apply extension  %s�
Message was: z%i)rr�r�r�r�r��errorr8rrr�r%r�r�r�r~�infor\rrxr��	Exceptionr�rKrh)r�r�r�rK�
gp_extensions�forcer�r�r��del_gpos�changed_gpos�gpo_objr:rl�versionrIr�rrr �apply_gp�sZ

�

���
rc	Cs�|�|���}|�tj�|�|���}|��|D]5}z|||||�}|�|g�Wqt	yO}z|�
dt|��|�
dt|��WYd}~qd}~ww|��dS)NzFailed to unapply extension  %sr�)
rr�r8rrrcr[rxr�r�r�r�rh)	r�r�r�rKr�r�r�rIr�rrr �
unapply_gp�s��r�csXt|�tkr�fdd�|��D�}d�|�St|�tkr*�fdd�|D�}d�|�S|S)Nc	s.g|]\}}d�d|t|�d�f�qS)� z[ %s ] = %sr��__rsop_vals)rO�k�v��levelrr rQ�s"�z__rsop_vals.<locals>.<listcomp>�
cs&g|]}d�dt|�d��qS)rz[ %s ]rr)rOr
rrr rQ�s&)�type�dict�itemsr�r�)�valsrr]rrr r�s
�

rc	Cs�t||�}t|||�}t||||�td�td|�tjdd�d}|D]�}	|	j��dkr0q&td|	j�td|�|D]y}
|
||||�}
t�	d	t
t|
���}t|�dkrb|d
�
d�d
}n|
j�
d�d
}td|�td
dt|d��|
�|	���D](\}
}td|
�tddt|d��tt|��tddt|d��q�td
dt|d��q?tdd|�q&dS)NzResultant Set of Policyz
%s Policy
)�x�2)�fallbackrzLocal PolicyzGPO: %s�=z'([\w\.]+)'����.z	  CSE: %sz  �-rz    Policy Type: %sz    z%s
)r�r�r��print�shutil�get_terminal_size�display_name�stripr�rUr�rr5r�rrzr�rr)r�r�r�rKr��targetr�r��
term_widthr�rI�
cse_name_m�cse_name�sectionr`rrr r��s6
�r�cCsHt�}|dur
|�|�n|��|�d�}tdd�}|�|�||fS)N�
gpext.confr�)rr��load_default�
state_pathrr�)�smb_confr��ext_conf�parserrrr �parse_gpext_confs


r)cCs^|�d�}tddtj�|�d��}|�|�t�|j|�Wd�dS1s(wYdS)Nr#zw+F)r�rer�)r%rrkrl�dirnamer�r�r%)r�r(r'r�rrr �atomic_write_conf)s


"�r+cCsP|ddks|ddkst|�dkrdSz	t|dd�Wd	Sty'YdSw)
Nr�{r�}�&Fr)rT)r5r
�
ValueError)r:rrr �
check_guid0s$��r0TcCs�tj�|�sdSt|�sdSt|�\}}||��vr|�|�|�|d|�|�|d|�|�|d|r5dnd�|�|d|r@dnd�t||�dS)	NF�DllName�ProcessGroupPolicy�NoMachinePolicy�0�1�NoUserPolicyT)	rkrlr�r0r)�sections�add_sectionr�r+)r:r%rlr&�machiner$r�r(rrr �register_gp_extension;s

r:cCs�t|�\}}i}|��D]4}i||<|�|d�||d<|�|d�||d<t|�|d��||d<t|�|d��||d<q|S)Nr1r2r3�
MachinePolicyr6�
UserPolicy)r)r7rNrz)r&�_r(�resultsr:rrr �list_gp_extensionsPs

�
�r?cCs<t|�sdSt|�\}}||��vr|�|�t||�dS)NFT)r0r)r7�remove_sectionr+)r:r&r�r(rrr �unregister_gp_extension^s

rA)F)r)NTTrS)J�sysrkrr�rnrl�insert�sambar�configparserr�ior�samba.commonr�abcrr�xml.etree.ElementTreer)�ElementTreer��	samba.netr�samba.dcerpcr	�samba.samba3r
r�rr��	samba.gpor��samba.paramr�uuidr
�tempfilerrr�	samba.ndrrr�samba.credentialsr�enumrr�ImportErrorr!rj�objectrBr�r�r�r�r�r�r�r�r�r�rrrr�r)r+r0r:r?rArrrr �<module>sr�K&!	

/

�