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: //proc/1233/root/usr/lib/python3/dist-packages/samba/__pycache__/upgrade.cpython-310.pyc
o

�/a��@sBdZdZddlZddlZddlZddlmZmZddlm	Z	ddl
mZmZm
Z
ddlmZddlmZdd	lmZdd
lmZmZmZddlmZddlmZdd
lmZddlmZddlmZddlm Z dd�Z!		d)dd�Z"dd�Z#dd�Z$dd�Z%dd�Z&dd�Z'dd �Z(d!ej)iZ*d"d#�Z+d$d%�Z,		&d*d'd(�Z-dS)+z3Support code for upgrading from Samba 3 to Samba 4.�restructuredText�N)�Ldb�registry)�LoadParm)�	provision�ProvisioningError�setsysvolacl)�	FILL_FULL)�passdb)�param)�lsa�samr�security)�dom_sid)�Credentials)�dsdb)�ndr_pack)�unix2nttime)�generate_random_passwordc
Csbt��}|��|_d|vrt�t|d�tjd�|d<d|vr-t�t|d�tjd�|d<d|vrH|d}t|d�}t�t|�tjd	�|d
<d|vrr|d}|dks\|d
ks\|dkr_d}nt|d�}t�t|�tjd�|d<d|vr�|d}t|d�}	t�t|	�tjd�|d<z|�	|�WdStj
y�}
z|�dt|
��WYd}
~
dSd}
~
ww)z�Import a Samba 3 policy.

    :param samdb: Samba4 SAM database
    :param policy: Samba3 account policy
    :param logger: Logger object
    zmin password length�minPwdLength�a01zpassword history�pwdHistoryLength�a02zminimum password ageg�cA�	minPwdAge�a03zmaximum password age���rl��l�����	maxPwdAge�a04zlockout duration�<�lockoutDuration�a05z"Could not set account policy, (%s)N)�ldb�Message�get_default_basedn�dn�MessageElement�str�FLAG_MOD_REPLACE�intr�modify�LdbError�warn)�samdb�policy�logger�m�min_pw_age_unix�
min_pw_age_nt�max_pw_age_unix�
max_pw_age_nt�lockout_duration_mins�lockout_duration_nt�e�r7�//usr/lib/python3/dist-packages/samba/upgrade.py�import_sam_policy*sH
����
���r9c	
Cs�zKt��}	t�|dt|��|	_|dkr8t�t|�tjd�|	d<t�t|�tjd�|	d<t�t|�tjd�|	d<t�t|�tjd�|	d<|�|	�WdStjyj}
z|�	dt|�t|
��WYd}
~
dSd}
~
ww)	awAdd posix attributes for the user/group

    :param samdb: Samba4 sam.ldb database
    :param sid: user/group sid
    :param sid: user/group name
    :param nisdomain: name of the (fake) NIS domain
    :param xid_type: type of id (ID_TYPE_UID/ID_TYPE_GID)
    :param home: user homedir (Unix homepath)
    :param shell: user shell
    :param pgid: users primary group id
    �<SID=%s>�ID_TYPE_UID�unixHomeDirectory�
loginShell�	gidNumber�msSFU30NisDomainz7Could not add posix attrs for AD entry for sid=%s, (%s)N)
r!r"�Dnr&r$r%r'r)r*r+)r.r,�sid�name�	nisdomain�xid_type�home�shell�pgidr/r6r7r7r8�add_posix_attrsbs0�������rHcCs�zLt��}t�|dt|��|_|dkr+t�t|�tjd�|d<t�dtjd�|d<n|dkrEt�t|�tjd�|d<t�dtjd�|d<|�|�Wd
Stj	yo}z|�
d	t|�t|�|t|��WYd
}~d
Sd
}~ww)z�Create idmap entry

    :param samdb: Samba4 sam.ldb database
    :param sid: user/group sid
    :param xid: user/group id
    :param xid_type: type of id (ID_TYPE_UID/ID_TYPE_GID)
    :param logger: Logger object
    r:r;�	uidNumber�posixAccount�objectClass�ID_TYPE_GIDr>�
