
    Id3                     z    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 d dlmZ  G d de
      Zy)	    N)system_session)SamDB)CommandCommandErrorOption)dbcheck)colourc                      e Zd ZdZdZej                  ej                  ej                  dZ	d Z
dgZ edddd	
       eddddd       edde
d       eddddd       edddddd       eddddd        ed!d"d#d$
       ed%d&ddd'       ed(d)ddd*       ed+d,ddd-       ed.d/d0dd1       ed2d3d4ed5d67       ed8d9ddej                        gZ	 	 	 	 	 	 	 	 d;d:Zy#)<cmd_dbcheckz#Check local AD database for errors.z%prog [<DN>] [options])	sambaoptsversionoptscredoptsc                 J   |J |j                   }|rz|d   }|d d dk(  rt        |      dkD  s|d d dk(  r.t        |      dkD  r |d   dk7  rt        |j                  dd       y t        |j                  d|j	                                |d= y t        |j                  dd       y )	Nr      z--   -yesT	yes_rules)rargslensetattrvaluessplit)optionoptvalueparserr   args         6/usr/lib/python3/dist-packages/samba/netcmd/dbcheck.pyprocess_yeszcmd_dbcheck.process_yes+   s    }}(CRaDSX\RaCCHqLSVs]ud3{CIIK@!HFMM5$/    z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_aclszTreset ACLs on objects with well known default values (for updating from early 4.0.x)z--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)URLH)r&   typemetavarr$   z#--selftest-check-expired-tombstones!selftest_check_expired_tombstonesc                 x   |g }|
j                         }|d uxr |j                  d      }|r|	j                  |d      }nd }|rt        t	               |||dg      }n	 t        t	               |||      }||s|}nt        t	               d ||      }t        j                  t        j                  t        j                  d}|j                         }||vrt        d	|z        ||   }d
g}|r|j                  d       |r|j                  d       |sdg}n|j                         }t        j                  t        j                   | j"                        }d}|r|r|j%                          d}	 t'        |||||||||||      }|D ])  }t)        ||      rt+        ||d       t        d|z         |rI| j,                  j/                  d       d}|j1                         r|| j,                  j/                  d       n`|rI| j,                  j/                  d       d}|j3                         r1| j,                  j/                  d       n|j5                  ||||      }|r|j9                          |dk7  rt        j:                  d       y y #  t        d|z        xY w#  |r|j7                           xY w)NldapT)fallback_machinezmodules=samba_dsdb)session_infourlcredentialslpoptions)r:   r;   r<   r=   ztFailed to connect to DB at %s.  If this is a really old sam.ldb (before alpha9), then try again with --force-modules)r#   BASEONEzUnknown scope %szshow_deleted:1zpaged_results:1:1000zsearch_options:1:2*)hintF)
samdb_schemar,   r'   r   quietin_transactionr1   r0   check_expired_tombstonesr	   ALLzInvalid fix rule %szRe-indexing...
r   zcompleted re-index OK
zResetting @MODULES...
zcompleted @MODULES reset OK
)DNr"   controlsr-   r   )get_loadparm
startswithget_credentialsr   r   r   ldbSCOPE_SUBTREE
SCOPE_BASESCOPE_ONELEVELupperappendr   r	   colour_if_wantedsysstdoutrequested_colourtransaction_startr   hasattrr   outfwritereindex_databasereset_modulescheck_databasetransaction_canceltransaction_commitexit) selfrH   r3   r,   r'   r   r+   rD   r"   r   r   r   r-   r.   r/   r1   r0   r6   r   r=   	over_ldapcredssamdbrC   	scope_mapsearch_scoperI   stdout_colourstarted_transactionchkr   error_counts                                    r   runzcmd_dbcheck.run\   s    I##%TM:all6&:	,,R$,GEE~'7Q&+=Q<RTE_>+;*/B8
 9I L n.>D-2r;L  --s~~cN`N`a		!1E9:: '$%OO23OO01EEKKME //

595J5JL $3##%"&!	%lG!s%)<2I0E3T!.0C $ G3'C/&'<v'EFF	G 		 23'')IIOO$=>		 9:$$&IIOO$CD "00Bl:B% 1 Q $$&!HHQK S_"  $Z  ]^  $^  _  _@	"((*s   !J 4C/J$ J!$J9)NNFFFFFr#   NNNNFFFFFN)__name__
__module____qualname____doc__synopsisr>   SambaOptionsVersionOptionsCredentialsOptionsDoubletakes_optiongroupsr    
takes_argsr   strSUPPRESS_HELPtakes_optionsrk    r!   r   r   r   !   s~   -'H ))--440 J 	ywT	VwUE,*	,wzK I	J};l5	7t[yu4	6tY|U5	7yw;jk{E,Uno l  bz  	{(+\8	:
 	*1J$ \		3
 	tW#kS	247|((	*9MB BG#(DH5:$)"'.3fr!   r   )rM   rT   samba.getoptgetoptr>   
samba.authr   samba.samdbr   samba.netcmdr   r   r   samba.dbcheckerr   sambar	   r   ry   r!   r   <module>r      s6   &  
  %  
 $ a' ar!   