
    bA                     ,   d Z dZddlZddlmZ ddlZddlmZmZmZm	Z	 ddl
Z
 G d dej                  Z G d d	e          Z G d
 dej                  Zd Zd Z G d dej                  Z G d de          Zd Z G d dej                  ZdS )z7Support for parsing Samba-related command-line options.restructuredText    N)copy)CredentialsAUTO_USE_KERBEROSDONT_USE_KERBEROSMUST_USE_KERBEROSc                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
SambaOptionsz+General Samba-related command line options.c           	         ddl m}  |             ddlm} t          j                            | |d           |                     dddt          dd	| j	        
           |                     dddt          dd| j
        
           |                     ddt          dd| j        
           |                     ddt          dd| j        
           d | _         |            | _        d | _        d S )Nr   )fault_setup)LoadParmzSamba Common Optionsz-sz--configfilecallbackFILEzConfiguration file)actiontypemetavarhelpr   z-dz--debuglevel
DEBUGLEVELdebug levelz--optionOPTIONz%set smb.conf option from command linez--realmREALMzset the realm name)sambar   samba.paramr   optparseOptionGroup__init__
add_optionstr_load_configfile_set_debuglevel_set_option
_set_realm_configfile_lprealm)selfparserr   r   s       ./usr/lib/python3/dist-packages/samba/getopt.pyr   zSambaOptions.__init__%   s+   %%%%%%((((((%%dF4JKKKnZ &7K!%!6 	 	8 	8 	8 	nZ ,]!%!5 	 	7 	7 	7 	
: (D!%!1 	 	3 	3 	3 		* '8L!% 	 	2 	2 	2  8::


    c                     | j         S )z?Return path to the smb.conf file specified on the command line.r#   r&   s    r(   get_loadparm_pathzSambaOptions.get_loadparm_path;   s    r)   c                     || _         d S Nr+   r&   optionopt_strargr'   s        r(   r   zSambaOptions._load_configfile?   s    r)   c                 T    | j                             d|           ||j        _        d S )Nr   )r$   setvalues
debuglevelr0   s        r(   r    zSambaOptions._set_debuglevelB   s(    ]C(((#&   r)   c                 J    | j                             d|           || _        d S )Nr%   )r$   r5   r%   r0   s        r(   r"   zSambaOptions._set_realmF   s#    Wc"""


r)   c                 2   |                     d          dk    rt          j        d          |                    d          }	 | j                            |d         |d                    d S # t          $ r}t          j        d|d|          d }~ww xY w)N=z&--option option takes a 'a=b' argumentr      zinvalid --option option value z: )findr   OptionValueErrorsplitr$   r5   	Exception)r&   r1   r2   r3   r'   aes          r(   r!   zSambaOptions._set_optionJ   s    88C==B+8: : :IIcNN	CHLL1qt$$$$$ 	C 	C 	C++:=##qqAC C C	Cs   'A- -
B7BBc                    | j          | j                            | j                    nZt          j        d          -| j                            t          j        d                     n| j                                         | j        S )z?Return loadparm object with data specified on the command line.NSMB_CONF_PATH)r#   r$   loadosgetenvload_defaultr,   s    r(   get_loadparmzSambaOptions.get_loadparmU   sq    'HMM$*++++Y''3HMM")O445555H!!###xr)   N)__name__
__module____qualname____doc__r   r-   r   r    r"   r!   rI    r)   r(   r
   r
   "   s        55  ,       ' ' '  	C 	C 	C    r)   r
   c                       e Zd ZdZd ZdS )Samba3Optionsz<General Samba-related command line options with an s3 param.c                 z    t                               | |           ddlm} |                                | _        d S )Nr   )param)r
   r   samba.samba3rR   get_contextr$   )r&   r'   s3params      r(   r   zSamba3Options.__init__c   sA    dF+++111111&&((r)   N)rJ   rK   rL   rM   r   rN   r)   r(   rP   rP   `   s)        FF) ) ) ) )r)   rP   c                       e Zd ZdZd Zd ZdS )VersionOptionsz/Command line option for printing Samba version.c                     t           j                            | |d           |                     ddd| j        d           d S )NzVersion Optionsz-Vz	--versionr   zDisplay version number)r   r   r   )r   r   r   r   _display_versionr&   r'   s     r(   r   zVersionOptions.__init__k   sR    %%dF4EFFFk*!%!65 	 	7 	7 	7 	7 	7r)   c                 ^    dd l }t          |j                   t          j        d           d S )Nr   )r   printversionsysexit)r&   r1   r2   r3   r'   r   s         r(   rY   zVersionOptions._display_versionq   s,    emr)   N)rJ   rK   rL   rM   r   rY   rN   r)   r(   rW   rW   i   s8        997 7 7    r)   rW   c                     |                                  dv rt          S |                                  dv rt          S |                                  dv rt          S t	          j        d|d|           )N)yestrue1)nofalse0)autoinvalid  option value: )lowerr   r   r   r   r>   r3   r2   s     r(   parse_kerberos_arg_legacyrl   w   sw    
