
    b#                         d dl Zd dlmZ d dlmZ d dlmZ 	 d dlm	Z	 d dl
mZ n# e$ r Y nw xY wd dlmZ d Zd	 Zd
 Z G d de          Z G d de          ZdS )    N)
gp_inf_ext)system_session)
get_string)LdbError)SamDB)logc                 ,    dt          |           dz  z  S )N%d<   intvals    5/usr/lib/python3/dist-packages/samba/gp/gp_sec_ext.pymins_to_hoursr          3s88b=!!    c                 ,    dt          |           dz  z  S )Nr
      r   r   s    r   days_to_hoursr       r   r   c                 h    d}d}d}d}t          |           } t          | |z  |z  |z  |z             S )Nr   r   i )r   str)r   secondsminuteshourssam_adds        r   days2rel_nttimer   #   sE    GGEG
c((Cw(507:;<<<r   c                   8    e Zd ZddddZd Zd Zd Zd Zd	 Zd
S )
gp_krb_extkdc:user_ticket_lifetimekdc:service_ticket_lifetimekdc:renewal_lifetime)MaxTicketAgeMaxServiceAgeMaxRenewAgec           	         | j                             d          dk    rd S d}|D ]\  }}| j                            |           |                                D ]}|t          |           k    rj||                                         D ]O\  }}|                     ||           | j                            ||           | j        	                                 P|D ]}	|	j
        r| j                            |	j                   t          j                            |	j
        |          }
|                     |
          }|sg|                                D ]}|t          |           k    r|                    |          D ]v\  }}t"          j        |         }|                                                     |          }|                     | ||                     | j        	                                 wd S Nserver role"active directory domain controller0MACHINE/Microsoft/Windows NT/SecEdit/GptTmpl.inf)lpgetgp_dbset_guidkeysr   itemsset_kdc_tdbdeletecommitfile_sys_pathnameospathjoinparsesectionsr   	apply_mapmapper)selfdeleted_gpo_listchanged_gpo_listinf_fileguidsettingssectionattvaluegpor7   inf_confkey
value_funcs                 r   process_group_policyzgp_krb_ext.process_group_policy/   s   7;;}%%)MMMFE. 	, 	,ND(J%%%#==?? , ,c$ii''&.w&7&=&=&?&? , ,
U((e444
))'3777
))++++, $ 	0 	0C  0
##CH---w||C$5x@@::d++ '0022 0 0G#d))++*2..*A*A 0 0JC","6s";C)-):):3)?)?J ,,S**U2C2CDDD J--////	0 	0r   c                    | j         j                            |          }t          j        |d|d|           |i| j         j                            |t          |                     | j                             t          |           ||rt          |          nd            d S | j         j                            |           | j                             t          |           |           d S )Nz was changed from  to )	r-   gpostorer,   r   infostorer   r   r2   r=   	attributer   old_vals       r   r1   zgp_krb_ext.set_kdc_tdbK   s    *%)))44999gggssKLLL?J%%iCAAAJSYY	4):g3F3F3F$(* * * * * J&&y111Jc$ii33333r   c                 $    d t           t          dS )Nc                     | S N r   s    r   <lambda>z#gp_krb_ext.mapper.<locals>.<lambda>W   s     r   )r    r!   r"   )r   r   r=   s    r   r<   zgp_krb_ext.mapperV   s    ,;O/<(5  	r   c                     dS )NzKerberos PolicyrV   rX   s    r   __str__zgp_krb_ext.__str__\   s      r   c                    i }| j                             d          dk    r|S d}|j        rt          j                            |j        |          }|                     |          }|s|S t          |           |                                v r1t          |           }d |	                    |          D             ||<   |S )Nr(   r)   r*   c                 X    i | ]'\  }}t           j                            |          $||(S rV   )r   r;   r,   .0kvs      r   
<dictcomp>z#gp_krb_ext.rsop.<locals>.<dictcomp>k   sJ     #F #F #FDAq)3)=)A)A!)D)D#F1a #F #F #Fr   
r+   r,   r4   r6   r7   r8   r9   r   r:   r0   r=   rF   outputr@   r7   rG   rC   s          r   rsopzgp_krb_ext.rsop_   s    7;;}%%)MMMME 	F7<< 18<<Dzz$''H 4yyH--////d))#F #FHNN74K4K #F #F #Fwr   N)	__name__
__module____qualname__r;   rJ   r1   r<   rZ   re   rV   r   r   r   r   +   st        #=#@#9< <I0 0 08	4 	4 	4  ! ! !    r   r   c                   V    e Zd ZdZd ZdddddZd Zd	 Zd
 Zd Z	d Z
