
    d=                     R   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
ddlmZ ej                  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j0                        Zy)z7Support for parsing Samba-related command-line options.restructuredText    N)copy)CredentialsAUTO_USE_KERBEROSDONT_USE_KERBEROSMUST_USE_KERBEROS)get_burnt_commandlinec                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
SambaOptionsz+General Samba-related command line options.c           	         ddl m}  |        t        t        j                        }|	 dd l}|j                  |       ddl
m} t        j                  j                  | |d       | j                  dddt         d	d
| j"                         | j                  dddt         dd| j$                         | j                  ddt         dd| j&                         | j                  ddt         dd| j(                         d | _         |       | _        d | _        y # t        $ rC d}t        j                  j                  |       t        j                  j                          Y #w xY w)Nr   )fault_setupzWARNING: Using passwords on command line is insecure. Installing the setproctitle python module will hide these from shortly after program start.
)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   r	   sysargvsetproctitleModuleNotFoundErrorstderrwriteflushsamba.paramr   optparseOptionGroup__init__
add_optionstr_load_configfile_set_debuglevel_set_option
_set_realm_configfile_lprealm)selfparserr   new_proctitler   msgr   s          ./usr/lib/python3/dist-packages/samba/getopt.pyr$   zSambaOptions.__init__(   sJ   % .chh7$	##))-8 	)%%dF4JKnZ &7K!%!6!6 	 	8 	nZ ,]!%!5!5 	 	7 	
: (D!%!1!1 	 	3 		* '8L!% 	 	2  :
1 ' #C 

  %

  "#s   D AE#"E#c                     | j                   S )z?Return path to the smb.conf file specified on the command line.r+   r.   s    r2   get_loadparm_pathzSambaOptions.get_loadparm_pathQ   s        c                     || _         y Nr4   r.   optionopt_strargr/   s        r2   r'   zSambaOptions._load_configfileU   s
    r7   c                     	 | j                   j                  d|       ||j                  _        y # t        $ r t        d| d      w xY w)Nr   zinvalid -d/--debug value: '')r,   setRuntimeErrorOptionErrorvalues
debuglevelr:   s        r2   r(   zSambaOptions._set_debuglevelX   sP    	DHHLL, $'   	D ;C5BCC	Ds	   0 A	c                     	 | j                   j                  d|       || _        y # t        $ r t        d| d      w xY w)Nr-   zinvalid --realm value: 'r?   )r,   r@   rA   rB   r-   r:   s        r2   r*   zSambaOptions._set_realm_   sK    	AHHLL#& 
  	A 8Q?@@	As   & ?c                    |j                  d      dk(  rt        j                  d      |j                  dd      }	 | j                  j                  |d   |d          y # t        $ r }t        j                  d|d|      d }~ww xY w)N=z&--option option takes a 'a=b' argument   r   zinvalid --option option value z: )findr"   OptionValueErrorsplitr,   r@   	Exception)r.   r;   r<   r=   r/   aes          r2   r)   zSambaOptions._set_optionf   s    88C=B++8: :IIc1	CHHLL1qt$ 	C++:=qAC C	Cs   "A   	B	)BB	c                 f   | j                   1| j                  j                  | j                          | j                  S t        j                  d      :| j                  j                  t        j                  d             | j                  S | j                  j                          | j                  S )z?Return loadparm object with data specified on the command line.SMB_CONF_PATH)r+   r,   loadosgetenvload_defaultr5   s    r2   get_loadparmzSambaOptions.get_loadparmq   s    'HHMM$**+
 xx	 YY'3HHMM"))O45 xx HH!!#xxr7   N)__name__
__module____qualname____doc__r$   r6   r'   r(   r*   r)   rV    r7   r2   r   r   %   s*    5'R '	Cr7   r   c                       e Zd ZdZd Zy)Samba3Optionsz<General Samba-related command line options with an s3 param.c                 f    t         j                  | |       ddlm} |j	                         | _        y )Nr   )param)r   r$   samba.samba3r_   get_contextr,   )r.   r/   s3params      r2   r$   zSamba3Options.__init__   s%    dF+1&&(r7   N)rW   rX   rY   rZ   r$   r[   r7   r2   r]   r]   |   s
    F)r7   r]   c                       e Zd ZdZd Zd Zy)VersionOptionsz/Command line option for printing Samba version.c                     t         j                  j                  | |d       | j                  ddd| j                  d       y )NzVersion Optionsz-Vz	--versionr   zDisplay version number)r   r   r   )r"   r#   r$   r%   _display_versionr.   r/   s     r2   r$   zVersionOptions.__init__   s>    %%dF4EFk*!%!6!65 	 	7r7   c                 `    dd l }t        |j                         t        j                  d       y )Nr   )r   printversionr   exit)r.   r;   r<   r=   r/   r   s         r2   rf   zVersionOptions._display_version   s    emmr7   N)rW   rX   rY   rZ   r$   rf   r[   r7   r2   rd   rd      s    97r7   rd   c                     | j                         dv rt        S | j                         dv rt        S | j                         dv rt        S t	        j
                  d|d|       )N)yestrue1)nofalse0)autoinvalid  option value: )lowerr   r   r   r"   rK   r=   r<   s     r2   parse_kerberos_arg_legacyrx      s]    
