
    Id                         d dl mZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlZd dlmZmZ d dlmZ d dlZ G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Zy)    )CommandCommandErrorOptionSuperCommandN)SamDB)system_session)miscdrsuapi)drs_Replicatec                       e Zd Zd Zd Zy)RODCExceptionc                     || _         y )N)value)selfr   s     3/usr/lib/python3/dist-packages/samba/netcmd/rodc.py__init__zRODCException.__init__   s	    
    c                 L    | j                   j                  d| j                  S )Nz: )	__class____name__r   )r   s    r   __str__zRODCException.__str__!   s    >>22DJJ??r   N)r   
__module____qualname__r   r    r   r   r   r      s    @r   r   c                       e Zd Zy)NamingErrorNr   r   r   r   r   r   r   r   %       r   r   c                       e Zd Zy)ReplicationErrorNr   r   r   r   r    r    )   r   r   r    c                       e Zd ZdZdZej                  ej                  ej                  dZ	 e
dde       e
dde       e
d	d
d      gZdgZd Zd Zy)cmd_rodc_preloadzBPreload accounts for an RODC.  Multiple accounts may be requested.z/%prog (<SID>|<DN>|<accountname>)+ ... [options])	sambaoptsversionoptscredoptsz--serverz	DC to use)helptypez--filez<Read account list from a file, or - for stdin (one per line)z--ignore-errorsz<When preloading multiple accounts, skip any failing accounts
store_true)r&   actionzaccount*c                    |dd dk(  r'|j                  d|z  dt        j                  g       }np|j                  d      dk\  r$|j                  |dt        j                  g       }n8|j                  dt        j                  |      z  t        j
                  g 	      }t        |      d
k7  rt        d|z        t        |d   d         S )zwork out what DN they meantr      zS-z<SID=%s>zobjectclass=user)base
expressionscopeattrs=z((&(samAccountName=%s)(objectclass=user)))r-   r.   r/      zFailed to find account '%s'dn)	searchldb
SCOPE_BASEfindbinary_encodeSCOPE_SUBTREElenr   str)r   samdbaccountress       r   get_dnzcmd_rodc_preload.get_dn@   s     1Q<4,,J$8*<%(^^2  ?C \\#!#,,G*<%(^^2  ?C ,,*TWZWhWhipWq*q%(%6%6b  BCs8q=;gEFF3q6$<  r   c                 L   |j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|t        d      |lg }|dk(  r5t        j                  D ]!  }|j	                  |j                                # n0t        |d      D ]!  }|j	                  |j                                # |j                         }	|j                  |	d	
      }
t        d|z  t               |
|	      }t        d t               |
|	      }t        j                  |j                               }d}|	j                         dk\  r|dz  }t        d|d|d|	|
||      }g }|D ]  }|j!                         }|j#                  |t$        j&                  dg      }t        j                  |j)                  d|d   d   d               }	 | j+                  ||      }| j2                  j5                  d|z         |j7                          	 |j9                  |||t:        j<                  d	       |jC                           tE        |      dkD  r-| jG                  d       |D ]  }| jG                  d|z          y y # t,        $ r2}|st/        t1        |            |j	                  |       Y d }~Nd }~ww xY w# t        $ rH}|j?                          |st/        d|z        |j	                  tA        d|z               Y d }~d }~ww xY w)Nr#   r%   serverfileignore_errorszYou must supply a server-rT)fallback_machinez	ldap://%s)urlsession_infocredentialslpseal	   z,printzncacn_ip_tcp:[]invocationId)r,   r.   r/   
objectGUIDr   zReplicating DN %s
)exoprodczError replicating DN %sz'
Preload encountered problematic users:z    %s)$get	Exceptionsysstdinappendstripopenget_loadparmget_credentialsr   r   r	   GUIDget_ntds_GUID	log_levelr   get_dsServiceNamer3   r4   r5   schema_format_valuer>   r   r   r:   outfwritetransaction_start	replicater
   DRSUAPI_EXOP_REPL_SECRETtransaction_cancelr    transaction_commitr9   message)r   accountskwargsr#   r%   r@   accounts_filerB   linerI   credsr;   local_samdbdestination_dsa_guidbinding_optionsreplerrorsr<   
dc_ntds_dnr=   source_dsa_invocation_idr2   eerrors                           r   runzcmd_rodc_preload.runS   s   JJ{+	::j)H%

6*

?3>677$H#II 2DOODJJL12 !4 2DOODJJL12 ##%((d(C +.#1#3"'B0 >3C(-"6  $yy)B)B)DE <<>Qx'OfoN(*>@  	-G002J,,Jcnn^L\,]C'+yy1P1PQ]_bcd_eft_uvw_x1y'z$[[0 IIOO1B67))+r#;=Q$+$D$D4  Q **,7	-: v;?LLCD /X-./ + ! $&s1v..a 	  ..0$&'@2'EFF./H2/MNOs0   !J"$K	K'K

K	L#=LL#N)r   r   r   __doc__synopsisoptionsSambaOptionsVersionOptionsCredentialsOptionstakes_optiongroupsr   r:   takes_options
takes_argsr>   rv   r   r   r   r"   r"   -   su    L@H ))--.. 	z#6x\cfg 'enz{M J!&I/r   r"   c                   (    e Zd ZdZi Z e       ed<   y)cmd_rodcz.Read-Only Domain Controller (RODC) management.preloadN)r   r   r   rw   subcommandsr"   r   r   r   r   r      s    8K-/K	r   r   )samba.netcmdr   r   r   r   samba.getoptgetoptry   samba.samdbr   
samba.authr   r4   samba.dcerpcr	   r
   samba.drs_utilsr   rT   rS   r   r   r    r"   r   r   r   r   <module>r      sd   & E D   % 
 & ) 
@I @	- 		} 	o/w o/d0| 0r   