posixGroupz?Could not modify AD idmap entry for sid=%s, id=%s, type=%s (%s)N)r!r"r@r&r$r%r'�FLAG_MOD_ADDr)r*r+)r,rA�xidrDr.r/r6r7r7r8�add_ad_posix_idmap_entry�s2
�
������rPc	Cs>d}|jdt|�d�}|jdkrd}|rbz)t��}|dd|_t�t|�tjd�|d<t�|tjd	�|d	<|�|�WdStj	ya}z|�
d
t|�t|�|t|��WYd}~dSd}~wwz|�dt|�t|�d
t|�|t|�d��WdStj	y�}z|�
dt|�t|�|t|��WYd}~dSd}~ww)z�Create idmap entry

    :param idmapdb: Samba4 IDMAP database
    :param sid: user/group sid
    :param xid: user/group id
    :param xid_type: type of id (ID_TYPE_UID/ID_TYPE_GID)
    :param logger: Logger object
    FzobjectSid=%s)�
expression�Trr$�	xidNumber�typez<Could not modify idmap entry for sid=%s, id=%s, type=%s (%s)NzCN=%s�sidMap)r$�cnrK�	objectSidrTrSz9Could not add idmap entry for sid=%s, id=%s, type=%s (%s))
�searchr&�countr!r"r$r%r'r)r*r+�addr)	�idmapdbrArOrDr.�found�msgr/r6r7r7r8�add_idmap_entry�sJ
���������r^c
Cs
z|��}Wnty!}z|�dt|��WYd}~dSd}~wwt|��|���}|}t��}t�	|d�|_
t�t|�tjd�|d<t�t|�tjd�|d<|�
|�|��D])\}}	|dkrdd}
n|d	krkd
}
n|�d|�qY|�|	|�}t|t|�|	|
|�qYdS)z�Import idmap data.

    :param idmapdb: Samba4 IDMAP database
    :param samba3_idmap: Samba3 IDMAP database to import from
    :param logger: Logger object
    z(Cannot open idmap database, Ignoring: %sNz	CN=CONFIG�
lowerBound�
lowerboundrS�UIDr;�GIDrLz+Wrong type of entry in idmap (%s), Ignoring)�get_idmap_db�IOErrorr+r&�max�get_user_hwm�
get_group_hwmr!r"r@r$r%r'r)�ids�get_sidr^r)r[�samba3r.�samba3_idmapr6�
currentxidr`r/�id_typerOrDrAr7r7r8�import_idmap�s8����
�rnc
Cs�z|jdt|j�tjd�}d}Wn&tjy7}z|j\}}|tjkr'd}nt�||��WYd}~nd}~ww|rN|�dt|j�|j	|ddd�dS|j
tjkre|j�
�\}}	|t�tj�kredSt��}
t�|d	�|
_|
j�dd
|j	�|
j�|���t�dtjd�|
d<t�t|j�tjd
�|
d
<t�|j	tjd�|
d<|jr�t�|jtjd�|
d<|j
tjks�|j
tjkr�t�ttj�tjd�|
d<z|j|
dgd�WdStjy�}z|�d|j	t|��WYd}~dSd}~ww)z�Add or modify group from group mapping entry

    param samdb: Samba4 SAM database
    param groupmap: Groupmap entry
    param logger: Logger object
    r:)�base�scopeTFNzJGroup already exists sid=%s, groupname=%s existing_groupname=%s, Ignoring.r�sAMAccountNamez
CN=X,CN=Users�CN�grouprKrW�description�	groupTypezrelax:0)�controlsz Could not add group name=%s (%s))rXr&rAr!�
SCOPE_BASEr*�args�ERR_NO_SUCH_OBJECTr+�nt_name�sid_name_user�SID_NAME_WKN_GRP�splitrr�SID_BUILTINr"r@r$�
set_component�add_baser#r%rNr�comment�SID_NAME_ALIASr�!GTYPE_SECURITY_DOMAIN_LOCAL_GROUPrZ)r,�groupmapr.r]r\�e1�ecode�emsg�
group_dom_sid�ridr/r6r7r7r8�add_group_from_mapping_entry�s\	�

��������"��r�c	Cs�|D]g}t��}t�|dt|j��|_t�dt|�tjd�|d<z|�|�Wqtj	yi}z3|j
\}}|tjkrF|�d||j|�n|tj
krUtd||j|f��td||j|f��WYd}~qd}~wwdS)z�Add user/member to group/alias

    param samdb: Samba4 SAM database
    param group: Groupmap object
    param members: List of member SIDs
    param logger: Logger object
    r:�memberrz/skipped re-adding member '%s' to group '%s': %szXCould not add member '%s' to group '%s' as either group or user record doesn't exist: %sz+Could not add member '%s' to group '%s': %sN)r!r"r@r&rAr$r%rNr)r*rx�ERR_ENTRY_ALREADY_EXISTS�debugryr)	r,rs�membersr.�
member_sidr/r6r�r�r7r7r8�add_users_to_group.s"


����r�cCsd}|��D]v\}\}}}|d7}t|�dd�dd�}|dkr#d}n|d@r3t|�dkr0d}nd}nt|�dkr<d}nd}|t��krGd}	nd}	|d	@d
?}
|�dt|�d��|�d�d|�d�ddt|�t|	�t|
�t�	|�d
t|�|d��q|�dddt|�d��dS)z�Import settings from a Samba3 WINS database.

    :param samba4_winsdb: WINS database to import to
    :param samba3_winsdb: WINS database to import from
    rrR�#������`�zname=%s,type=0x%s�
