2007-11-21 15:07:16 +03:00
# Samba-specific bits for optparse
# Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007
2009-12-28 18:05:04 +03:00
#
2007-11-21 15:07:16 +03:00
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
2009-12-28 18:05:04 +03:00
#
2007-11-21 15:07:16 +03:00
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
2009-12-28 18:05:04 +03:00
#
2007-11-21 15:07:16 +03:00
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
2008-05-22 20:47:32 +04:00
""" Support for parsing Samba-related command-line options. """
2010-11-28 15:37:31 +03:00
__docformat__ = " restructuredText "
2011-09-13 03:27:50 +04:00
import optparse
import os
2023-10-05 01:50:22 +03:00
import sys
2023-10-05 04:30:20 +03:00
from abc import ABCMeta , abstractmethod
2023-10-05 01:50:22 +03:00
from copy import copy
2010-11-28 15:37:31 +03:00
from samba . credentials import (
Credentials ,
2011-10-12 01:56:15 +04:00
AUTO_USE_KERBEROS ,
2010-11-28 15:37:31 +03:00
DONT_USE_KERBEROS ,
MUST_USE_KERBEROS ,
2018-07-30 09:14:37 +03:00
)
2023-07-21 04:30:39 +03:00
from samba . _glue import get_burnt_commandline
2008-05-22 20:47:32 +04:00
2022-09-01 06:32:07 +03:00
2023-10-05 01:32:30 +03:00
def check_bytes ( option , opt , value ) :
""" Custom option type to allow the input of sizes using byte, kb, mb ...
units , e . g . 2 Gb , 4 KiB . . .
e . g . Option ( " --size " , type = " bytes " , metavar = " SIZE " )
"""
multipliers = { " B " : 1 ,
" KB " : 1024 ,
" MB " : 1024 * 1024 ,
" GB " : 1024 * 1024 * 1024 }
# strip out any spaces
v = value . replace ( " " , " " )
# extract the numeric prefix
digits = " "
while v and v [ 0 : 1 ] . isdigit ( ) or v [ 0 : 1 ] == ' . ' :
digits + = v [ 0 ]
v = v [ 1 : ]
try :
m = float ( digits )
except ValueError :
msg = ( " {0} option requires a numeric value, "
" with an optional unit suffix " ) . format ( opt )
raise optparse . OptionValueError ( msg )
# strip out the 'i' and convert to upper case so
# kib Kib kb KB are all equivalent
suffix = v . upper ( ) . replace ( " I " , " " )
try :
return m * multipliers [ suffix ]
except KeyError as k :
msg = ( " {0} invalid suffix ' {1} ' , "
" should be B, Kb, Mb or Gb " ) . format ( opt , v )
raise optparse . OptionValueError ( msg )
2023-10-06 02:58:46 +03:00
class OptionMissingError ( optparse . OptionValueError ) :
""" One or more Options with required=True is missing. """
def __init__ ( self , options ) :
""" Raised when required Options are missing from the command line.
: param options : list of 1 or more option
"""
self . options = options
def __str__ ( self ) :
if len ( self . options ) == 1 :
missing = self . options [ 0 ]
return f " Argument { missing } is required. "
else :
options = sorted ( [ str ( option ) for option in self . options ] )
missing = " , " . join ( options )
return f " The arguments { missing } are required. "
2023-10-05 04:30:20 +03:00
class ValidationError ( Exception ) :
2023-10-05 04:33:32 +03:00
""" ValidationError is the exception raised by validators.
Should be raised from the __call__ method of the Validator subclass .
"""
2023-10-05 04:30:20 +03:00
pass
class Validator ( metaclass = ABCMeta ) :
2023-10-05 04:33:32 +03:00
""" Base class for Validators used by SambaOption.
Subclass this to make custom validators and implement __call__ .
"""
2023-10-05 04:30:20 +03:00
@abstractmethod
def __call__ ( self , field , value ) :
pass
2023-10-05 06:26:40 +03:00
class Option ( optparse . Option ) :
2023-10-06 02:58:46 +03:00
ATTRS = optparse . Option . ATTRS + [ " required " , " validators " ]
2023-10-05 01:32:30 +03:00
TYPES = optparse . Option . TYPES + ( " bytes " , )
TYPE_CHECKER = copy ( optparse . Option . TYPE_CHECKER )
TYPE_CHECKER [ " bytes " ] = check_bytes
2023-10-05 04:17:01 +03:00
def run_validators ( self , opt , value ) :
""" Runs the list of validators on the current option. """
validators = getattr ( self , " validators " ) or [ ]
for validator in validators :
validator ( opt , value )
def convert_value ( self , opt , value ) :
""" Override convert_value to run validators just after.
This can also be done in process ( ) but there we would have to
replace the entire method .
"""
value = super ( ) . convert_value ( opt , value )
self . run_validators ( opt , value )
return value
2023-10-05 01:32:30 +03:00
2023-10-19 05:05:56 +03:00
class OptionParser ( optparse . OptionParser ) :
""" Samba OptionParser, adding support for required=True on Options. """
def __init__ ( self ,
usage = None ,
option_list = None ,
option_class = Option ,
version = None ,
conflict_handler = " error " ,
description = None ,
formatter = None ,
add_help_option = True ,
prog = None ,
epilog = None ) :
"""
Ensure that option_class defaults to the Samba one .
"""
super ( ) . __init__ ( usage , option_list , option_class , version ,
conflict_handler , description , formatter ,
add_help_option , prog , epilog )
2023-10-06 02:58:46 +03:00
def check_values ( self , values , args ) :
""" Loop through required options if value is missing raise exception. """
missing = [ ]
for option in self . _get_all_options ( ) :
if option . required :
value = getattr ( values , option . dest )
if value is None :
missing . append ( option )
if missing :
raise OptionMissingError ( missing )
return super ( ) . check_values ( values , args )
2023-10-19 05:05:56 +03:00
2023-10-10 13:31:33 +03:00
class OptionGroup ( optparse . OptionGroup ) :
""" Samba OptionGroup base class.
Provides a generic set_option method to be used as Option callback ,
so that one doesn ' t need to be created for every available Option.
Also overrides the add_option method , so it correctly initialises
the defaults on the OptionGroup .
"""
def add_option ( self , * args , * * kwargs ) :
""" Override add_option so it applies defaults during constructor. """
opt = super ( ) . add_option ( * args , * * kwargs )
default = None if opt . default == optparse . NO_DEFAULT else opt . default
self . set_option ( opt , opt . get_opt_string ( ) , default , self . parser )
return opt
def set_option ( self , option , opt_str , arg , parser ) :
""" Callback to set the attribute based on the Option dest name. """
dest = option . dest or option . _long_opts [ 0 ] [ 2 : ] . replace ( " - " , " _ " )
setattr ( self , dest , arg )
2023-10-20 04:46:40 +03:00
class SambaOptions ( OptionGroup ) :
2008-05-22 20:47:32 +04:00
""" General Samba-related command line options. """
2010-11-28 15:37:31 +03:00
2007-11-21 15:07:16 +03:00
def __init__ ( self , parser ) :
2018-05-25 08:52:40 +03:00
from samba import fault_setup
fault_setup ( )
2023-07-21 04:30:39 +03:00
# This removes passwords from the commandline via
# setproctitle() but makes no change to python sys.argv so we
# can continue to process as normal
#
# get_burnt_commandline returns None if no change is needed
new_proctitle = get_burnt_commandline ( sys . argv )
if new_proctitle is not None :
try :
import setproctitle
setproctitle . setproctitle ( new_proctitle )
except ModuleNotFoundError :
msg = ( " WARNING: Using passwords on command line is insecure. "
" Installing the setproctitle python module will hide "
" these from shortly after program start. \n " )
sys . stderr . write ( msg )
sys . stderr . flush ( )
2010-11-28 15:37:31 +03:00
from samba . param import LoadParm
2023-10-05 01:48:14 +03:00
super ( ) . __init__ ( parser , " Samba Common Options " )
2008-01-24 01:33:36 +03:00
self . add_option ( " -s " , " --configfile " , action = " callback " ,
2009-12-28 18:05:04 +03:00
type = str , metavar = " FILE " , help = " Configuration file " ,
2008-01-24 01:33:36 +03:00
callback = self . _load_configfile )
2010-04-02 11:31:30 +04:00
self . add_option ( " -d " , " --debuglevel " , action = " callback " ,
2017-09-07 02:26:04 +03:00
type = str , metavar = " DEBUGLEVEL " , help = " debug level " ,
2010-04-02 11:31:30 +04:00
callback = self . _set_debuglevel )
2010-04-21 05:33:43 +04:00
self . add_option ( " --option " , action = " callback " ,
2011-09-13 03:27:50 +04:00
type = str , metavar = " OPTION " ,
help = " set smb.conf option from command line " ,
2010-04-21 05:33:43 +04:00
callback = self . _set_option )
2010-04-21 06:01:47 +04:00
self . add_option ( " --realm " , action = " callback " ,
type = str , metavar = " REALM " , help = " set the realm name " ,
callback = self . _set_realm )
2008-01-24 01:33:36 +03:00
self . _configfile = None
2010-11-28 15:37:31 +03:00
self . _lp = LoadParm ( )
2011-09-13 15:02:43 +04:00
self . realm = None
2007-11-21 15:07:16 +03:00
2008-01-24 01:33:36 +03:00
def get_loadparm_path ( self ) :
2011-09-13 03:27:50 +04:00
""" Return path to the smb.conf file specified on the command line. """
2008-01-24 01:33:36 +03:00
return self . _configfile
def _load_configfile ( self , option , opt_str , arg , parser ) :
self . _configfile = arg
2010-04-02 11:31:30 +04:00
def _set_debuglevel ( self , option , opt_str , arg , parser ) :
2022-08-19 07:49:24 +03:00
try :
self . _lp . set ( ' debug level ' , arg )
except RuntimeError :
2023-10-06 02:45:35 +03:00
raise optparse . OptionValueError (
f " invalid -d/--debug value: ' { arg } ' " )
2017-09-07 02:26:04 +03:00
parser . values . debuglevel = arg
2010-04-21 05:33:43 +04:00
2010-04-21 06:01:47 +04:00
def _set_realm ( self , option , opt_str , arg , parser ) :
2022-08-19 07:50:54 +03:00
try :
self . _lp . set ( ' realm ' , arg )
except RuntimeError :
2023-10-06 02:45:35 +03:00
raise optparse . OptionValueError (
f " invalid --realm value: ' { arg } ' " )
2011-09-13 15:02:43 +04:00
self . realm = arg
2010-04-21 06:01:47 +04:00
2010-04-21 05:33:43 +04:00
def _set_option ( self , option , opt_str , arg , parser ) :
if arg . find ( ' = ' ) == - 1 :
2011-10-19 03:30:40 +04:00
raise optparse . OptionValueError (
" --option option takes a ' a=b ' argument " )
2022-08-19 07:53:40 +03:00
a = arg . split ( ' = ' , 1 )
2011-10-17 23:31:30 +04:00
try :
self . _lp . set ( a [ 0 ] , a [ 1 ] )
2017-01-17 13:03:17 +03:00
except Exception as e :
2011-10-19 03:30:40 +04:00
raise optparse . OptionValueError (
" invalid --option option value %r : %s " % ( arg , e ) )
2010-04-02 11:31:30 +04:00
2008-01-24 01:33:36 +03:00
def get_loadparm ( self ) :
2011-09-13 03:27:50 +04:00
""" Return loadparm object with data specified on the command line. """
2008-04-14 21:01:32 +04:00
if self . _configfile is not None :
2010-04-21 05:33:43 +04:00
self . _lp . load ( self . _configfile )
2008-04-14 21:01:32 +04:00
elif os . getenv ( " SMB_CONF_PATH " ) is not None :
2010-04-21 05:33:43 +04:00
self . _lp . load ( os . getenv ( " SMB_CONF_PATH " ) )
2008-04-14 21:01:32 +04:00
else :
2010-04-21 05:33:43 +04:00
self . _lp . load_default ( )
return self . _lp
2007-11-21 15:07:16 +03:00
2008-05-22 20:47:32 +04:00
2022-07-18 18:19:24 +03:00
class Samba3Options ( SambaOptions ) :
""" General Samba-related command line options with an s3 param. """
def __init__ ( self , parser ) :
2023-10-05 01:48:14 +03:00
super ( ) . __init__ ( parser )
2022-07-18 18:19:24 +03:00
from samba . samba3 import param as s3param
self . _lp = s3param . get_context ( )
2023-10-20 04:46:40 +03:00
class HostOptions ( OptionGroup ) :
2023-10-06 05:47:43 +03:00
""" Command line options for connecting to target host or database. """
def __init__ ( self , parser ) :
super ( ) . __init__ ( parser , " Host Options " )
self . add_option ( " -H " , " --URL " ,
help = " LDB URL for database or target server " ,
type = str , metavar = " URL " , action = " callback " ,
2023-10-20 04:46:40 +03:00
callback = self . set_option , dest = " H " )
2023-10-06 05:47:43 +03:00
2023-10-20 04:46:40 +03:00
class VersionOptions ( OptionGroup ) :
2008-05-22 20:47:32 +04:00
""" Command line option for printing Samba version. """
2007-11-21 15:07:16 +03:00
def __init__ ( self , parser ) :
2023-10-05 01:48:14 +03:00
super ( ) . __init__ ( parser , " Version Options " )
2012-10-08 14:50:52 +04:00
self . add_option ( " -V " , " --version " , action = " callback " ,
2018-07-30 09:16:12 +03:00
callback = self . _display_version ,
help = " Display version number " )
2010-04-09 04:30:48 +04:00
def _display_version ( self , option , opt_str , arg , parser ) :
2010-11-28 15:37:31 +03:00
import samba
2017-01-17 13:03:17 +03:00
print ( samba . version )
2010-04-09 04:30:48 +04:00
sys . exit ( 0 )
2007-11-21 15:07:16 +03:00
2021-04-07 15:16:52 +03:00
def parse_kerberos_arg_legacy ( arg , opt_str ) :
2011-10-13 01:45:52 +04:00
if arg . lower ( ) in [ " yes " , ' true ' , ' 1 ' ] :
return MUST_USE_KERBEROS
elif arg . lower ( ) in [ " no " , ' false ' , ' 0 ' ] :
return DONT_USE_KERBEROS
elif arg . lower ( ) in [ " auto " ] :
return AUTO_USE_KERBEROS
else :
2011-10-17 23:34:47 +04:00
raise optparse . OptionValueError ( " invalid %s option value: %s " %
( opt_str , arg ) )
2011-10-13 01:45:52 +04:00
2021-04-07 15:16:52 +03:00
def parse_kerberos_arg ( arg , opt_str ) :
if arg . lower ( ) == ' required ' :
return MUST_USE_KERBEROS
elif arg . lower ( ) == ' desired ' :
return AUTO_USE_KERBEROS
elif arg . lower ( ) == ' off ' :
return DONT_USE_KERBEROS
else :
raise optparse . OptionValueError ( " invalid %s option value: %s " %
( opt_str , arg ) )
2023-10-20 04:46:40 +03:00
class CredentialsOptions ( OptionGroup ) :
2008-05-22 20:47:32 +04:00
""" Command line options for specifying credentials. """
2011-10-13 01:45:52 +04:00
2015-01-28 00:45:47 +03:00
def __init__ ( self , parser , special_name = None ) :
self . special_name = special_name
if special_name is not None :
self . section = " Credentials Options ( %s ) " % special_name
else :
self . section = " Credentials Options "
2015-02-26 02:23:55 +03:00
self . ask_for_password = True
2010-09-24 06:51:36 +04:00
self . ipaddress = None
2015-02-26 02:23:55 +03:00
self . machine_pass = False
2023-10-05 01:48:14 +03:00
super ( ) . __init__ ( parser , self . section )
2015-01-28 00:45:47 +03:00
self . _add_option ( " --simple-bind-dn " , metavar = " DN " , action = " callback " ,
2018-07-30 09:16:12 +03:00
callback = self . _set_simple_bind_dn , type = str ,
help = " DN to use for a simple bind " )
2015-01-28 00:45:47 +03:00
self . _add_option ( " --password " , metavar = " PASSWORD " , action = " callback " ,
2018-07-30 09:16:12 +03:00
help = " Password " , type = str , callback = self . _set_password )
2015-01-28 00:45:47 +03:00
self . _add_option ( " -U " , " --username " , metavar = " USERNAME " ,
2018-07-30 09:16:12 +03:00
action = " callback " , type = str ,
help = " Username " , callback = self . _parse_username )
2015-01-28 00:45:47 +03:00
self . _add_option ( " -W " , " --workgroup " , metavar = " WORKGROUP " ,
2018-07-30 09:16:12 +03:00
action = " callback " , type = str ,
help = " Workgroup " , callback = self . _parse_workgroup )
2015-01-28 00:45:47 +03:00
self . _add_option ( " -N " , " --no-pass " , action = " callback " ,
2018-07-30 09:16:12 +03:00
help = " Don ' t ask for a password " ,
callback = self . _set_no_password )
2015-01-28 00:45:47 +03:00
self . _add_option ( " " , " --ipaddress " , metavar = " IPADDRESS " ,
2018-07-30 09:16:12 +03:00
action = " callback " , type = str ,
help = " IP address of server " ,
callback = self . _set_ipaddress )
2015-01-28 00:45:47 +03:00
self . _add_option ( " -P " , " --machine-pass " ,
2018-07-30 09:16:12 +03:00
action = " callback " ,
help = " Use stored machine account password " ,
callback = self . _set_machine_pass )
2021-04-07 15:16:52 +03:00
self . _add_option ( " --use-kerberos " , metavar = " desired|required|off " ,
action = " callback " , type = str ,
help = " Use Kerberos authentication " , callback = self . _set_kerberos )
self . _add_option ( " --use-krb5-ccache " , metavar = " KRB5CCNAME " ,
2017-07-06 05:52:39 +03:00
action = " callback " , type = str ,
help = " Kerberos Credentials cache " ,
callback = self . _set_krb5_ccache )
2022-09-30 10:38:12 +03:00
self . _add_option ( " -A " , " --authentication-file " , metavar = " AUTHFILE " ,
action = " callback " , type = str ,
help = " Authentication file " ,
callback = self . _set_auth_file )
2021-04-07 15:16:52 +03:00
# LEGACY
self . _add_option ( " -k " , " --kerberos " , metavar = " KERBEROS " ,
action = " callback " , type = str ,
help = " DEPRECATED: Migrate to --use-kerberos " , callback = self . _set_kerberos_legacy )
2007-12-28 08:31:42 +03:00
self . creds = Credentials ( )
2015-01-28 00:45:47 +03:00
def _add_option ( self , * args1 , * * kwargs ) :
if self . special_name is None :
return self . add_option ( * args1 , * * kwargs )
args2 = ( )
for a in args1 :
if not a . startswith ( " -- " ) :
continue
args2 + = ( a . replace ( " -- " , " -- %s - " % self . special_name ) , )
self . add_option ( * args2 , * * kwargs )
2007-12-30 03:14:18 +03:00
def _parse_username ( self , option , opt_str , arg , parser ) :
2007-12-28 08:31:42 +03:00
self . creds . parse_string ( arg )
2015-02-26 02:23:55 +03:00
self . machine_pass = False
2007-12-28 08:31:42 +03:00
2007-12-30 03:14:18 +03:00
def _parse_workgroup ( self , option , opt_str , arg , parser ) :
2007-12-29 00:36:55 +03:00
self . creds . set_domain ( arg )
2007-12-30 03:14:18 +03:00
def _set_password ( self , option , opt_str , arg , parser ) :
2007-12-28 08:31:42 +03:00
self . creds . set_password ( arg )
2015-02-26 02:23:55 +03:00
self . ask_for_password = False
self . machine_pass = False
def _set_no_password ( self , option , opt_str , arg , parser ) :
self . ask_for_password = False
def _set_machine_pass ( self , option , opt_str , arg , parser ) :
self . machine_pass = True
2007-12-28 08:31:42 +03:00
2010-09-24 06:51:36 +04:00
def _set_ipaddress ( self , option , opt_str , arg , parser ) :
self . ipaddress = arg
2021-04-07 15:16:52 +03:00
def _set_kerberos_legacy ( self , option , opt_str , arg , parser ) :
print ( ' WARNING: The option -k|--kerberos is deprecated! ' )
self . creds . set_kerberos_state ( parse_kerberos_arg_legacy ( arg , opt_str ) )
2008-03-28 13:57:15 +03:00
def _set_kerberos ( self , option , opt_str , arg , parser ) :
2011-10-17 23:34:47 +04:00
self . creds . set_kerberos_state ( parse_kerberos_arg ( arg , opt_str ) )
2008-03-28 13:57:15 +03:00
2007-12-30 03:14:18 +03:00
def _set_simple_bind_dn ( self , option , opt_str , arg , parser ) :
2007-12-30 03:14:15 +03:00
self . creds . set_bind_dn ( arg )
2007-11-21 15:07:16 +03:00
2017-07-06 05:52:39 +03:00
def _set_krb5_ccache ( self , option , opt_str , arg , parser ) :
2024-03-08 16:14:34 +03:00
self . ask_for_password = False
2021-04-07 15:16:52 +03:00
self . creds . set_kerberos_state ( MUST_USE_KERBEROS )
2017-07-06 05:52:39 +03:00
self . creds . set_named_ccache ( arg )
2022-09-30 10:38:12 +03:00
def _set_auth_file ( self , option , opt_str , arg , parser ) :
if os . path . exists ( arg ) :
self . creds . parse_file ( arg )
self . ask_for_password = False
self . machine_pass = False
2010-12-08 00:20:54 +03:00
def get_credentials ( self , lp , fallback_machine = False ) :
2008-05-22 20:47:32 +04:00
""" Obtain the credentials set on the command-line.
: param lp : Loadparm object to use .
: return : Credentials object
"""
2008-03-28 13:57:15 +03:00
self . creds . guess ( lp )
2015-02-26 02:23:55 +03:00
if self . machine_pass :
self . creds . set_machine_account ( lp )
elif self . ask_for_password :
2008-01-24 03:05:57 +03:00
self . creds . set_cmdline_callbacks ( )
2010-12-08 00:20:54 +03:00
# possibly fallback to using the machine account, if we have
# access to the secrets db
if fallback_machine and not self . creds . authentication_requested ( ) :
try :
self . creds . set_machine_account ( lp )
except Exception :
pass
2007-12-28 08:31:42 +03:00
return self . creds
2010-01-13 11:41:56 +03:00
2011-09-13 03:27:50 +04:00
2010-01-13 11:41:56 +03:00
class CredentialsOptionsDouble ( CredentialsOptions ) :
""" Command line options for specifying credentials of two servers. """
2011-10-13 01:45:52 +04:00
2010-01-13 11:41:56 +03:00
def __init__ ( self , parser ) :
2023-10-05 01:48:14 +03:00
super ( ) . __init__ ( parser )
2010-02-12 15:55:14 +03:00
self . no_pass2 = True
2010-01-13 11:41:56 +03:00
self . add_option ( " --simple-bind-dn2 " , metavar = " DN2 " , action = " callback " ,
callback = self . _set_simple_bind_dn2 , type = str ,
help = " DN to use for a simple bind " )
self . add_option ( " --password2 " , metavar = " PASSWORD2 " , action = " callback " ,
2011-09-13 03:27:50 +04:00
help = " Password " , type = str ,
callback = self . _set_password2 )
2010-01-13 11:41:56 +03:00
self . add_option ( " --username2 " , metavar = " USERNAME2 " ,
action = " callback " , type = str ,
2011-09-13 03:27:50 +04:00
help = " Username for second server " ,
callback = self . _parse_username2 )
2010-01-13 11:41:56 +03:00
self . add_option ( " --workgroup2 " , metavar = " WORKGROUP2 " ,
action = " callback " , type = str ,
2011-09-13 03:27:50 +04:00
help = " Workgroup for second server " ,
callback = self . _parse_workgroup2 )
2010-01-13 11:41:56 +03:00
self . add_option ( " --no-pass2 " , action = " store_true " ,
help = " Don ' t ask for a password for the second server " )
2021-04-07 15:16:52 +03:00
self . add_option ( " --use-kerberos2 " , metavar = " desired|required|off " ,
action = " callback " , type = str ,
help = " Use Kerberos authentication " , callback = self . _set_kerberos2 )
# LEGACY
2010-01-13 11:41:56 +03:00
self . add_option ( " --kerberos2 " , metavar = " KERBEROS2 " ,
action = " callback " , type = str ,
2021-04-07 15:16:52 +03:00
help = " Use Kerberos " , callback = self . _set_kerberos2_legacy )
2010-01-13 11:41:56 +03:00
self . creds2 = Credentials ( )
def _parse_username2 ( self , option , opt_str , arg , parser ) :
self . creds2 . parse_string ( arg )
def _parse_workgroup2 ( self , option , opt_str , arg , parser ) :
self . creds2 . set_domain ( arg )
def _set_password2 ( self , option , opt_str , arg , parser ) :
self . creds2 . set_password ( arg )
2010-02-12 15:55:14 +03:00
self . no_pass2 = False
2010-01-13 11:41:56 +03:00
2021-04-07 15:16:52 +03:00
def _set_kerberos2_legacy ( self , option , opt_str , arg , parser ) :
self . creds2 . set_kerberos_state ( parse_kerberos_arg ( arg , opt_str ) )
2010-01-13 11:41:56 +03:00
def _set_kerberos2 ( self , option , opt_str , arg , parser ) :
2011-10-17 23:34:47 +04:00
self . creds2 . set_kerberos_state ( parse_kerberos_arg ( arg , opt_str ) )
2010-01-13 11:41:56 +03:00
def _set_simple_bind_dn2 ( self , option , opt_str , arg , parser ) :
self . creds2 . set_bind_dn ( arg )
2010-10-01 04:29:33 +04:00
def get_credentials2 ( self , lp , guess = True ) :
2010-01-13 11:41:56 +03:00
""" Obtain the credentials set on the command-line.
: param lp : Loadparm object to use .
2010-10-01 04:29:33 +04:00
: param guess : Try guess Credentials from environment
2010-01-13 11:41:56 +03:00
: return : Credentials object
"""
2010-10-01 04:29:33 +04:00
if guess :
self . creds2 . guess ( lp )
elif not self . creds2 . get_username ( ) :
2011-10-13 01:45:52 +04:00
self . creds2 . set_anonymous ( )
2010-10-01 04:29:33 +04:00
2010-02-12 15:55:14 +03:00
if self . no_pass2 :
2010-01-13 11:41:56 +03:00
self . creds2 . set_cmdline_callbacks ( )
return self . creds2