
    b                        d dl mZ d dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZmZmZ d Zd Zd	 Zd=dZd Zd Zd Z	 	 	 	 	 d>dZ	 	 d?dZ e	ddddgd           e	ddddgd           e	dde           e	dde           e	dde           e	d d!e           e	d"ed#$           e	d%ed&$           e	d'd(e          g	Zd) Z G d* d+e          Z  G d, d-e          Z! G d. d/e          Z"d0 Z# G d1 d2e          Z$ G d3 d4e          Z% G d5 d6e          Z& G d7 d8e          Z' G d9 d:e          Z( G d; d<e
          Z)dS )@    N)SamDB)CommandCommandErrorOptionSuperCommand)DOMAIN_PASSWORD_COMPLEXDOMAIN_PASSWORD_STORE_CLEARTEXT)system_session)NEVER_TIMESTAMPtimestamp_to_minstimestamp_to_daysc                 0    d|                                  z  S )Nz+CN=Password Settings Container,CN=System,%s)	domain_dn)samdbs    2/usr/lib/python3/dist-packages/samba/netcmd/pso.pypso_containerr      s    85??;L;LLL    c                 F    t          d| z             }t          |          S )z4Converts a value in minutes to -100 nanosecond unitsg    A)intstr)mins	timestamps     r   mins_to_timestampr   "   s#    Z$&'''Iy>>r   c                 J    t          | dz  dz            }t          |          S )z1Converts a value in days to -100 nanosecond units<      )r   r   )daysr   s     r   days_to_timestampr   (   s#    !$)b.11Iy>>r   Tc                    ddd}g d}|                     |t          j        |          }|d         }|                     d|d         z             |                     d	           |                     d
|d         z             t	          |d                   }|                     d||         z             t	          |d                   }|                     d||         z             |                     d|d         z             |                     d|d         z             |                     dt          |d         d                   z             |                     dt          |d         d                   z             |                     dt          |d         d                   z             |                     d|d         z             |                     dt          |d         d                   z             |rkd|v rP|                     dt          |d                   z             |d         D ]}|                     d |z             d"S |                     d!           d"S d"S )#z8Displays the password settings for a PSO specified by DNonoff)TRUEFALSE)namemsDS-PasswordSettingsPrecedence(msDS-PasswordReversibleEncryptionEnabledmsDS-PasswordHistoryLengthmsDS-MinimumPasswordLengthmsDS-PasswordComplexityEnabledmsDS-MinimumPasswordAgemsDS-MaximumPasswordAgemsDS-LockoutObservationWindowmsDS-LockoutThresholdmsDS-LockoutDurationmsDS-PSOAppliesToscopeattrsr   z"Password information for PSO '%s'
r$   
z Precedence (lowest is best): %s
r%   r)   zPassword complexity: %s
r&   zStore plaintext passwords: %s
zPassword history length: %s
r'   zMinimum password length: %s
r(   z Minimum password age (days): %d
r*   z Maximum password age (days): %d
r+   z$Account lockout duration (mins): %d
r.   z)Account lockout threshold (attempts): %s
r-   z'Reset account lockout after (mins): %d
r,   r/   z*
PSO applies directly to %d groups/users:
z  %s
z2
Note: PSO does not apply to any users or groups.
N)searchldb
SCOPE_BASEwriter   r   r   len)	outfr   dnshow_applies_to
on_off_str	pso_attrsrespso_resbool_strs	            r   show_pso_by_dnrA   .   s    //J& & &I ,,ry,
A
AC!fGJJ4wvFGGGJJtJJ289: ; ; ;7;<==HJJ*Z-AABBB7EFGGHJJ0:h3GGHHHJJ.345 6 6 6JJ.345 6 6 6JJ2 )B!CA!FGGH I I IJJ2 )B!CA!FGGH I I IJJ6 )?!@!CDDE F F FJJ;./0 1 1 1JJ9 )H!I!!LMMN O O O  O'))JJE7#67889 : : :12 * *