winsRecord�0)r$rTrBrK�
recordType�recordState�nodeType�
expireTime�isStatic�	versionID�addressz
cn=VERSION�VERSION�winsMaxVersion)r$rVrK�
maxVersionN)
�itemsr(r}�len�timerZ�tupler&r!�
timestring)�
samba4_winsdb�
samba3_winsdb�
version_idrB�ttl�ips�nb_flagsrT�rType�rState�nTyper7r7r8�import_winsGsD
��r��HKLMc	sh�fdd�}|��D]'}||�}|�|�D]}||�q|�|���D]
\}\}}|�|||�q#q
dS)z�Import a Samba 3 registry database into the Samba 4 registry.

    :param samba4_registry: Samba 4 registry handle.
    :param samba3_regdb: Samba 3 registry database handle.
    cs0|�dd�\}}t|}|�dd�}��||�S)N�/rR�\)r}�SAMBA3_PREDEF_NAMES�replace�
create_key)�keypath�predef_name�	predef_id��samba4_registryr7r8�ensure_key_exists�sz*import_registry.<locals>.ensure_key_existsN)�keys�subkeys�valuesr��	set_value)	r��samba3_regdbr��key�
key_handle�subkey�
value_name�
value_type�
value_datar7r�r8�import_registry�s
��r�c
Csxz|j|tjd||gd�}Wntjy%}z	td|||f��d}~ww|jdkr3|d|dS|�d||�t�)z�Get posix attributes from a samba3 ldap backend
    :param ldbs: a list of ldb connection objects
    :param base_dn: the base_dn of the connection
    :param user: the user to get the attribute for
    :param attr: the attribute to be retrieved
    z%(&(objectClass=posixAccount)(uid=%s)))rprQ�attrsz=Failed to retrieve attribute %s for user %s, the error is: %sNrRrz0LDAP entry for user %s contains more than one %s)rXr!�
