a
    I_k                     @   sh   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZ G dd de
ZdS )    N)system_session)SamDB)CommandCommandErrorOption)dbcheckc                   @   s6  e Zd ZdZdZejejejdZ	dd Z
dgZeddd	d
deddddddedde
ddeddddddedddddddeddddd d!ed"d#d$d%ded&d'ddd(ded)d*ddd+ded,d-ddd.ded/d0d1ddd2ed3d4d5ed6d7d8ed9d:ddejdgZd$d$dddddd	d$d$d$d$dddddg fd;d<Zd$S )=cmd_dbcheckz#Check local AD database for errors.z%prog [<DN>] [options])	sambaoptsversionoptscredoptsc                 C   s   |d u sJ |j }|r|d }|d d dkr:t|dksb|d d dkrrt|dkrr|d dkrrt|jdd qt|jd|  |d= nt|jdd d S )	Nr      z--   -yesT	yes_rules)rargslensetattrvaluessplit)optionZoptvalueparserr   arg r   6/usr/lib/python3/dist-packages/samba/netcmd/dbcheck.pyprocess_yes*   s    

zcmd_dbcheck.process_yeszDN?z--scopescopeSUBz>Pass search scope that builds DN list. Options: SUB, ONE, BASE)destdefaulthelpz--fixfixF
store_truezFix any errors found)r   r    actionr!   z--yescallbackzrdon't confirm changes individually. Applies all as a single transaction (will not succeed if any errors are found))r$   r%   r!   z--cross-ncs	cross_ncszcross naming context boundariesz-vz	--verboseverbosezPrint more details of checking)r   r$   r    r!   z-qz--quietzdon't print details of checking)r$   r    r!   z--attrsattrsNz-list of attributes to check (space separated)z	--reindexreindexzforce database re-indexz--force-modulesforce_moduleszVforce loading of Samba modules and ignore the @MODULES record (for very old databases)z--reset-well-known-aclsreset_well_known_aclszGreset ACLs on objects with well known default ACL values to the defaultz--quick-membership-checksquick_membership_checkszrSkips missing/orphaned memberOf backlinks checks, but speeds up dbcheck dramatically for domains with large groups)r   r!   r    r$   z-Hz--URLzFLDB URL for database or target server (defaults to local SAM database)ZURLH)r!   typemetavarr   z#--selftest-check-expired-tombstones!selftest_check_expired_tombstonesc                 C   s0  |
  }|d uo|d}|r.|	j|dd}nd }|rNtt |||dgd}n0ztt |||d}W n   td| Y n0 |d u s|s|}ntt d ||d}tjtjtj	d}|
 }||vrtd	| || }d
g}|r|d |r|d |sdg}n| }d}|r,|r,|  d}zt||||||||||d
}|D ],}t||rlt||d ntd| qN|r| jd d}| r| jd n@|r| jd d}| r| jd n|j||||d}W n   |r|   Y n0 |r|  |dkr,td d S )NZldapT)Zfallback_machinezmodules=samba_dsdb)session_infourlcredentialslpoptions)r1   r2   r3   r4   ztFailed to connect to DB at %s.  If this is a really old sam.ldb (before alpha9), then try again with --force-modules)r   ZBASEZONEzUnknown scope %szshow_deleted:1zpaged_results:1:1000zsearch_options:1:2*F)	samdb_schemar'   r"   r   quietZin_transactionr,   r+   Zcheck_expired_tombstonesZALLzInvalid fix rule %szRe-indexing...
r   zcompleted re-index OK
zResetting @MODULES...
zcompleted @MODULES reset OK
)DNr   controlsr(   r   )Zget_loadparm
startswithZget_credentialsr   r   r   ldbZSCOPE_SUBTREEZ
SCOPE_BASEZSCOPE_ONELEVELupperappendr   Ztransaction_startr   hasattrr   ZoutfwriteZreindex_databaseZreset_modulesZcheck_databaseZtransaction_cancelZtransaction_commitsysexit)selfr9   r-   r'   r"   r   r&   r8   r   r   r	   r
   r(   r)   r*   r,   r+   r0   r   r4   Z	over_ldapZcredsZsamdbr7   Z	scope_mapZsearch_scoper:   Zstarted_transactionZchkr   Zerror_countr   r   r   runW   s    	






zcmd_dbcheck.run)__name__
__module____qualname____doc__Zsynopsisr5   ZSambaOptionsZVersionOptionsZCredentialsOptionsDoubleZtakes_optiongroupsr   Z
takes_argsr   strZSUPPRESS_HELPZtakes_optionsrD   r   r   r   r   r       sf   



r   )r<   rA   Zsamba.getoptZgetoptr5   Z
samba.authr   Zsamba.samdbr   Zsamba.netcmdr   r   r   Zsamba.dbcheckerr   r   r   r   r   r   <module>   s   