
    b@                         d Z ddlZddlZddlZddlZddlmZmZ ddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ dZdZ G d de          ZdS )zTests process restarting in the pre-fork process model.
   NOTE: As this test kills samba processes it won't play nicely with other
         tests, so needs to be run in it's own environment.
    N)TestCasedelete_force)echonetlogon)	Messaging)SamDB)CredentialsDONT_USE_KERBEROS)
get_string)UF_WORKSTATION_TRUST_ACCOUNTUF_PASSWD_NOTREQD)SEC_CHAN_WKSTA)system_session   PFRSc                        e Zd Z fdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )PreforkProcessRestartTestsc                     t          t          |                                            |                                 }t	          |          | _        d S )N)lp_ctx)superr   setUpget_loadparmr   msg_ctx)selfr   	__class__s     =/usr/lib/python3/dist-packages/samba/tests/prefork_restart.pyr   z PreforkProcessRestartTests.setUp/   sG    ($//55777""$$ ///    c                 V    t          t          |                                            d S N)r   r   tearDown)r   r   s    r   r    z#PreforkProcessRestartTests.tearDown4   s&    ($//88:::::r   c                     | j                                         }g }|D ]-}|j        D ]#}|                    |j        |j        f           $.|S r   )r   irpc_all_serversidsappendnamepid)r   services	processesserviceids        r   get_process_dataz+PreforkProcessRestartTests.get_process_data7   se    <0022	 	9 	9Gk 9 9  ',!788889r   c                 R    |                                  }|D ]\  }}||k    r|c S d S r   )r+   )r   r%   r(   pnamer&   s        r   get_processz&PreforkProcessRestartTests.get_process@   sB    ))++	# 	 	JE3u}}


 tr   c                     g }t          |          D ][}d                    ||          }|                    |                     |                     |                     ||                    \|S )Nprefork-worker-{0}-{1})rangeformatr$   r.   assertIsNotNone)r   r%   workerspidsxprocess_names         r   get_worker_pidsz*PreforkProcessRestartTests.get_worker_pidsG   sq    w 	* 	*A3::4CCLKK((66777  a))))r   c                     t          |          }t          |          D ]7}d                    ||          }|                     |||         ddd           8d S )Nr0   r         )lenr1   r2   wait_for_process)r   r%   r4   num_workersr6   r7   s         r   wait_for_workersz+PreforkProcessRestartTests.wait_for_workersO   sj    'll{## 	F 	FA3::4CCL!!,
Aq"EEEE	F 	Fr   c                    t          j        |           |}||k     r>|                     |          }|||k    rd S t          j        |           ||z  }||k     >|                     d                    ||                     d S )Nz6Times out after {0} seconds waiting for {1} to restart)timesleepr.   failr2   )r   r%   r&   initial_delaywaittimeoutdelayps           r   r=   z+PreforkProcessRestartTests.wait_for_processU   s    
=!!!goo  &&A}cJtTME goo 			J&%%	' 	' 	' 	' 	'r   c           	      @   |                                  }i }|D ]\  }}|                    d          s*|                    d          s|                    d          r@||v r<|||         k    r0|                     d                    ||||                              d S )Nzprefork-_serversrvz+Duplicate process for {0}, pids {1} and {2})r+   
startswithendswithrC   r2   )r   r(   process_mapr%   rH   s        r   check_for_duplicate_processesz8PreforkProcessRestartTests.check_for_duplicate_processesb   s    --//IK$ 	D 	DaOOJ// DMM),,DMM%((D {**D 111 II M &tQD0A B BD D D	D 	Dr   c                 J   |                      |                                           }|                    |                                d|                                           t          dt          j        d         z  |                                 |          | _	        d S )N)template\z
ldaps://%sSERVER)urllpcredentials)
insta_credsget_credentialsset_bind_dn
get_domainget_usernamer   osenvironr   samdb)r   credss     r   simple_bindz&PreforkProcessRestartTests.simple_bindp   s      $*>*>*@*@ AAe&6&6&8&8&8&8&+&8&8&:&:&:< 	= 	= 	= |bj.BB"//11',. . .