8b=))))* * JJMNNNNNO Or   c                    	 |                      |t          j        dg          }nE# t          j        $ r3}|j        d         t          j        k    rt          d|z             d}~ww xY wd|d         vrt          d          dS )z=Gracefully bail out if we can't view/modify the PSO specifiedr%   r0   r   zUnable to find PSO '%s'Nz/You may not have permission to view/modify PSOs)r4   r5   r6   LdbErrorargsERR_NO_SUCH_OBJECTr   )r   pso_dnr$   r>   es        r   check_pso_validrH   `   s    ll6"C!D  F F<   6!9...84?@@@ )A66LMMM 76s   #& A(.A##A(c                 v   d|z  }|                     |                                t          j        |ddg          }t	          |          dk    r|                     d|z             dS d|d         vr/|                     d|z             |                     d           dS t          ||d         d         d         d	           |                     d
|z             t          | ||d         d         d         d           d|d         v r|                     d           dS |                     d           dS )z2Displays the password settings for a specific userz((&(sAMAccountName=%s)(objectClass=user))zmsDS-ResultantPSOzmsDS-PSOApplied)r1   
expressionr2   r   zUser '%s' not found.
z@No PSO applies to user '%s'. The default domain settings apply.
z4Refer to 'samba-tool domain passwordsettings show'.
z???z0The following PSO settings apply to user '%s'.

Fr;   zD
Note: PSO applies directly to user (any group PSOs are overridden)
z+
PSO applies to user via group membership.
N)r4   r   r5   SCOPE_SUBTREEr8   r7   rH   rA   )r9   r   usernamesearch_filterr>   s        r   show_pso_for_userrO   q   s    ?IM
,,u((0A"/13DE  G GC 3xx1}}

+h677777	CF	*	*

 :<DE 	F 	F 	F

JKKKKK 	s1v&9:1=uEEE

G 	 	 	tUCF+>$?$B',	. 	. 	. 	. A&&JJ ; < < < < < JJFGGGGGr   c                 8    t          j        |||          | |<   d S )N)r5   MessageElement)msg	attr_namevalueldb_opers       r   msg_add_attrrV      s    'xCCC	NNNr   c                    t          j                    }t          j        ||          |_        |r&t           j        }t          j        d|d          |d<   nt           j        }|t          |dt          |          |           ||dk    rdnd}t          |d	||           ||dk    rdnd}t          |d
||           |t          |dt          |          |           |	t          |dt          |	          |           |
!t          |
          }t          |d||           |<|dk    rt          t                    }nt          |          }t          |d||           |!t          |          }t          |d||           |t          |dt          |          |           |t          |dt          |          |           |S )z0Packs the given PSO settings into an LDB messagezmsDS-PasswordSettingsobjectClasszmsDS-objectClassNr%   r    r"   r#   r)   r&   r'   r(   r*   r   r+   r.   r-   r,   )r5   MessageDnr:   FLAG_MOD_ADDrQ   FLAG_MOD_REPLACErV   r   r   r   r   )r9   r   rF   createlockout_threshold