yy{{***  	,	,	,  		 	   '')0##)7 8 8 	8r)   c                     |                                  dk    rt          S |                                  dk    rt          S |                                  dk    rt          S t	          j        d|d|           )Nrequireddesiredoffrh   ri   )rj   r   r   r   r   r>   rk   s     r(   parse_kerberos_argrq      su    
yy{{j    			!	!  			  '')0##)7 8 8 	8r)   c                   l    e Zd ZdZddZd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dZdS )CredentialsOptionsz0Command line options for specifying credentials.Nc           	         || _         |d|z  | _        nd| _        d| _        d | _        d| _        t
          j                            | || j                   |                     ddd| j	        t          d	           |                     d
dddt          | j                   |                     ddddt          d| j                   |                     ddddt          d| j                   |                     dddd| j                   |                     ddddt          d| j                   |                     dd dd!| j                   |                     d"d#dt          d$| j                   |                     d%d&dt          d'| j                   |                     d(d)d*dt          d+| j                   t)                      | _        d S ),NzCredentials Options (%s)zCredentials OptionsTFz--simple-bind-dnDNr   DN to use for a simple bindr   r   r   r   r   z
--passwordPASSWORDPasswordr   r   r   r   r   z-Uz
--usernameUSERNAMEUsernamer   r   r   r   r   z-Wz--workgroup	WORKGROUP	Workgroupz-Nz	--no-passzDon't ask for a password)r   r   r    z--ipaddress	IPADDRESSzIP address of serverz-Pz--machine-passz#Use stored machine account passwordz--use-kerberosdesired|required|offUse Kerberos authenticationz--use-krb5-ccache
KRB5CCNAMEzKerberos Credentials cachez-kz
--kerberosKERBEROSz%DEPRECATED: Migrate to --use-kerberos)special_namesectionask_for_password	ipaddressmachine_passr   r   r   _add_option_set_simple_bind_dnr   _set_password_parse_username_parse_workgroup_set_no_password_set_ipaddress_set_machine_pass_set_kerberos_set_krb5_ccache_set_kerberos_legacyr   creds)r&   r'   r   s      r(   r   zCredentialsOptions.__init__   sa   (#5DDLL0DL $!%%dFDLAAA+T*"&":; 	 	= 	= 	= 	z*(sT=O 	 	Q 	Q 	Q|Z *(43G 	 	I 	I 	I 	}k *)D4I 	 	K 	K 	K 	{:8"&"7 	 	9 	9 	9 	]K *4"&"5 	 	7 	7 	7 	/ *C"&"8 	 	: 	: 	: 	)3I *;dFX 	 	Z 	Z 	Z 	,l *:"&"7 	 	9 	9 	9 	|Z *EPTPi 	 	k 	k 	k !]]


r)   passwordc                    ddl }	 ddl}nS# t          $ rF d|z  }t          j                            |           t          j                                         Y dS w xY wd|d|d}|                    |          }|                                }	|	                    |	          sDd|z  }t          j                            |           t          j                                         dS d	}
|d
|}|
                    |d|	          }||k    r|d
|
}n|d|
}|
                    |d|z   dz   |	          }|                    |           dS )zC Make sure no sensitive data (e.g. password) resides in proctitle. r   Nz^WARNING: Using %s on command line is insecure. Please install the setproctitle python module.