r   c                     t          j        d|                                           }|                     g d|                    g d                     d S )Nzncalrpc:)r:         )r   rpcechor   assertEqualEchoData)r   conns     r   rpc_echoz#PreforkProcessRestartTests.rpc_echoy   sO    |J(9(9(;(;<<DMM)))$<$<=====r   c           	         t           j        d         }t           j        d         }|                                 }|                                 }t	                      }t          d|z  |||          }t          j        dd          }t          }d|d|	                                }	t          ||	           dt          |          z                      d	          }
|                    |	d
d|z  t          t          t           z            |
d           t#                      }|                    |           |                    t(                     |                    t,                     |                    |           |                    |dz              |                    |           t5          j        d|z  ||           t          ||	           d S )NrS   	SERVER_IPz	ldap://%s)rT   session_inforV   rU       zcn=,z"%s"z	utf-16-lecomputerz%s$)dnobjectclasssAMAccountNameuserAccountControl
unicodePwd$zncacn_ip_tcp:%s[schannel,seal])r\   r]   r   rX   r   r   sambagenerate_random_passwordMACHINE_NAME	domain_dnr   r   encodeaddstrr   r   r	   guessset_secure_channel_typer   set_kerberos_stater
   set_passwordset_usernameset_workstationr   )r   serverhostrU   rV   sessionldbmachine_passmachine_name