complexity
precedencestore_plaintexthistory_lengthmin_pwd_lengthmin_pwd_agemax_pwd_agelockout_durationreset_lockout_aftermrU   r@   min_pwd_age_ticksmax_pwd_age_tickslockout_duration_tickss                       r   make_pso_ldb_msgrl      sY    	A6%  AD (# # 23J3;]!L !L
 'Q93z??	 	 	 '4//66WQ8(HMMM",4466'QBx	) 	) 	) !Q4c.6I6I	 	 	 !Q4c.6I6I	 	 	 -k::Q13D	 	 	  ! #O 4 4 1+ > >Q13DhOOO#!23C!D!DQ.0F	 	 	 $Q/5F1G1G	 	 	 &Q7&':;;X	G 	G 	G Hr   c                     ||dk    rt          d          | | dk    rt          d          ||||k    r|dk    rt          d          dS dS dS dS )z,Checks PSO settings fall within valid rangesNi   z5Bad password history length: valid range is 0 to 1024   z4Bad minimum password length: valid range is 0 to 255r   z2Minimum password age must be less than maximum age)r   )rc   rb   rd   re   s       r   check_pso_constraintsro      s    
 !nt&;&; 6 7 7 	7 !ns&:&: 5 6 6 	6 ;#:+%%+*:*:  - . . . #:#:%%*:*:r   z--complexitychoicer    r!   z#The password complexity (on | off).)typechoiceshelpz--store-plaintextziStore plaintext passwords where account have 'store passwords with reversible encryption' set (on | off).z--history-lengthz(The password history length (<integer>).)rs   rq   z--min-pwd-lengthz(The minimum password length (<integer>).z--min-pwd-agezHThe minimum password age (<integer in days>). Default is domain setting.z--max-pwd-agezHThe maximum password age (<integer in days>). Default is domain setting.z--account-lockout-durationzThe length of time an account is locked out after exceeding the limit on bad password attempts (<integer in mins>). Default is domain settingrq   rs   z--account-lockout-thresholdzrThe number of bad password attempts allowed before locking out the account (<integer>). Default is domain setting.z--reset-account-lockout-afterz~After this time is elapsed, the recorded number of attempts restarts from zero (<integer in mins>). Default is domain setting.c                 J    d}| D ]}|D ]}t          |          |v r|dz  }|S )z
    Returns the number of options specified that are present in the args.
    (There can be other args besides just the ones we're interested in, which
    is why argc on its own is not enough)
    r      )r   )optionsrD   num_optsoptargs        r   num_options_in_argsr{     sL     H   	 	C3xx3A	 Or   c            	           e Zd ZdZdZej        ej        ej        dZ	e
 eddddde	          gz   Zd
dgZ	 	 	 	 	 	 ddZdS )!cmd_domain_pwdsettings_pso_createa  Creates a new Password Settings Object (PSO).

    PSOs are a way to tailor different password settings (lockout policy,
    minimum password length, etc) for specific users or groups.

    The psoname is a unique name for the new Password Settings Object.
    When multiple PSOs apply to a user, the precedence determines which PSO
    will take effect. The PSO with the lowest precedence will take effect.

    For most arguments, the default value (if unspecified) is the current
    domain passwordsettings value. To see these values, enter the command
    'samba-tool domain passwordsettings show'.

    To apply the new PSO to user(s) or group(s), enter the command
    'samba-tool domain passwordsettings pso apply'.
    z&%prog <psoname> <precedence> [options]	sambaoptsversionoptscredopts-H--URL%LDB URL for database or target serverURLHrs   metavardestrq   psonamer`   Nc                    |                                 }|                    |          }t          |t                      ||          }	 t	          |          }n# t
          $ r t          d          w xY wd|dt          |          }	 |                    |t          j
                  }t          d|z            # t          j        $ r'}|j        d         t          j        k    rn Y d }~nd }~ww xY wt          t          | j                  }|dk    rt          d          |t#          t                    k     r*|                     d	           |                     d
           |                    |                                t          j
        g d          }t#          |          dk    sJ t	          |d         d         d                   }|t(          }||z  rdnd}|t*          }||z  rdnd}|!t	          |d         d         d                   }|	!t	          |d         d         d                   }	|!t-          |d         d         d                   }|!t-          |d         d         d                   }|
!t/          |d         d         d                   }
|!t	          |d         d         d                   }|!t/          |d         d         d                   }t1          ||||	           t3          | j        ||d|||||	|||
||          }	 |                    |           |                     d|z             t9          | j        ||d           d S # t          j        $ rC}|j        \  }}|t          j        k    rt          d          t          d|d |          d }~ww xY w)!Nurlsession_infocredentialslpz<The PSO's precedence should be a numerical value. Try --helpCN=,)r1   zPSO '%s' already existsr   ?Please specify at least one password policy setting. Try --helpz4Not all password policy options have been specified.zaFor unspecified options, the current domain password settings will be used as the default values.)pwdPropertiespwdHistoryLengthminPwdLength	minPwdAge	maxPwdAgelockoutDurationlockoutThresholdlockOutObservationWindowr0   rv   r   r    r!   r   r   r   r   r   r   r   re   rd   rb   rc   Tr]   r_   r`   ra   rb   rc   rd   re   rf   r^   rg   zPSO successfully created: %sFrK   z5Administrator permissions are needed to create a PSO.zFailed to create PSO '': )get_loadparmget_credentialsr   r
   r   