yy{**  	,	,  		   '')0#)7 8 	8r7   c                     | j                         dk(  rt        S | j                         dk(  rt        S | j                         dk(  rt        S t	        j
                  d|d|       )Nrequireddesiredoffrt   ru   )rv   r   r   r   r"   rK   rw   s     r2   parse_kerberos_argr}      s[    
yy{j   			!  		  '')0#)7 8 	8r7   c                   h    e Zd Z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 ZddZy)CredentialsOptionsz0Command line options for specifying credentials.Nc           	         || _         |d|z  | _        nd| _        d| _        d | _        d| _        t
        j                  j                  | || j                         | j                  ddd| j                  t        d	       | j                  d
dddt        | j                         | j                  ddddt        d| j                         | j                  ddddt        d| j                         | j                  dddd| j                         | j                  ddddt        d| j                         | j                  dd dd!| j                          | j                  d"d#dt        d$| j"                         | j                  d%d&dt        d'| j$                         | j                  d(d)d*dt        d+| j&                         | j                  d,d-d.dt        d/| j(                         t+               | _        y )0Nz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-Az--authentication-fileAUTHFILEzAuthentication filez-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_auth_file_set_kerberos_legacyr   creds)r.   r/   r   s      r2   r$   zCredentialsOptions.__init__   s5   (#5DDL0DL $!%%dFDLLA+T*"&":":; 	 	= 	z*(sT=O=O 	 	Q|Z *(43G3G 	 	I 	}k *)D4I4I 	 	K 	{:8"&"7"7 	 	9 	]K *4"&"5"5 	 	7 	/ *C"&"8"8 	 	: 	)3I *;dFXFX 	 	Z 	,l *:"&"7"7 	 	9 	6
 *3"&"5"5 	 	7 	|Z *EPTPiPi 	 	k !]
r7   c                     | j                    | j                  |i |S d}|D ]7  }|j                  d      s||j                  dd| j                   z        fz  }9  | j                  |i | y )Nr[   z--z--%s-)r   r%   
startswithreplace)r.   args1kwargsargs2rN   s        r2   r   zCredentialsOptions._add_option   s    $"4??E4V44 	EA<<%aiig0A0A&ABDDE	E 	)&)r7   c                 H    | j                   j                  |       d| _        y NF)r   parse_stringr   r:   s        r2   r   z"CredentialsOptions._parse_username   s    

$!r7   c                 :    | j                   j                  |       y r9   )r   
set_domainr:   s        r2   r   z#CredentialsOptions._parse_workgroup   s    

c"r7   c                 V    | j                   j                  |       d| _        d| _        y r   )r   set_passwordr   r   r:   s        r2   r   z CredentialsOptions._set_password   s$    

$ %!r7   c                     d| _         y r   )r   r:   s        r2   r   z#CredentialsOptions._set_no_password   s
     %r7   c                     d| _         y )NT)r   r:   s        r2   r   z$CredentialsOptions._set_machine_pass   s
     r7   c                     || _         y r9   )r   r:   s        r2   r   z!CredentialsOptions._set_ipaddress   s	    r7   c                 d    t        d       | j                  j                  t        ||             y )Nz0WARNING: The option -k|--kerberos is deprecated!)ri   r   set_kerberos_staterx   r:   s        r2   r   z'CredentialsOptions._set_kerberos_legacy  s%    @A

%%&?W&MNr7   c                 N    | j                   j                  t        ||             y r9   )r   r   r}   r:   s        r2   r   z CredentialsOptions._set_kerberos  s    

%%&8g&FGr7   c                 :    | j                   j                  |       y r9   )r   set_bind_dnr:   s        r2   r   z&CredentialsOptions._set_simple_bind_dn  s    

s#r7   c                 x    | j                   j                  t               | j                   j                  |       y r9   )r   r   r   set_named_ccacher:   s        r2   r   z#CredentialsOptions._set_krb5_ccache  s'    

%%&78