SCOPE_SUBTREEr*rrY�warning�KeyError)r.�
ldb_object�base_dn�user�attrr]r6r7r7r8� get_posix_attr_from_ldap_backend�s
�
���
r�Fc=s,|j��}|j�d�}|j�d�}	|j�d�}
|j�d�dur&|j�dd�z|��}WntyE}z
td|�d�t|�f��d}~ww|sT|�	�d	}|�
d
|�|	sl|dks^|dkrbtd
��|��}	|�
d|	�d}
z|�|
�}Wnt
y�d}Ynw|j�d��d�d	��dkr�|j�d�}|j�d�}|�|�}|dur�td��|�d��d�}d}nd}d}d}|��t�|j�d��|��}zt���Wntjy�td|��wz	|�d|
�}Wntjy�d}d}Ynw|j��\}}|�d�|��}|�d�|��}i}|D]�}|j��\}}|�k�r,||
k�r,|d}
|jt j!k�rcz|�"|j�}||t|j�<W�qtj�yb}z|�#d |j$|j|�WYd}~�qd}~ww|jt j%k�r�z|�&|j�}||t|j�<W�qtj�y�}z|�#d |j$|j|�WYd}~�qd}~ww|jt j'k�r�|j��\}}|t(�)t(j*�k�r�|�#d!|j$��qz|�"|j�}||t|j�<W�qtj�y�}z|�#d |j$|j|�WYd}~�qd}~ww|�#d"|j$|j|j��q|�d#�|�+d	�}i} i}!d}"|D�]�}#|�r||#d$k�r�q	|#d%}$|#d$dk�r.|�d&|#d$|$��q	|#d$|
k�r;|#d$d}
|�|$�}%|%j,t-j.t-j/Bt-j0Bt-j1B@}&|&t-j0k�rl|�#d'|$dd(��|%j,t-j0@t-j/B|%_,n�|&t-j1k�r|�#d)|$dd(���q	|&t-j/k�r�|$d(d*k�r�|�#d+|$��q	|&t-j.t-j/Bk�r�|$d(d*k�r�|�#d,|$�|%j,t-j.@|%_,nR|&t-j.t-j0Bk�r�|$d(d*k�r�|�#d-|$�|%j,t-j.@|%_,n2|&d	k�r�|$d(d*k�r�|%j,t-j.B|%_,n|&t-j.k�s�|&t-j/k�r�ntd.|$|%j,t-j.t-j/t-j0t-j1f��|%| |$<z|�2|%j�d	|!|$<Wn tj�y7z
t3�4|$�j5|!|$<Wn
t
�y4YnwYnw|"�sD|$�6�d/k�rD|$}"|$�6�d0k�rM|$}"z3|�7|%�}'|'D](}t|�|v�rt|%j|t|�v�rr|t|��8|%j��qU|%jg|t|�<�qUW�q	tj�y�}z|�#d1|$|%j|�WYd}~�q	d}~ww|�d2|
�td3d4�|D��}(td5d4�|D��})|(�9|)�}*|*�r�|�d6�|*D]
}+|�d7|+��q�td8��td9d4�|D��},t:|�t:|,�k�r�td:��t�fd;d4�|D��}-t:|�t:|-�k�rtd<��|,�9|-�}.|.�r#|�d=�|.D]}|�d7t|���qtd>��i}/i}0i}1|�rtt;�}2|2�<|j�|2�=|�|2�>|�|j�d��dd�d�d?�}3|3��D]!}4zt?|4|2d@�}5Wnt@jA�yr}ztdA|4|f��d}~ww|�dB�|�+d	�}|D]�}#|#d%}$|$|!�B�v�rz|�r�tC||5||$dC�|/|$<nt3�4|$�jD|/|$<Wnt
�y�Yn
tE�y�Ynwz|�r�tC||5||$dD�|0|$<nt3�4|$�jF|0|$<Wnt
�y�Yn
tE�y�Ynwz|�r�tC||5||$dE�|1|$<nt3�4|$�jG|1|$<W�q�t
�y	Y�q�tE�yY�q�w�q�|�dF�d}6z|�H�}6Wnt�y>}z|�#dGt|��WYd}~nd}~ww|dk�sK|dk�sKdH}|"�rTtIdIdJ�}7nd}7tJ||fidK|�d|	�dL|�dM��dN|
�dO|�dP|7�dQtKjL�dR|
�6��dS|�dT|�dUtM�dV|�dW|�dXd�dY|�dZd��}8|8�N|�|�d[�|6�r�tOt?|8jPjQ�|6�|�d\�tR|8jS||�|�d]�tT|8jU||�tV�W�}9|9�X|8jjY�|9�d|8j�d��|9�d^|8j�d^��|9�d_|8j�d_��t�Z|9�d��}:|8jS�[�|�d`�z4|�da�|D]*};|;j\d(k�r-t]|8jS|;|�t^|8jS|;j|;j\db|�t_|8jS|;j|;j$|�6�db|dc��qWn	|8jS�`��|�dd�|8jS�a�|�de�|�df�| D]�}$|$�6�d0k�r}| |$jt)t��dg�k�r}|�dh| |$jt)t��dg�f�tdi��|$�6�d/k�r�| |$jt)t��dg�k�r�|�#dj�n|�#dk�|:�b| |$�|$|!v�r�t^|8jS| |$j|!|$dl|�|$|/v�r�|/|$du�r�|$|0v�r�|0|$du�r�|$|1v�r�|1|$du�r�t_|8jS| |$j|$|�6�dl|/|$|0|$|1|$|dm�	�qP|�dn�|8jS�[�z|D]};t|;j�|v�rtc|8jS|;|t|;j�|��qWn	|8jS�`��|�do�|8jS�a�|"�rm|�dp�|:�d0�}<| |"jd|<_d| |"je�rP| |"je|<_e| |"jf|<_f| |"jg�rb| |"jg|<_g|:�h|<�|�dq|"�|8jdrk�r�ti|8jS|8jPjj|8jPjk|8jPjl|8jPjmt(�)|8jn�|8jojp|8jojq|8j|�
dSdS)sz�Upgrade from samba3 database to samba4 AD database

    :param samba3: samba3 object
    :param logger: Logger object
    :param targetdir: samba4 database directory
    :param session_info: Session information
    �	workgroup�realmznetbios namezldapsam:trustedN�yesz�Could not open '%s', the Samba3 secrets database: %s.  Perhaps you specified the incorrect smb.conf, --testparm or --dbdir option?zsecrets.tdbrz6No workgroup specified in smb.conf file, assuming '%s'�ROLE_DOMAIN_BDC�ROLE_DOMAIN_PDCz�No realm specified in smb.conf file and being a DC. That upgrade path doesn't work! Please add a 'realm' directive to your old smb.conf to let us know which one you want to use (it is the DNS name of the AD domain you wish to create.z2No realm specified in smb.conf file, assuming '%s'i�zpassdb backend�:�ldapsamzldap suffixz