d Zd Zd ZdS )gp_access_extzThis class takes the .inf file parameter (essentially a GPO file mapped
    to a GUID), hashmaps it to the Samba parameter, which then uses an ldb
    object to update the parameter to Samba4. Not registry oriented whatsoever.
    c                     	 t          | j                                        t                      | j        | j                  | _        d S # t          t          f$ r t          d          w xY w)N)session_infocredentialsr+   z/Failed to load SamDB for assigning Group Policy)	r   r+   	samdb_urlr   credsldb	NameErrorr   	ExceptionrX   s    r   load_ldbzgp_access_ext.load_ldbv   sz    	OTW..00*8*:*:)- $) ) )DHHH 8$ 	O 	O 	OMNNN	Os   AA	 	!A*	minPwdAge	maxPwdAgeminPwdLengthpwdProperties)MinimumPasswordAgeMaximumPasswordAgeMinimumPasswordLengthPasswordComplexityc           	      R   | j                             d          dk    rd S |                                  d}|D ]\  }}| j                            |           |                                D ]}|t          |           k    r||                                         D ]o\  }}|                                                     |          \  }	}
 |	||           | j        	                    ||           | j        
                                 p|D ]}|j        r| j                            |j                   t          j                            |j        |          }|                     |          }|sg|                                D ]}|t          |           k    r|                    |          D ]o\  }}t$          j        |         }|                                                     |          \  }	} |	| ||                     | j        
                                 pd S r'   )r+   r,   rs   r-   r.   r/   r   r0   r<   r2   r3   r4   r5   r6   r7   r8   r9   r:   rj   r;   )r=   r>   r?   r@   rA   rB   rC   rD   rE   update_samba_rF   r7   rG   rH   rI   s                   r   rJ   z"gp_access_ext.process_group_policy   s-   7;;}%%)MMMFE. 	, 	,ND(J%%%#==?? , ,c$ii''&.w&7&=&=&?&? , ,
U*.++--*;*;C*@*@a$S%000
))'3777
))++++, $ 	0 	0C  0
##CH---w||C$5x@@::d++ '0022 0 0G#d))++*2..*A*A 0 0JC"/"9#">C9=9J9J39O9O6\:(Ljj.?.?@@@ J--////	0 	0r   c                    | j                                         }t          j        d|d|           | j                            t          |           |t          |                     | j                             |           d S )Nz*KDC Minimum Password age was changed from rL   )rp   get_minPwdAger   rN   r-   rO   r   set_minPwdAgerP   s       r   ch_minPwdAgezgp_access_ext.ch_minPwdAge   }    (((**GGSS" 	# 	# 	#
TIs7||<<<s#####r   c                    | j                                         }t          j        d|d|           | j                            t          |           |t          |                     | j                             |           d S )Nz*KDC Maximum Password age was changed from rL   )rp   get_maxPwdAger   rN   r-   rO   r   set_maxPwdAgerP   s       r   ch_maxPwdAgezgp_access_ext.ch_maxPwdAge   r   r   c                    | j                                         }t          j        d|d|           | j                            t          |           |t          |                     | j                             |           d S )Nz-KDC Minimum Password length was changed from rL   )rp   get_minPwdLengthr   rN   r-   rO   r   set_minPwdLengthrP   s       r   ch_minPwdLengthzgp_access_ext.ch_minPwdLength   s}    (++--GGSS" 	# 	# 	#
TIs7||<<<!!#&&&&&r   c                    | j                                         }t          j        d|d|           | j                            t          |           |t          |                     | j                             |           d S )Nz*KDC Password Properties were changed from rL   )rp   get_pwdPropertiesr   rN   r-   rO   r   set_pwdPropertiesrP   s       r   ch_pwdPropertieszgp_access_ext.ch_pwdProperties   s}    (,,..WWcc# 	$ 	$ 	$
TIs7||<<<""3'''''r   c                 `    | j         t          f| j        t          f| j        d f| j        d fdS )zldap value : samba setterc                     | S rU   rV   r   s    r   rW   z&gp_access_ext.mapper.<locals>.<lambda>   s    3 r   c                     | S rU   rV   r   s    r   rW   z&gp_access_ext.mapper.<locals>.<lambda>   s    S r   )rt   ru   rv   rw   )r   r   r   r   r   rX   s    r   r<   zgp_access_ext.mapper   sC    "/A"/A "&!5 G"&"7!I  	r   c                     dS )NzSystem AccessrV   rX   s    r   rZ   zgp_access_ext.__str__   s    r   c                    i }| j                             d          dk    r|S d}|j        rt          j                            |j        |          }|                     |          }|s|S t          |           |                                v r1t          |           }d |	                    |          D             ||<   |S )Nr(   r)   r*   c                 X    i | ]'\  }}t           j                            |          $||(S rV   )rj   r;   r,   r]   s      r   ra   z&gp_access_ext.rsop.<locals>.<dictcomp>   sJ     #I #I #IDAq)6)@)D)DQ)G)G#I1a #I #I #Ir   rb   rc   s          r   re   zgp_access_ext.rsop   s    7;;}%%)MMMME 	I7<< 18<<Dzz$''H 4yyH--////d))#I #IHNN74K4K #I #I #Iwr   N)rf   rg   rh   __doc__rs   r;   rJ   r   r   r   r   r<   rZ   re   rV   r   r   rj   rj   p   s         
O O O -8,7,:,;> >I0 0 0<$ $ $$ $ $' ' '( ( (	 	 	      r   rj   )os.pathr6   samba.gp.gpclassr   
samba.authr   samba.commonr   rp   r   samba.samdbr   ImportErrorsamba.gp.util.loggingr   r   r   r   r   rj   rV   r   r   <module>r      sB  $  ' ' ' ' ' ' % % % % % % # # # # # #	!!!!!!! 	 	 	D	 % % % % % %" " "" " "= = =B B B B B B B BJi i i i iJ i i i i is   % --