##C(r7   c                     t         j                  j                  |      r*| j                  j	                  |       d| _        d| _        y y r   )rS   pathexistsr   
parse_filer   r   r:   s        r2   r   z!CredentialsOptions._set_auth_file  s9    77>>#JJ!!#&$)D! %D r7   c                    | j                   j                  |       | j                  r| j                   j                  |       n&| j                  r| j                   j                          |rB| j                   j                         s(	 | j                   j                  |       | j                   S | j                   S # t        $ r Y | j                   S w xY w)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_requestedrM   )r.   lpfallback_machines      r2   get_credentialsz"CredentialsOptions.get_credentials  s     	

JJ**2.""JJ,,. DJJ$G$G$I

..r2 zztzz  zzs   B: :	CCr9   )F)rW   rX   rY   rZ   r$   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   r7   r2   r   r      sN    :1#f	*"#"
&!OH$)&r7   r   c                   B    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
dd	Zy
)CredentialsOptionsDoublez?Command line options for specifying credentials of two servers.c                 @   t         j                  | |       d| _        | j                  ddd| j                  t
        d       | j                  dddd	t
        | j                  
       | j                  dddt
        d| j                         | j                  dddt
        d| j                         | j                  ddd       | j                  dddt
        d| j                         | j                  dddt
        d| j                         t               | _        y )NTz--simple-bind-dn2DN2r   r   r   z--password2	PASSWORD2r   r   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)r   r$   no_pass2r%   _set_simple_bind_dn2r&   _set_password2_parse_username2_parse_workgroup2_set_kerberos2_set_kerberos2_legacyr   creds2rg   s     r2   r$   z!CredentialsOptionsDouble.__init__/  s,   ##D&1+U:!%!:!:: 	 	< 	{:'c!%!4!4 	 	6 	{)9!%!6!6 	 	8 	):!%!7!7 	 	9 	\M 	 	O)3I):TEXEX 	 	Z
 	{)+d6P6P 	 	R "mr7   c                 :    | j                   j                  |       y r9   )r   r   r:   s        r2   r   z)CredentialsOptionsDouble._parse_username2L  s      %r7   c                 :    | j                   j                  |       y r9   )r   r   r:   s        r2   r   z*CredentialsOptionsDouble._parse_workgroup2O  s    s#r7   c                 H    | j                   j                  |       d| _        y r   )r   r   r   r:   s        r2   r   z'CredentialsOptionsDouble._set_password2R  s      %r7   c                 N    | j                   j                  t        ||             y r9   r   r   r}   r:   s        r2   r   z.CredentialsOptionsDouble._set_kerberos2_legacyV      &&'9#w'GHr7   c                 N    | j                   j                  t        ||             y r9   r   r:   s        r2   r   z'CredentialsOptionsDouble._set_kerberos2Y  r   r7   c                 :    | j                   j                  |       y r9   )r   r   r:   s        r2   r   z-CredentialsOptionsDouble._set_simple_bind_dn2\  s    $r7   c                 
   |r| j                   j                  |       n4| j                   j                         s| j                   j                          | j                  r| j                   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      r2   get_credentials2z)CredentialsOptionsDouble.get_credentials2_  sZ     KKb!))+KK%%'==KK--/{{r7   N)T)rW   rX   rY   rZ   r$   r   r   r   r   r   r   r   r[   r7   r2   r   r   ,  s/    I$:&$II%r7   r   c                 
   ddddd}|j                  dd      }d}|r|dd j                         s|dd d	k(  r,||d   z  }|dd  }|r|dd j                         r#|dd d	k(  r,	 t        |      }|j                         j                  dd      }	 |||   z  S # t        $ r' d
j	                  |      }t        j                  |      w xY w# t        $ r,}	dj	                  ||      }t        j                  |      d }	~	ww xY w)NrI   i   i   i   @)BKBMBGB 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"   rK   upperKeyError)
r;   optvaluemultipliersvdigitsmr1   suffixks
             r2   check_bytesr   s  s/    %	'K 	c2A F
!A AaFcM!A$abE !A AaFcM-&M WWYsB'F-;v&&&  -./5vc{ 	'',,-  -+,2F3N 	'',,-s$   &B C 0C
	D'C==Dc                       e Zd Zej                  j
                  dz   Z eej                  j                        Zeed<   y)SambaOption)bytesr   N)	rW   rX   rY   r"   OptionTYPESr   TYPE_CHECKERr   r[   r7   r2   r   r     s4    OO!!J.E445L'Lr7   r   )rZ   __docformat__r"   r   rS   samba.credentialsr   r   r   r   r   samba._gluer	   rK   rB   r#   r   r]   rd   rx   r}   r   r   r   r   r   r[   r7   r2   <module>r     s   $ >"   	   -''T8'' Tn)L )X)) 	8	8~-- ~BA1 AN!-F((// (r7   