ldap admin dnz�ldapsam passdb backend detected but no LDAP Bind PW found in secrets.tdb for user %s.  Please point this tool at the secrets.tdb that was used by the previous installation.zutf-8�TFzprivate dirz(Can't find domain sid for '%s', Exiting.z%s$zExporting account policyzExporting groupsrRz4Ignoring group '%s' %s listed but then not found: %szOIgnoring 'well known' group '%s' (should already be in AD, and have no members)z+Ignoring group '%s' %s with sid_name_use=%dzExporting usersr��account_namez-  Skipping wellknown rid=%d (for username=%s)zk  Demoting BDC account trust for %s, this DC must be elevated to an AD DC using 'samba-tool domain dcpromo'rzZ  Skipping inter-domain trust from domain %s, this trust must be re-created as an AD trust�$z�  Skipping account %s that has ACB_WSTRUST (W) set but does not end in $.  This account can not have worked, and is probably left over from a misconfiguration.z�  Fixing account %s which had both ACB_NORMAL (U) and ACB_WSTRUST (W) set.  Account will be marked as ACB_WSTRUST (W), i.e. as a domain memberz�  Fixing account %s which had both ACB_NORMAL (U) and ACB_SVRTRUST (S) set.  Account will be marked as ACB_WSTRUST (S), i.e. as a domain memberaFailed to upgrade due to invalid account %s, account control flags 0x%08X must have exactly one of
ACB_NORMAL (N, 0x%08X), ACB_WSTRUST (W 0x%08X), ACB_SVRTRUST (S 0x%08X) or ACB_DOMTRUST (D 0x%08X).

Please fix this account before attempting to upgrade again
�root�
administratorz)Ignoring group memberships of '%s' %s: %sz
Next rid = %dcSsg|]}|j�qSr7)rz��.0�gr7r7r8�
<listcomp>�sz'upgrade_from_samba3.<locals>.<listcomp>cSsg|]}|d�qS)r�r7�r��ur7r7r8r��sz4Following names are both user names and group names:z   %sz5Please remove common user/group names before upgrade.cSsg|]}t|j��qSr7)r&rAr�r7r7r8r��sz9Please remove duplicate group sid entries before upgrade.csg|]
}d�|df�qS)z%s-%ur�r7r���	domainsidr7r8r��sz8Please remove duplicate user sid entries before upgrade.z,Following sids are both user and group sids:z3Please remove duplicate sid entries before upgrade.�")�credentialsz=Could not open ldb connection to %s, the error message is: %szExporting posix attributes�
homeDirectoryr=r>zReading WINS databasez'Cannot open wins database, Ignoring: %s�NONE�� �	targetdir�domainr��next_rid�dc_rid�	adminpass�dom_for_fun_level�hostname�machinepass�
serverrole�
samdb_fill�useeadb�dns_backend�use_rfc2307�	use_ntvfs�skip_sysvolaclzImporting WINS databasezImporting Account policyzImporting idmap databasezstate directoryzlock directoryz
Adding groupszImporting groupsrL)r,rArBrCrDr.z+Committing 'add groups' transaction to diskzAdding userszImporting usersz-500zPUser 'Administrator' in your existing directory has SID %s, expected it to be %szPUser 'Administrator' in your existing directory does not have SID ending in -500z,User root has been replaced by AdministratorzbUser root has been kept in the directory, it should be removed in favour of the Administrator userr;)	r,rArBrCrDrErFrGr.zAdding users to groupsz4Committing 'add users to groups' transaction to diskz"Setting password for administratorz<Administrator password has been set to password of user '%s'z"active directory domain controller)r�lp�server_role�get�set�get_secrets_dbrdr�privatedir_pathr&�domainsr��upper�get_machine_passwordr�r}�strip�get_ldap_bind_pw�decode�closer
�set_secrets_dir�
get_sam_db�get_global_sam_sid�error�	Exception�getsampwnam�user_sid�info�get_account_policy�enum_group_mappingrAr{rr��
enum_aliasmemr+rz�SID_NAME_DOM_GRP�enum_group_membersr|rrr~�search_users�	acct_ctrlr
�
ACB_NORMAL�ACB_WSTRUST�ACB_SVRTRUST�ACB_DOMTRUST�	sid_to_id�pwd�getpwnam�pw_uid�lower�enum_group_memberships�append�intersectionr�r�guess�set_bind_dn�set_passwordrr!r*r�r��pw_dir�
IndexError�pw_shell�pw_gid�get_wins_dbrrr�DS_DOMAIN_FUNCTION_2003r	�
report_loggerr��paths�winsdbr9r,rn�idmap�s3param�get_context�load�
configfile�PDB�transaction_start�gidr�rPrH�transaction_cancel�transaction_commit�add_sam_accountr��	nt_passwd�
lanman_passwd�pass_last_set_time�
pw_history�update_sam_accountr�netlogon�sysvol�root_uid�root_gidr��names�	dnsdomain�domaindn)=rjr.r��session_infor�r�r�r��
domainnamer��netbiosname�
secrets_dbr6r�r�r��ldapuser�ldappass�ldap�s3db�machineacct�
machinerid�
machinesidr-�	grouplist�groupmembersrsrAr�r�r��userlist�userdata�uids�
admin_user�entry�usernamer��	acct_type�group_memberships�group_names�
user_names�common_namesrB�
group_sids�	user_sids�common_sids�homes�shells�pgids�creds�urls�urlr�r�r��result�
new_lp_ctx�	s4_passdbr��admin_userdatar7r�r8�upgrade_from_samba3�s
	�����
��




���
����
����



���  �����
�����





��

�������
�������������������
	





��




$

2�

��





��rn)NNN)NFNF).�__doc__�
__docformat__r!r�r�sambarr�samba.paramr�samba.provisionrrr�samba.provision.commonr	�samba.samba3r
rr3�samba.dcerpcrr
r�samba.dcerpc.securityr�samba.credentialsrr�	samba.ndrrrrr9rHrPr^rnr�r�r��HKEY_LOCAL_MACHINEr�r�r�rnr7r7r7r8�<module>sF8
�#+'85��