Fz	(.*[ ]+)(z[= ]z	)([ ]*.*)z;Unable to hide %s in proctitle. This is most likely a bug!
xxxr:   z\2 z\1z\3)resetproctitleModuleNotFoundErrorr^   stderrwriteflushcompilegetproctitlematchsub)r&   r2   secret_data	data_typer   r   msgpass_opt_re_strpass_opt_recur_proctitlesecret_data_replaceropt_pass_with_eqopt_pass_partreplace_strnew_proctitles                  r(   _ensure_secure_proctitlez+CredentialsOptions._ensure_secure_proctitle   s   				" 	 	 	G C JS!!!J55	   ;B'';;;Ojj11$1133  // 	!*+CJS!!!J5$
 '.gg{{;}EE,,,%,WW.B.BCKK%,WW.B.BCK!K/%7)+ + 	!!-00000s    AAAc                     | j          | j        |i |S d}|D ]:}|                    d          s||                    dd| j         z            fz  }; | j        |i | d S )NrN   z--z--%s-)r   r   
startswithreplace)r&   args1kwargsargs2rA   s        r(   r   zCredentialsOptions._add_option   s    $"4?E4V444 	E 	EA<<%% aiig0A&ABBDDEE)&)))))r)   c                 H    | j                             |           d| _        d S NF)r   parse_stringr   r0   s        r(   r   z"CredentialsOptions._parse_username   s&    
$$$!r)   c                 :    | j                             |           d S r/   )r   
set_domainr0   s        r(   r   z#CredentialsOptions._parse_workgroup   s    
c"""""r)   c                     |                      ||d           | j                            |           d| _        d| _        d S )Nr   F)r   r   set_passwordr   r   r0   s        r(   r   z CredentialsOptions._set_password  sF    %%gsJ???
$$$ %!r)   c                     d| _         d S r   )r   r0   s        r(   r   z#CredentialsOptions._set_no_password  s     %r)   c                     d| _         d S )NT)r   r0   s        r(   r   z$CredentialsOptions._set_machine_pass  s     r)   c                     || _         d S r/   )r   r0   s        r(   r   z!CredentialsOptions._set_ipaddress  s    r)   c                 t    t          d           | j                            t          ||                     d S )Nz0WARNING: The option -k|--kerberos is deprecated!)r\   r   set_kerberos_staterl   r0   s        r(   r   z'CredentialsOptions._set_kerberos_legacy  s8    @AAA
%%&?W&M&MNNNNNr)   c                 V    | j                             t          ||                     d S r/   )r   r   rq   r0   s        r(   r   z CredentialsOptions._set_kerberos  s)    
%%&8g&F&FGGGGGr)   c                 :    | j                             |           d S r/   )r   set_bind_dnr0   s        r(   r   z&CredentialsOptions._set_simple_bind_dn  s    
s#####r)   c                 x    | j                             t                     | j                             |           d S r/   )r   r   r   set_named_ccacher0   s        r(   r   z#CredentialsOptions._set_krb5_ccache  s5    
%%&7888
##C(((((r)   Fc                 V   | j                             |           | j        r| j                             |           n | j        r| j                                          |rE| j                                         s,	 | j                             |           n# t          $ r Y nw xY w| j         S )zObtain the credentials set on the command-line.

        :param lp: Loadparm object to use.
        :return: Credentials object
        )r   guessr   set_machine_accountr   set_cmdline_callbacksauthentication_requestedr@   )r&   lpfallback_machines      r(   get_credentialsz"CredentialsOptions.get_credentials  s     	
 	/J**2...." 	/J,,...  	DJ$G$G$I$I 	
..r2222    zs   9B 
B! B!r/   )r   )F)rJ   rK   rL   rM   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rN   r)   r(   rs   rs      s       ::-# -# -# -#^-1 -1 -1 -1^	* 	* 	*" " "# # #" " "& & &! ! !  O O OH H H$ $ $) ) )     r)   rs   c                   D    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
dd
ZdS )CredentialsOptionsDoublez?Command line options for specifying credentials of two servers.c                 \   t                               | |           d| _        |                     ddd| j        t
          d           |                     dddd	t
          | j        
           |                     dddt
          d| j                   |                     dddt
          d| j                   |                     ddd           |                     dddt
          d| j	                   |                     dddt
          d| j
                   t                      | _        d S )NTz--simple-bind-dn2DN2r   rv   rw   z--password2	PASSWORD2ry   rz   z--username2	USERNAME2zUsername for second serverr}   z--workgroup2
WORKGROUP2zWorkgroup for second serverz
--no-pass2
store_truez.Don't ask for a password for the second server)r   r   z--use-kerberos2r   r   z--kerberos2	KERBEROS2zUse Kerberos)rs   r   no_pass2r   _set_simple_bind_dn2r   _set_password2_parse_username2_parse_workgroup2_set_kerberos2_set_kerberos2_legacyr   creds2rZ   s     r(   r   z!CredentialsOptionsDouble.__init__9  sr   ##D&111+U:!%!:: 	 	< 	< 	< 	{:'c!%!4 	 	6 	6 	6 	{)9!%!6 	 	8 	8 	8 	):!%!7 	 	9 	9 	9 	\M 	 	O 	O 	O)3I):TEX 	 	Z 	Z 	Z
 	{)+d6P 	 	R 	R 	R "mmr)   c                 :    | j                             |           d S r/   )r   r   r0   s        r(   r   z)CredentialsOptionsDouble._parse_username2V  s      %%%%%r)   c                 :    | j                             |           d S r/   )r   r   r0   s        r(   r   z*CredentialsOptionsDouble._parse_workgroup2Y  s    s#####r)   c                 H    | j                             |           d| _        d S r   )r   r   r   r0   s        r(   r   z'CredentialsOptionsDouble._set_password2\  s#      %%%r)   c                 V    | j                             t          ||                     d S r/   r   r   rq   r0   s        r(   r   z.CredentialsOptionsDouble._set_kerberos2_legacy`  )    &&'9#w'G'GHHHHHr)   c                 V    | j                             t          ||                     d S r/   r   r0   s        r(   r   z'CredentialsOptionsDouble._set_kerberos2c  r   r)   c                 :    | j                             |           d S r/   )r   r   r0   s        r(   r   z-CredentialsOptionsDouble._set_simple_bind_dn2f  s    $$$$$r)   Tc                     |r| j                             |           n2| j                                         s| j                                          | j        r| j                                          | j         S )zObtain the credentials set on the command-line.

        :param lp: Loadparm object to use.
        :param guess: Try guess Credentials from environment
        :return: Credentials object
        )r   r   get_usernameset_anonymousr   r   )r&   r   r   s      r(   get_credentials2z)CredentialsOptionsDouble.get_credentials2i  su      	(Kb!!!!))++ 	(K%%'''= 	0K--///{r)   N)T)rJ   rK   rL   rM   r   r   r   r   r   r   r   r   rN   r)   r(   r   r   6  s        II$ $ $:& & &$ $ $  I I II I I% % %     r)   r   c                    ddddd}|                     dd          }d}|r|dd                                         s|dd         d	k    rA||d         z  }|dd          }|r|dd                                         3|dd         d	k    A	 t          |          }n7# t          $ r* d
                    |          }t          j        |          w xY w|                                                     dd          }	 |||         z  S # t          $ r/}	d                    ||          }t          j        |          d }	~	ww xY w)Nr<   i   i   i   @)BKBMBGBr   r   r   .zA{0} option requires a numeric value, with an optional unit suffixIz3{0} invalid suffix '{1}', should be B, Kb, Mb or Gb)	r   isdigitfloat
ValueErrorformatr   r>   upperKeyError)
r1   optvaluemultipliersvdigitsmr   suffixks
             r(   check_bytesr  }  s    %	' 'K 	c2A F
 !A#   AacFcMM!A$abbE  !A#   AacFcMM-&MM - - -./5vc{{ 	',,,- WWYYsB''F-;v&&& - - -+,2F3NN 	',,,-s$   B 4C>
D	 	
E*D==Ec                   `    e Zd Zej        j        dz   Z eej        j                  Zeed<   dS )SambaOption)bytesr  N)	rJ   rK   rL   r   OptionTYPESr   TYPE_CHECKERr  rN   r)   r(   r  r    s=        O!J.E4455L'Lr)   r  )rM   __docformat__r   r   rF   samba.credentialsr   r   r   r   r^   r   r
   rP   rW   rl   rq   rs   r   r  r  r  rN   r)   r(   <module>r     s  $ > ="        				            


; ; ; ; ;8' ; ; ;|) ) ) ) )L ) ) )    X)   	8 	8 	8	8 	8 	8d d d d d- d d dNA A A A A1 A A AN!- !- !-F( ( ( ( ((/ ( ( ( ( (r)   