ValueErrorr   r   r4   r5   r6   rC   rD   rE   r{   pwd_settings_optionsraw_argvr8   messager   r   r	   r   r   ro   rl   r9   addrA   ERR_INSUFFICIENT_ACCESS_RIGHTS)selfr   r`   r   rd   re   r_   ra   rb   rc   account_lockout_durationaccount_lockout_thresholdreset_account_lockout_afterr   r   r   r   credsr   rF   r>   rG   num_pwd_args	pwd_props	prop_flagrh   numrR   s                               r   runz%cmd_domain_pwdsettings_pso_create.run:  s    ##%%((,,!.*:*:"'B0 0 0	@ZJJ 	@ 	@ 	@  ? @ @ @	@   'wwe(<(<(<=	D,,vS^,<<C 87BCCC | 	 	 	vayC222 	 ++?OO1  5 6 6 6 #23333LL 0 1 1 1LL I J J J ll5??,,CN"R "R "R  S S 3xx1}}}} A/233	/I!*Y!6AEJ"7I&/)&;FddO! Q(:!;A!>??N! Q!7!:;;N+CF;,?,BCCK+CF;,?,BCCK#+!#a&):";A">?? % %,(+CF3E,Fq,I(J(J%&.!#a&)C"DQ"GHH ( 	+;-;-;	= 	= 	= 	=
 TYvd(2z-<,:,:)4+.F/H1LN N N	LIIaLLLLL7&@AAA49eVUKKKKKK| 	L 	L 	LJS#c888" $6 7 7 7 #lfffFIc$K L L L	Ls=   
A A4!C   C6C11C6%AM, ,N>;>N99N>)NNNNNNNNNNNNN)__name__
__module____qualname____doc__synopsisrw   SambaOptionsVersionOptionsCredentialsOptionstakes_optiongroupsr   r   r   takes_options
takes_argsr    r   r   r}   r}     s         " 8H )-.  )tW#J3S	2 	2 	2, M \*J;??C04EIGKrL rL rL rL rL rLr   r}   c            
           e Zd ZdZdZej        ej        ej        dZ	e
 eded           eddd	ed
d          gz   ZdgZ	 	 	 	 	 	 ddZdS )cmd_domain_pwdsettings_pso_setz*Modifies a Password Settings Object (PSO).%prog <psoname> [options]r~   z--precedencezUThis PSO's precedence relative to other PSOs. Lower precedence is better (<integer>).rt   r   r   r   r   r   )rs   rq   r   r   r   Nc                    |                                 }|                    |          }t          |t                      ||          }d|dt	          |          }t          |||           t          t          | j                  }|dk    r|t          d          ||n|
                    |t          j        ddg          }|#|d         d         d         }t          |          }|#|d         d         d         }t          |          }t          ||||		           t          | j        ||d
|||||	|||
||          }	 |                    |           |                     d|z             t'          | j        ||d
           d S # t          j        $ r$}|j        \  }}t          d|d|          d }~ww xY w)Nr   r   r   r   r   r*   r+   r0   r   Fr   zSuccessfully updated PSO: %srK   Failed to update PSO 'r   )r   r   r   r
   r   rH   r{   r   r   r   r4   r5   r6   r   ro   rl   r9   modifyr   rA   rC   rD   )r   r   r   r`   rd   re   r_   ra   rb   rc   r   r   r   r   r   r   r   r   r   rF   r   r>   min_pwd_ticksmax_pwd_ticksrh   rG   r   rR   s                               r   r   z"cmd_domain_pwdsettings_pso_set.run  s7    ##%%((,,!.*:*:"'B0 0 0  'wwe(<(<(<=vw/// ++?OO1!3  5 6 6 6 "k&= ,,vS^&?&?&A  B BC " #A'@ A! D/>>" #A'@ A! D/>>+;-;-;	= 	= 	= 	=
 TYve(2z-<,:,:)4+.F/H1LN N N	PLLOOOLL7&@AAA49eVUKKKKKK| 	P 	P 	PJS#,&&&##NOOO	Ps   AF GF==G)NNNNNNNNNNNNNN)r   r   r   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s        44*H )-.  )~C?	A 	A 	A 	tW#JS	2 	2 	2	, M J@D?C04EIGK<P <P <P <P <P <Pr   r   c                   v    e Zd ZdZdZej        ej        ej        dZ	 e
ddddde	          gZd
gZ	 	 ddZdS )!cmd_domain_pwdsettings_pso_deletez)Deletes a Password Settings Object (PSO).r   r~   r   r   r   r   r   r   r   Nc                 <   |                                 }|                    |          }t          |t                      ||          }d|dt	          |          }	t          ||	|           |                    |	           |                     d|z             d S )Nr   r   r   zDeleted PSO %s)r   r   r   r
   r   rH   deleter   
r   r   r   r   r   r   r   r   r   rF   s
             r   r   z%cmd_domain_pwdsettings_pso_delete.run  s    ##%%((,,!.*:*:"'B0 0 0  'wwe(<(<(<=vw///V%/00000r   NNNNr   r   r   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s        33*H )-.  	tW#J3S	2 	2 	2M J<@1 1 1 1 1 1r   r   c                 <    t          | d         d                   }|S )Nr%   r   )r   )aa_precedences     r   pso_keyr   #  s     q:;A>??Lr   c                   l    e Zd ZdZdZej        ej        ej        dZ	 e
