ó
    cÛ–i†�  ã                   ó  • S SK Jr  S SKrS SKJr  S SKJrJrJ	r	J
r
  S SKJrJr  S SKJr  S SKJrJrJr  S rS rS	 rS<S
 jrS rS rS r     S=S jr  S>S jr\	" SSSS/SS9\	" SSSS/SS9\	" SS\S9\	" SS\S9\	" SS\S9\	" SS \S9\	" S!\S"S#9\	" S$\S%S#9\	" S&S'\S9/	rS( r " S) S*\5      r  " S+ S,\5      r! " S- S.\5      r"S/ r# " S0 S1\5      r$ " S2 S3\5      r% " S4 S5\5      r& " S6 S7\5      r' " S8 S9\5      r( " S: S;\
5      r)g)?é    N)ÚSamDB)ÚCommandÚCommandErrorÚOptionÚSuperCommand)ÚDOMAIN_PASSWORD_COMPLEXÚDOMAIN_PASSWORD_STORE_CLEARTEXT)Úsystem_session)ÚNEVER_TIMESTAMPÚtimestamp_to_minsÚtimestamp_to_daysc                 ó(   • SU R                  5       -  $ )Nz+CN=Password Settings Container,CN=System,%s)Ú	domain_dn)Úsamdbs    Ú2/usr/lib/python3/dist-packages/samba/netcmd/pso.pyÚpso_containerr      s   € Ø8¸5¿?¹?Ó;LÑLÐLó    c                 ó6   • [        SU -  5      * n[        U5      $ )z4Converts a value in minutes to -100 nanosecond unitsg    £áÁA)ÚintÚstr)ÚminsÚ	timestamps     r   Úmins_to_timestampr   "   s   € ä�Z $Ñ&Ó'Ð'€IÜˆy‹>Ðr   c                 ó:   • [        U S-  S-  5      n[        U5      $ )z1Converts a value in days to -100 nanosecond unitsé<   é   )r   r   )Údaysr   s     r   Údays_to_timestampr   (   s   € ä! $¨¡)¨b¡.Ó1€IÜˆy‹>Ðr   c                 óÎ  • SSS.n/ SQnUR                  U[        R                  US9nUS   nU R                  SUS   -  5        U R                  S	5        U R                  S
US   -  5        [	        US   5      nU R                  SXH   -  5        [	        US   5      nU R                  SXH   -  5        U R                  SUS   -  5        U R                  SUS   -  5        U R                  S[        US   S   5      -  5        U R                  S[        US   S   5      -  5        U R                  S[        US   S   5      -  5        U R                  SUS   -  5        U R                  S[        US   S   5      -  5        U(       aY  SU;   aA  U R                  S[        US   5      -  5        US    H  nU R                  S U-  5        M     g"U R                  S!5        g"g")#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€CØ�!‰f€GØ‡J�JÐ4°w¸v±ÑFÔGØ‡J�JˆtÔà‡J�JÐ2ØÐ8Ñ9ñ:ô ;ä�7Ð;Ñ<Ó=€HØ‡J�JÐ*¨ZÑ-AÑAÔBÜ�7ÐEÑFÓG€HØ‡J�JÐ0°:Ñ3GÑGÔHØ‡J�JÐ.ØÐ3Ñ4ñ5ô 6à‡J�JÐ.ØÐ3Ñ4ñ5ô 6à‡J�JÐ2Ü  Ð)BÑ!CÀAÑ!FÓGñHô Ià‡J�JÐ2Ü  Ð)BÑ!CÀAÑ!FÓGñHô Ià‡J�JÐ6Ü  Ð)?Ñ!@ÀÑ!CÓDñEô Fà‡J�JÐ;ØÐ.Ñ/ñ0ô 1à‡J�JÐ9Ü  Ð)HÑ!IÈ!Ñ!LÓMñNô Oö Ø 'Ó)Ø�J‰JÐEÜ˜7Ð#6Ñ7Ó8ñ9ô :àÐ1Ô2�Ø—
‘
˜8 b™=Ö)ò 3ð �J‰JÐMÕNð r   c                 ó  •  U R                  U[        R                  S/S9nSUS   ;  a  [        S5      eg! [        R                   a5  nUR                  S   [        R
                  :X  a  [        SU-  5      ee SnAff = f)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ˆ   € ðØ�l‰l˜6¬¯©Ø"CÐ!Dð ð Fˆð )°°A±Ó6ÜÐLÓMÐMð 7øô �<‰<ó Ø�6‰6�!‰9œ×.Ñ.Ó.ÜÐ8¸4Ñ?Ó@Ð@Øûðús   ‚ 7 ·B Á0A;Á;B c                 óæ  • SU-  nUR                  UR                  5       [        R                  USS/S9n[	        U5      S:X  a  U R                  SU-  5        gSUS   ;  a&  U R                  SU-  5        U R                  S5        g[        XS   S   S   S	5        U R                  S
U-  5        [        XUS   S   S   SS9  SUS   ;   a  U R                  S5        gU R                  S5        g)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  € ð ?ÀÑI€Mà
�,‰,�u—‘Ó(´×0AÑ0AØ"/Ø1Ð3DÐEð ð G€Cô ˆ3ƒx�1ƒ}Ø�
‰
Ð+¨hÑ6Õ7Ø	 C¨¡FÓ	*Ø�
‰
ð :Ø<DñEô 	Fà�
‰
ÐJÕKô 	˜ 1™vÐ&9Ñ:¸1Ñ=¸uÔEØ�
‰
ÐGØñô 	ä�t C¨¡FÐ+>Ñ$?ÀÑ$BØ',ò	.ð   A¡Ó&Ø�J‰Jð ;õ <ð �J‰JÐFÕGr   c                 ó6   • [         R                  " X#U5      X'   g )N)r5   ÚMessageElement)ÚmsgÚ	attr_nameÚvalueÚldb_opers       r   Úmsg_add_attrrV   ‘   s   € Ü×'Ò'¨¸ÓC€C‚Nr   c                 ó0  • [         R                  " 5       n[         R                  " X5      Ul        U(       a,  [         R                  n[         R
                  " SUS5      US'   O[         R                  nUb  [        US[        U5      U5        Ub  US:X  a  SOSn[        USUU5        Ub  US:X  a  SOSn[        US	UU5        Ub  [        US
[        U5      U5        U	b  [        US[        U	5      U5        U
b  [        U
5      n[        USUU5        Ub/  US:X  a  [        [        5      nO[        U5      n[        USUU5        Ub  [        U5      n[        USUU5        Ub  [        US[        U5      U5        Ub  [        US[        U5      U5        U$ )z0Packs the given PSO settings into an LDB messagezmsDS-PasswordSettingsÚobjectClasszmsDS-objectClassr%   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   •   sÉ  € ô 	�Š‹€AÜ�6Š6�%Ó €A„DæÜ×#Ñ#ˆÜ #× 2Ò 2Ð3JØ3;¸]ó!LˆÐ
Òô ×'Ñ'ˆàÑÜ�QÐ9¼3¸z»?Øô	ð ÑØ'¨4Ó/‘6°WˆÜ�QÐ8¸(ÀHÔMàÑ"Ø,°Ó4‘6¸'ˆÜ�QÐBØ˜xô	)ð Ñ!Ü�QÐ4´c¸.Ó6IØô	ð Ñ!Ü�QÐ4´c¸.Ó6IØô	ð ÑÜ-¨kÓ:ÐÜ�QÐ1Ð3DØô	ð Ñð ˜!ÓÜ #¤OÓ 4Ñä 1°+Ó >ÐÜ�QÐ1Ð3DÀhÔOàÑ#Ü!2Ð3CÓ!DÐÜ�QÐ.Ð0FØô	ð Ñ$Ü�QÐ/´Ð5FÓ1GØô	ð Ñ&Ü�QÐ7Ü&Ð':Ó;¸Xô	Gð €Hr   c                 ó’   • Ub  US:”  a  [        S5      eU b  U S:”  a  [        S5      eUb  Ub  X#:¼  a  US:w  a  [        S5      egggg)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€   € ð
 Ñ! n°tÓ&;Üð 6ó 7ð 	7ð Ñ! n°sÓ&:Üð 5ó 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-durationz�The 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                 óZ   • SnU  H"  nU H  n[        U5      U;   d  M  US-  nM     M$     U$ )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{     s8   € ð €HÛˆÛˆCä�3‹x˜3�Ø˜A‘’ó ñ ð
 €Or   c            
       ó    • \ rS rSrSrSr\R                  \R                  \R                  S.r
\\" SSSSS	\S
9/-   rSS/r      SS jrSrg)Ú!cmd_domain_pwdsettings_pso_createi  a¬  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                 óH  • UR                  5       nUR                  U5      n[        U[        5       UUS9n [	        U5      nSU< S[        U5      < 3n UR                  U[        R                  S9n[        SU-  5      e! [
         a    [        S5      ef = f! [        R                   a,  nUR                  S   [        R                  :X  a   S nAO	e S nAff = f[        [        U R                   5      nUS:X  a  [        S5      eU[#        [        5      :  a"  U R%                  S	5        U R%                  S
5        UR                  UR'                  5       [        R                  / SQS9n[#        U5      S:X  d   e[	        US   S   S   5      nUc  [(        nUU-  (       a  SOSnUc  [*        nUU-  (       a  SOSnUc  [	        US   S   S   5      nU	c  [	        US   S   S   5      n	Uc  [-        US   S   S   5      nUc  [-        US   S   S   5      nU
c  [/        US   S   S   5      n
Uc  [	        US   S   S   5      nUc  [/        US   S   S   5      n[1        XTUU	S9  [3        U R4                  UUSXbUUU	XEU
UUS9n UR7                  U5        U R%                  SU-  5        [9        U R4                  UUSS9  g ! [        R                   aF  nUR                  u  nnU[        R:                  :X  a  [        S5      e[        SU< S U< 35      eS nAff = f)!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   ÚrunÚ%cmd_domain_pwdsettings_pso_create.run:  s  € ð ×#Ñ#Ó%ˆØ×(Ñ(¨Ó,ˆä˜!¬.Ó*:Ø"'¨Bñ0ˆð	@Ü˜Z›‰Jó  '¬°eÕ(<Ð=ˆð	DØ—,‘,˜v¬S¯^©^�,Ð<ˆCô Ð8¸7ÑBÓCÐCøô ó 	@Üð  ?ó @ð @ð	@ûô �|‰|ó 	Ø�v‰v�a‰yœC×2Ñ2Ó2Üàûð		úô +Ô+?ÀÇÁÓOˆØ˜1ÓÜð  5ó 6ð 6ð œ#Ô2Ó3Ó3Ø�L‰Lð 0ô 1à�L‰Lð Iô Jð �l‰l˜5Ÿ?™?Ó,´C·N±Nò"Rð ð Sˆô �3‹x˜1‹}Ðˆ}ô ˜˜A™˜Ñ/°Ñ2Ó3ˆ	ØÑÜ/ˆIØ!*¨Y×!6™¸EˆJàÑ"Ü7ˆIØ&/°)×&;™dÀˆOàÑ!Ü   Q¡Ð(:Ñ!;¸AÑ!>Ó?ˆNàÑ!Ü   Q¡¨Ñ!7¸Ñ!:Ó;ˆNàÑÜ+¨C°©F°;Ñ,?ÀÑ,BÓCˆKàÑÜ+¨C°©F°;Ñ,?ÀÑ,BÓCˆKà#Ñ+ä! # a¡&Ð):Ñ";¸AÑ">Ó?ð %ð %Ñ,Ü(+¨C°©FÐ3EÑ,FÀqÑ,IÓ(JÐ%à&Ñ.ä! # a¡&Ð)CÑ"DÀQÑ"GÓHð (ô 	¨+Ø-;Ø-;ò	=ô
 ˜TŸY™Y¨¨v¸dØ(2Ø-<Ø,:Ø,:Ø)4Ø.FØ/HØ1LñNˆð	LØ�I‰I�aŒLØ�L‰LÐ7¸&Ñ@ÔAä˜4Ÿ9™9 e¨VÀUÓKøÜ�|‰|ó 	LØŸ™‰JˆS�#Ø”c×8Ñ8Ó8Ü"ð $6ó 7ð 7õ #ÃfÚFIð$Kó Lð Lûð	LúsB   ·B ÁB ÂBÂCÂ/!CÃCÃCÊ;K ËL!ËALÌL!© )NNNNNNNNNNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úsynopsisrw   ÚSambaOptionsÚVersionOptionsÚCredentialsOptionsÚtakes_optiongroupsr¢   r   r   Útakes_optionsÚ
takes_argsr°   Ú__static_attributes__r²   r   r   r}   r}     s   † ñð" 8€Hð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐð )Ùˆt�WÐ#JØ 3¨Sñ	2ð,ñ €Mð ˜\Ð*€Jà;?Ø?CØ04ØEIØGKØ÷rLr   r}   c                   ó¬   • \ rS rSrSrSr\R                  \R                  \R                  S.r
\\" S\SS9\" SS	S
\SSS9/-   rS/r      SS jrSrg)Úcmd_domain_pwdsettings_pso_seti¯  z*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                 ó  • UR                  5       nUR                  U5      n[        U[        5       UUS9nSU< S[	        U5      < 3n[        UUU5        [        [        U R                  5      nUS:X  a  Uc  [        S5      eUc  UbS  UR                  U[        R                  SS/S9nUc  US   S   S   n[        U5      nUc  US   S   S   n[        U5      n[        XTUU	S	9  [        U R                   UUS
XcUUU	XEU
UUS9n UR#                  U5        U R%                  SU-  5        ['        U R                   UUS
S9  g ! [        R(                   a'  nUR*                  u  nn[        SU< SU< 35      eS nAff = f)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°   Ú"cmd_domain_pwdsettings_pso_set.runÃ  s±  € ð ×#Ñ#Ó%ˆØ×(Ñ(¨Ó,ˆä˜!¬.Ó*:Ø"'¨Bñ0‰ó  '¬°eÕ(<Ð=ˆÜ˜˜v wÔ/ô +Ô+?ÀÇÁÓOˆØ˜1Ó Ñ!3Üð  5ó 6ð 6ð Ñ" kÑ&=ð —,‘,˜v¬S¯^©^Ø&?Ø&?ð&Að ð BˆCð Ñ"Ø # A¡Ð'@Ñ AÀ!Ñ D�Ü/°Ó>�àÑ"Ø # A¡Ð'@Ñ AÀ!Ñ D�Ü/°Ó>�ä¨+Ø-;Ø-;ò	=ô
 ˜TŸY™Y¨¨v¸eØ(2Ø-<Ø,:Ø,:Ø)4Ø.FØ/HØ1LñNˆð	PØ�L‰L˜ŒOØ�L‰LÐ7¸&Ñ@ÔAä˜4Ÿ9™9 e¨VÀUÓKøÜ�|‰|ó 	PØŸ™‰JˆS�#ÝÃ&Ê#ÐNÓOÐOûð	Pús   Ä;E ÅE>Å"E9Å9E>r²   )NNNNNNNNNNNNNN)r³   r´   rµ   r¶   r·   r¸   rw   r¹   rº   r»   r¼   r¢   r   r   r   r½   r¾   r°   r¿   r²   r   r   rÁ   rÁ   ¯  s‹   † Ù4à*€Hð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐð )Ùˆ~ Cð?ñ	Añ 	ˆt�WÐ#JØ ¨Sñ	2ð	,ñ €Mð �€Jà@DØ?CØ04ØEIØGKØ÷<Pr   rÁ   c            	       ó�   • \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSSSS	\S
9/rS/r  SS jrSrg)Ú!cmd_domain_pwdsettings_pso_deletei  z)Deletes a Password Settings Object (PSO).rÂ   r~   r‚   rƒ   r„   r…   r†   r‡   rŠ   Nc                 óô   • UR                  5       nUR                  U5      n[        U[        5       XvS9nSU< S[	        U5      < 3n	[        X‰U5        UR                  U	5        U R                  SU-  5        g )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°   Ú%cmd_domain_pwdsettings_pso_delete.run  sm   € à×#Ñ#Ó%ˆØ×(Ñ(¨Ó,ˆä˜!¬.Ó*:Ø"'ñ0‰ó  '¬°eÕ(<Ð=ˆä˜ wÔ/à�‰�VÔØ�‰Ð%¨Ñ/Õ0r   r²   ©NNNN©r³   r´   rµ   r¶   r·   r¸   rw   r¹   rº   r»   r¼   r   r   r½   r¾   r°   r¿   r²   r   r   rÊ   rÊ     sb   † Ù3à*€Hð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	ˆt�WÐ#JØ 3¨Sñ	2ð€Mð �€Jà<@Ø÷1r   rÊ   c                 ó(   • [        U S   S   5      nU$ )Nr%   r   )r   )ÚaÚa_precedences     r   Úpso_keyrÔ   #  s   € Ü�qÐ:Ñ;¸AÑ>Ó?€LØÐr   c            	       ó†   • \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSSSS	\S
9/rSS jrSrg)Úcmd_domain_pwdsettings_pso_listi(  z+Lists all Password Settings Objects (PSOs).z%prog [options]r~   r‚   rƒ   r„   r…   r†   r‡   Nc                 ó  • UR                  5       nUR                  U5      n[        U[        5       XeS9nUR	                  [        U5      [        R                  SS/SS9n[        U5      S:X  d	  SUS   ;  a  U R                  R                  S5        g [        U[        S9n	U R                  R                  S	5        U R                  R                  S
5        U	 H/  n
U
S   nU R                  R                  U<S SU
S   < S35        M1     g )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°   Ú#cmd_domain_pwdsettings_pso_list.run8  sô   € Ø×#Ñ#Ó%ˆØ×(Ñ(¨Ó,ˆä˜!¬.Ó*:Ø"'ñ0ˆð �l‰lœ=¨Ó/´s×7HÑ7HØ"(Ð*KÐ!LØ&Kð ð Mˆô ˆs‹8�q‹=Ð=ÀSÈÁVÓKØ�I‰I�O‰Oð /ô 0àô ˜#¤7Ñ+ˆà�	‰	�‰Ð1Ô2Ø�	‰	�‰ÐNÔOãˆCØÐ>Ñ?ˆJØ�I‰I�O‰O¬j¸#¸f¼+ÐFÖGò r   r²   rÏ   )r³   r´   rµ   r¶   r·   r¸   rw   r¹   rº   r»   r¼   r   r   r½   r°   r¿   r²   r   r   rÖ   rÖ   (  sT   † Ù5à €Hð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	ˆt�WÐ#JØ 3¨Sñ	2ð€M÷
Hr   rÖ   c            	       ó�   • \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSSSS	\S
9/rS/r  SS jrSrg)Úcmd_domain_pwdsettings_pso_showiU  z-Display a Password Settings Object's details.rÂ   r~   r‚   rƒ   r„   r…   r†   r‡   rŠ   Nc                 óÖ   • UR                  5       nUR                  U5      n[        U[        5       XvS9nSU< S[	        U5      < 3n	[        X‰U5        [        U R                  X‰5        g )NrŒ   r‘   r’   )rŸ   r    r   r
   r   rH   rA   r9   rÍ   s
             r   r°   Ú#cmd_domain_pwdsettings_pso_show.runf  s]   € à×#Ñ#Ó%ˆØ×(Ñ(¨Ó,ˆä˜!¬.Ó*:Ø"'ñ0‰ó  '¬°eÕ(<Ð=ˆÜ˜ wÔ/Ü�t—y‘y %Õ0r   r²   rÏ   rÐ   r²   r   r   rß   rß   U  sb   † Ù7à*€Hð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	ˆt�WÐ#JØ 3¨Sñ	2ð€Mð �€Jà<@Ø÷
1r   rß   c            	       ó�   • \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSSSS	\S
9/rS/r  SS jrSrg)Ú$cmd_domain_pwdsettings_pso_show_useris  z4Displays the Password Settings that apply to a user.z%prog <username> [options]r~   r‚   rƒ   r„   r…   r†   r‡   rM   Nc                 ó˜   • UR                  5       nUR                  U5      n[        U[        5       XvS9n[	        U R
                  X�5        g )NrŒ   )rŸ   r    r   r
   rO   r9   )	r§   rM   r†   r�   r   r€   r�   r«   r   s	            r   r°   Ú(cmd_domain_pwdsettings_pso_show_user.run„  sD   € à×#Ñ#Ó%ˆØ×(Ñ(¨Ó,ˆä˜!¬.Ó*:Ø"'ñ0ˆô 	˜$Ÿ)™) UÕ5r   r²   rÏ   rÐ   r²   r   r   rã   rã   s  sb   † Ù>à+€Hð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	ˆt�WÐ#JØ 3¨Sñ	2ð€Mð �€Jà=AØ÷6r   rã   c            	       ó’   • \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSSSS	\S
9/rSS/r  SS jrSrg)Ú cmd_domain_pwdsettings_pso_applyi�  a…  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                 óN  • UR                  5       nUR                  U5      n[        U[        5       X‡S9n	SU< S[	        U	5      < 3n
[        XšU5        SU-  nU	R                  U	R                  5       [        R                  US9n[        U5      S:X  a  [        SU-  5      e[        US   R                  5      n[        R                  " 5       n[        R                  " Xš5      Ul        [        R                   " U[        R"                  S5      US'    U	R%                  U5        U R-                  S	U< SU< S35        g ! [        R&                   aO  nUR(                  u  nnU[        R*                  :X  a  [        S	U< S
U< S35      e[        SU< SU< 35      eS nAff = f)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°   Ú$cmd_domain_pwdsettings_pso_apply.run¨  s„  € à×#Ñ#Ó%ˆØ×(Ñ(¨Ó,ˆä˜!¬.Ó*:Ø"'ñ0‰ó  '¬°eÕ(<Ð=ˆä˜ wÔ/ð .°Ñ=ˆØ�l‰l˜5Ÿ?™?Ó,´C×4EÑ4EØ&3ð ð 5ˆô ˆs‹8�q‹=ÜÐOØ!.ñ /ó 0ð 0ô ˜˜A™Ÿ	™	“Nˆ	Ü�KŠK‹MˆÜ�vŠv�eÓ$ˆŒÜ!$×!3Ò!3°IÜ47×4DÑ4DØ4Gó"IˆÐ
Ñð
	LØ�L‰L˜ŒOð 	�Š³7»MÐJÕKøô �|‰|ó 	LØŸ™‰JˆS�#à”c×7Ñ7Ó7Ý"Û&-«}ð$>ó ?ð ?õ #ÃgÚFIð$Kó Lð Lûð	Lúó   ÄE ÅF$ÅA
FÆF$r²   rÏ   rÐ   r²   r   r   rç   rç   �  sk   † ñð @€Hð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	ˆt�WÐ#JØ 3¨Sñ	2ð€Mð ˜_Ð-€Jà;?Ø(,÷(Lr   rç   c            	       ó’   • \ rS rSrSrSr\R                  \R                  \R                  S.r
\" SSSSS	\S
9/rSS/r  SS jrSrg)Ú"cmd_domain_pwdsettings_pso_unapplyiÓ  z4Updates a PSO to no longer apply to a user or group.rè   r~   r‚   rƒ   r„   r…   r†   r‡   rŠ   ré   Nc                 óN  • UR                  5       nUR                  U5      n[        U[        5       X‡S9n	SU< S[	        U	5      < 3n
[        XšU5        SU-  nU	R                  U	R                  5       [        R                  US9n[        U5      S:X  a  [        SU-  5      e[        US   R                  5      n[        R                  " 5       n[        R                  " Xš5      Ul        [        R                   " U[        R"                  S5      US'    U	R%                  U5        U R-                  S	U< SU< S35        g ! [        R&                   aO  nUR(                  u  nnU[        R*                  :X  a  [        S	U< S
U< S35      e[        SU< SU< 35      eS nAff = f)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°   Ú&cmd_domain_pwdsettings_pso_unapply.runä  s‹  € à×#Ñ#Ó%ˆØ×(Ñ(¨Ó,ˆä˜!¬.Ó*:Ø"'ñ0‰ó  '¬°eÕ(<Ð=ˆä˜ wÔ/ð .°Ñ=ˆØ�l‰l˜5Ÿ?™?Ó,´C×4EÑ4EØ&3ð ð 5ˆô ˆs‹8�q‹=ÜÐOØ!.ñ /ó 0ð 0ô ˜˜A™Ÿ	™	“Nˆ	Ü�KŠK‹MˆÜ�vŠv�eÓ$ˆŒÜ!$×!3Ò!3°IÜ47×4GÑ4GØ4Gó"IˆÐ
Ñð
	LØ�L‰L˜ŒOð 	�Š»WÛ=JðLõ 	Møô �|‰|ó 	LØŸ™‰JˆS�#à”c×/Ñ/Ó/Ý"Û&-«}ð$>ó ?ð ?õ #ÃgÚFIð$Kó Lð Lûð	Lúrô   r²   rÏ   rÐ   r²   r   r   rö   rö   Ó  sf   † Ù>à?€Hð ×)Ñ)Ø×-Ñ-Ø×.Ñ.ñÐñ 	ˆt�WÐ#JØ 3¨Sñ	2ð€Mð ˜_Ð-€Jà;?Ø(,÷(Mr   rö   c                   ó¼   • \ rS rSrSr0 r\" 5       \S'   \" 5       \S'   \" 5       \S'   \	" 5       \S'   \
" 5       \S'   \" 5       \S'   \" 5       \S	'   \" 5       \S
'   Srg)Úcmd_domain_passwordsettings_psoi  z5Manage fine-grained Password Settings Objects (PSOs).Úapplyr]   rÌ   ÚlistÚsetÚshowz	show-userÚunapplyr²   N)r³   r´   rµ   r¶   r·   Úsubcommandsrç   r}   rÊ   rÖ   rÁ   rß   rã   rö   r¿   r²   r   r   rü   rü     sr   † Ù?à€KÙ;Ó=€K�ÑÙ=Ó?€K�ÑÙ=Ó?€K�ÑÙ9Ó;€K�ÑÙ7Ó9€K�ÑÙ9Ó;€K�ÑÙCÓE€K�ÑÙ?ÓA€K�	Ô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÷@å %÷4ñ 4ò
Mòòô/OòdNò"Hò@Dð EIØGKØ9=ØJNØ)-ô	AðH ?CØ8<ô.ñ, ˆ> °4¸°-Ø5ñ7á
Ð X¸¸e°}ðJñKñ ÐØ:ÀñFá
ÐØ:ÀñFá
ˆ?ð.Ø58ñ:ñ ˆ?ð.Ø58ñ:ñ Ð'¨cð-ñ/ñ Ð(¨sðKñMñ Ð*ð.à58ñ:ð/;Ð ò:ôRL¨ô RLôjPP Wô PPôf1¨ô 1òBô
*H gô *HôZ1 gô 1ô<6¨7ô 6ô8AL wô ALôH9M¨ô 9MôxB lõ Br   