machine_dnutf16pwmachine_credss               r   r   z#PreforkProcessRestartTests.netlogon}   s   H%z+&  **,, ""d*!( +   5b"==##/<<A
S*%%%J|444<<[II%#l203DDEE!# # 	$ 	$ 	$ $B--n===(():;;;""<000""<##5666%%l333,v5	 	 	
 	S*%%%%%r   c                    |                                   |                     d          }|                     |           |                     dt                    }t          j        |t          j                   | 	                    d|ddd           | 
                    d|           |                     d          }|                     |           |                     ||           |                     dt                    }t          t                    D ]$}|                     ||         ||                    %|                                  |                                   d S )Nprefork-master-ldapldapr:   r;   )r`   r.   r3   r8   NUM_WORKERSr\   killsignalSIGTERMr=   r?   assertNotEqualsr1   rO   r   r&   r4   new_pidnew_workersr6   s         r   test_ldap_master_restartz3PreforkProcessRestartTests.test_ldap_master_restart   sa    455S!!! &&v{;; 	V^$$$ 	3S!QCCC 	fg... ""#899W%%% 	S'*** **6;??{## 	= 	=A  [^<<<< 	**,,, 	r   c                 J   |                                   |                     d          }|                     |           |                     dt                    }t          j        |d         t          j                   | 	                    d|ddd           |                     d          }|                     |           | 
                    ||           |                     dt                    }|                     |d         |d                    | 
                    |d         |d                    | 
                    |d         |d                    | 
                    |d         |d                    |                                  |                                   d S )	Nr   r   r   zprefork-worker-ldap-0r:   r;   rb   rc   )r`   r.   r3   r8   r   r\   r   r   r   r=   re   r   rO   r   r&   r4   r   r   s        r   test_ldap_worker_restartz3PreforkProcessRestartTests.test_ldap_worker_restart   s    455S!!! &&v{;; 	
FN+++ 	5sAq"EEE ""#899W%%% 	g&&& **6;??WQZQ888[^444[^444[^444 	**,,, 	r   c                    |                                   |                     d          }|                     |           |                     dt                    }|D ]!}t          j        |t          j                   "| 	                    d|           |                     d          }|                     |           | 
                    ||           |                     dt                    }t          t                    D ]$}|                     ||         ||                    %|                                  |                                   d S )Nr   r   )r`   r.   r3   r8   r   r\   r   r   r   r?   re   r1   r   rO   r   r&   r4   r6   r   r   s         r   test_ldap_all_workers_restartz8PreforkProcessRestartTests.test_ldap_all_workers_restart   sT    455S!!! &&v{;;  	' 	'AGAv~&&&& 	fg... ""#899W%%% 	g&&& **6;??{## 	= 	=A  [^<<<< 	**,,, 	r   c                    |                                   |                     d          }|                     |           |                     dt                    }t          j        |t          j                   | 	                    d|ddd           | 
                    d|           |                     d          }|                     |           |                     ||           |                     dt                    }t          t                    D ]$}|                     ||         ||                    %|                                  |                                   d S )Nprefork-master-rpcrpcr:   r;   )rh   r.   r3   r8   r   r\   r   r   r   r=   r?   r   r1   rO   r   s         r   test_rpc_master_restartz2PreforkProcessRestartTests.test_rpc_master_restart  sU    344S!!! &&uk:: 	V^$$$ 	2CArBBB 	eW--- ""#788W%%% 	S'*** **5+>>{## 	= 	=A  [^<<<< 	**,,, 	r   c                    |                                   |                                  |                     d          }|                     |           |                     dt
                    }t          j        |d         t          j	                   | 
                    d|d         ddd           |                     d          }|                     |           |                     ||           |                     dt
                    }|                     |d         |d                    |                     |d         |d                    |                     |d         |d                    |                     |d         |d                    |                                  |                                   |                                  d S )	Nr   r   r   zprefork-worker-rpc-0r:   r;   rb   rc   )rh   r   r.   r3   r8   r   r\   r   r   r   r=   re   r   rO   r   s        r   test_rpc_worker_zero_restartz7PreforkProcessRestartTests.test_rpc_worker_zero_restartB  s    344S!!! &&uk:: 	
FN+++ 	4gaj!QKKK ""#788W%%% 	g&&& **5+>>WQZQ888[^444[^444[^444 	**,,, 	r   c                 Z   |                                   |                                  |                     d          }|                     |           |                     dt
                    }|D ]!}t          j        |t          j	                   "t          t
                    D ]4}|                     d                    |          ||         ddd           5|                     d          }|                     |           |                     ||           |                     dt
                    }t          t
                    D ]$}|                     ||         ||                    %|                                  |                                   |                                  d S )Nr   r   zprefork-worker-rpc-{0}r   r:   r;   )rh   r   r.   r3   r8   r   r\   r   r   r   r1   r=   r2   re   r   rO   r   s         r   test_rpc_all_workers_restartz7PreforkProcessRestartTests.test_rpc_all_workers_restartj  s    344S!!! &&uk::  	' 	'AGAv~&&&& {## 	J 	JA!!(//22GAJ1bJ J J J ""#788W%%% 	g&&& **5+>>{## 	= 	=A  [^<<<< 	**,,, 	r   c                    |                      d          }|                     |           d}dD ]}|                     dt                    }|                      d          }t	          j        |t          j                   t          j                    }| 	                    d|ddd           | 
                    d|           t          j                    }||z
  }|                     |||z              |                     ||           |                     dt                    }	t          t                    D ]$}
|                     ||
         |	|
                    %|                                  d S )	Nzprefork-master-echo   r   r   
   r   kdcr   r:   r;   r   )r.   r3   r8   r   r\   r   r   r   rA   r=   r?   
assertLessassertGreaterEqualr1   r   rO   )r   r&   backoff_incrementexpectedr4   processstartenddurationr   r6   s              r   test_master_restart_backoffz6PreforkProcessRestartTests.test_master_restart_backoff  sp    455S!!! & 	8 	8H**5+>>G&&'<==GGGV^,,,IKKE!!"7!QKKK!!&'222)++CU{H
 OOHh1B&BCCC##Hh7777 **6;??{## 	= 	=A  [^<<<< 	**,,,,,r   c                    d}dD ]}|                      d          }|                     |           t          j        |t          j                   t          j                    }|                     d|ddd           t          j                    }||z
  }|                     |||z              | 	                    ||           | 
                                 d S )Nr   r   zprefork-worker-echo-2r   r:   r;   )r.   r3   r\   r   r   r   rA   r=   r   r   rO   )r   r   r   r   r   r   r   s          r   test_worker_restart_backoffz6PreforkProcessRestartTests.test_worker_restart_backoff  s     & 	8 	8H&&'>??G  )))GGV^,,,IKKE!!"97Aq"MMM)++CU{H
 OOHh1B&BCCC##Hh7777**,,,,,r   )__name__
__module____qualname__r   r    r+   r.   r8   r?   r=   rO   r`   rh   r   r   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   -   s^       0 0 0 0 0
; ; ; ; ;      F F F' ' 'D D D. . .> > >(& (& (&T% % %N$ $ $T" " "H$ $ $L& & &P& & &P&- &- &-P- - - - - - -r   r   )__doc__r\   r   rA   ru   samba.testsr   r   samba.dcerpcr   r   samba.messagingr   samba.samdbr   samba.credentialsr	   r
   samba.commonr   
samba.dsdbr   r   samba.dcerpc.miscr   
samba.authr   r   rw   r    r   r   <module>r      sI  $  
			    . . . . . . . . ' ' ' ' ' ' ' ' % % % % % %       < < < < < < < < # # # # # #        - , , , , , % % % % % %d- d- d- d- d- d- d- d- d- d-r   