ddddde	          gZddZd
S )cmd_domain_pwdsettings_pso_listz+Lists all Password Settings Objects (PSOs).z%prog [options]r~   r   r   r   r   r   r   Nc                 h   |                                 }|                    |          }t          |t                      ||          }|                    t          |          t          j        ddgd          }t          |          dk    s
d|d         vr| j	        
                    d           d S t          |t                    }	| j	        
                    d	           | j	        
                    d
           |	D ]1}
|
d         }| j	        
                    |dd|
d         d           2d S )Nr   r$   r%   z#(objectClass=msDS-PasswordSettings))r1   r2   rJ   r   z@No PSOs are present, or you don't have permission to view them.
)keyzPrecedence | PSO name
z3--------------------------------------------------
10z | r3   )r   r   r   r
   r4   r   r5   rL   r8   r9   r7   sortedr   )r   r   r   r   r   r   r   r   r>   pso_listpsor`   s               r   r   z#cmd_domain_pwdsettings_pso_list.run8  sR   ##%%((,,!.*:*:"'B0 0 0 ll=//s7H"(*K!L&K  M M s88q===SVKKIOO / 0 0 0F #7+++	1222	NOOO 	H 	HC>?JIOOjjjj#f+++FGGGG	H 	Hr   r   )r   r   r   r   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   (  s        55 H )-.  	tW#J3S	2 	2 	2M
H H H H H Hr   r   c                   v    e Zd ZdZdZej        ej        ej        dZ	 e
ddddde	          gZd
gZ	 	 ddZdS )cmd_domain_pwdsettings_pso_showz-Display a Password Settings Object's details.r   r~   r   r   r   r   r   r   r   Nc                    |                                 }|                    |          }t          |t                      ||          }d|dt	          |          }	t          ||	|           t          | j        ||	           d S )Nr   r   r   )r   r   r   r
   r   rH   rA   r9   r   s
             r   r   z#cmd_domain_pwdsettings_pso_show.runf  s    ##%%((,,!.*:*:"'B0 0 0  'wwe(<(<(<=vw///ty%00000r   r   r   r   r   r   r   r   U  s        77*H )-.  	tW#J3S	2 	2 	2M J<@
1 
1 
1 
1 
1 
1r   r   c                   v    e Zd ZdZdZej        ej        ej        dZ	 e
ddddde	          gZd
gZ	 	 ddZdS )$cmd_domain_pwdsettings_pso_show_userz4Displays the Password Settings that apply to a user.z%prog <username> [options]r~   r   r   r   r   r   r   rM   Nc                     |                                 }|                    |          }t          |t                      ||          }t	          | j        ||           d S )Nr   )r   r   r   r
   rO   r9   )	r   rM   r   r   r   r   r   r   r   s	            r   r   z(cmd_domain_pwdsettings_pso_show_user.run  se    ##%%((,,!.*:*:"'B0 0 0 	$)UH55555r   r   r   r   r   r   r   r   s  s        >>+H )-.  	tW#J3S	2 	2 	2M J=A6 6 6 6 6 6r   r   c                   x    e Zd ZdZdZej        ej        ej        dZ	 e
ddddde	          gZd
dgZ	 	 ddZdS ) cmd_domain_pwdsettings_pso_applya  Applies a PSO's password policy to a user or group.

    When a PSO is applied to a group, it will apply to all users (and groups)
    that are members of that group. If a PSO applies directly to a user, it
    will override any group membership PSOs for that user.

    When multiple PSOs apply to a user, either directly or through group
    membership, the PSO with the lowest precedence will take effect.
    .%prog <psoname> <user-or-group-name> [options]r~   r   r   r   r   r   r   r   user_or_groupNc                    |                                 }|                    |          }t          |t                      ||          }	d|dt	          |	          }
t          |	|
|           d|z  }|	                    |	                                t          j	        |          }t          |          dk    rt          d|z            t          |d         j                  }t          j                    }t          j        |	|
          |_        t          j        |t          j        d          |d<   	 |	                    |           n\# t          j        $ rJ}|j        \  }}|t          j        k    rt          d	|d
|d          t          d|d|          d }~ww xY w|                     d	|d|d           d S )Nr   r   r   (sAMAccountName=%s)r1   rJ   r   .The specified user or group '%s' was not foundr/   PSO 'z' already applies to ''r   r   z' applied to ')r   r   r   r
   r   rH   r4   r   r5   rL   r8   r   r   r:   rY   rZ   rQ   r[   r   rC   rD   ERR_ATTRIBUTE_OR_VALUE_EXISTSr   r   r   r   r   r   r   r   r   r   r   rF   rN   r>   	target_dnrh   rG   r   rR   s                     r   r   z$cmd_domain_pwdsettings_pso_apply.run  s   ##%%((,,!.*:*:"'B0 0 0  'wwe(<(<(<=vw/// .=ll5??,,C4E&3  5 5 s88q==O!. / 0 0 0 A	NN	KMMveV$$!$!3I474D4G"I "I

	LLLOOOO| 	L 	L 	LJS#c777"l&-gg}}}$> ? ? ? #lgggFIc$K L L L	L 	777MMMJKKKKK   8E F'AF""F'r   r   r   r   r   r   r     s          @H )-.  	tW#J3S	2 	2 	2M _-J;?(,(L (L (L (L (L (Lr   r   c                   x    e Zd ZdZdZej        ej        ej        dZ	 e
ddddde	          gZd
dgZ	 	 ddZdS )"cmd_domain_pwdsettings_pso_unapplyz4Updates a PSO to no longer apply to a user or group.r   r~   r   r   r   r   r   r   r   r   Nc                    |                                 }|                    |          }t          |t                      ||          }	d|dt	          |	          }
t          |	|
|           d|z  }|	                    |	                                t          j	        |          }t          |          dk    rt          d|z            t          |d         j                  }t          j                    }t          j        |	|
          |_        t          j        |t          j        d          |d<   	 |	                    |           n\# t          j        $ rJ}|j        \  }}|t          j        k    rt          d	|d
|d          t          d|d|          d }~ww xY w|                     d	|d|d           d S )Nr   r   r   r   r   r   r   r/   r   z' doesn't apply to 'r   r   r   z' no longer applies to ')r   r   r   r
   r   rH   r4   r   r5   rL   r8   r   r   r:   rY   rZ   rQ   FLAG_MOD_DELETEr   rC   rD   ERR_NO_SUCH_ATTRIBUTEr   r   s                     r   r   z&cmd_domain_pwdsettings_pso_unapply.run  s   ##%%((,,!.*:*:"'B0 0 0  'wwe(<(<(<=vw/// .=ll5??,,C4E&3  5 5 s88q==O!. / 0 0 0 A	NN	KMMveV$$!$!3I474G4G"I "I

	LLLOOOO| 	L 	L 	LJS#c///"l&-gg}}}$> ? ? ? #lgggFIc$K L L L	L 	WWW=J]]L 	M 	M 	M 	M 	Mr   r   r   r   r   r   r   r     s        >>?H )-.  	tW#J3S	2 	2 	2M _-J;?(,(M (M (M (M (M (Mr   r   c                       e Zd ZdZi Z e            ed<    e            ed<    e            ed<    e            ed<    e	            ed<    e
            ed<    e            ed<    e            ed	<   d
S )cmd_domain_passwordsettings_psoz5Manage fine-grained Password Settings Objects (PSOs).applyr]   r   listsetshowz	show-userunapplyN)r   r   r   r   subcommandsr   r}   r   r   r   r   r   r   r   r   r   r   r     s        ??K;;==K==??K==??K99;;K7799K99;;KCCEEK??AAK	r   r   )T)
NNNNNNNNNNr   )*samba.getoptgetoptrw   r5   samba.samdbr   samba.netcmdr   r   r   r   samba.dcerpc.samrr   r	   
samba.authr
   samba.netcmd.commonr   r   r   r   r   r   rA   rH   rO   rV   rl   ro   r   r   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s  $       



       F F F F F F F F F F F F@ @ @ @ @ @ @ @ % % % % % %4 4 4 4 4 4 4 4 4 4
M M M    /O /O /O /OdN N N"H H H@D D D EIGK9=JN)-	A A A AH ?C8<. . . ., F>4-57 7 7
FXe}JK K K F:F F F
F:F F F
F?.58: : : F?.58: : : F'c-/ / / F(sKM M M F*.58: : :/; :  RL RL RL RL RL RL RL RLjPP PP PP PP PPW PP PP PPf1 1 1 1 1 1 1 1B  
*H *H *H *H *Hg *H *H *HZ1 1 1 1 1g 1 1 1<6 6 6 6 67 6 6 68AL AL AL AL ALw AL AL ALH9M 9M 9M 9M 9M 9M 9M 9MxB B B B Bl B B B B Br   