2007-11-21 15:07:16 +03:00
#!/usr/bin/python
# 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. """
2007-11-21 15:07:16 +03:00
import optparse
2009-07-19 20:51:15 +04:00
from credentials import Credentials , DONT_USE_KERBEROS , MUST_USE_KERBEROS
2008-08-01 23:12:37 +04:00
from hostconfig import Hostconfig
2010-04-08 22:34:40 +04:00
import samba
2007-11-21 15:07:16 +03:00
2008-05-22 20:47:32 +04:00
__docformat__ = " restructuredText "
2007-11-21 15:07:16 +03:00
class SambaOptions ( optparse . OptionGroup ) :
2008-05-22 20:47:32 +04:00
""" General Samba-related command line options. """
2007-11-21 15:07:16 +03:00
def __init__ ( self , parser ) :
optparse . OptionGroup . __init__ ( self , 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 " ,
type = int , metavar = " DEBUGLEVEL " , help = " debug level " ,
callback = self . _set_debuglevel )
2008-01-24 01:33:36 +03:00
self . _configfile = None
2010-04-02 11:31:30 +04:00
self . _debuglevel = None
2007-11-21 15:07:16 +03:00
2008-01-24 01:33:36 +03:00
def get_loadparm_path ( self ) :
2008-05-22 20:47:32 +04:00
""" Return the 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 ) :
self . _debuglevel = arg
2008-01-24 01:33:36 +03:00
def get_loadparm ( self ) :
2008-05-22 20:47:32 +04:00
""" Return a loadparm object with data specified on the command line. """
2008-04-14 21:01:32 +04:00
import os , param
2008-01-24 01:33:36 +03:00
lp = param . LoadParm ( )
2008-04-14 21:01:32 +04:00
if self . _configfile is not None :
2008-01-24 01:33:36 +03:00
lp . load ( self . _configfile )
2008-04-14 21:01:32 +04:00
elif os . getenv ( " SMB_CONF_PATH " ) is not None :
lp . load ( os . getenv ( " SMB_CONF_PATH " ) )
else :
lp . load_default ( )
2010-04-02 11:31:30 +04:00
if self . _debuglevel :
2010-04-08 22:34:40 +04:00
samba . set_debug_level ( self . _debuglevel )
2008-01-24 01:33:36 +03:00
return lp
2007-11-21 15:07:16 +03:00
2008-08-01 23:12:37 +04:00
def get_hostconfig ( self ) :
return Hostconfig ( self . get_loadparm ( ) )
2008-05-22 20:47:32 +04:00
2007-11-21 15:07:16 +03:00
class VersionOptions ( optparse . 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 ) :
optparse . OptionGroup . __init__ ( self , parser , " Version Options " )
2010-04-09 04:30:48 +04:00
self . add_option ( " --version " , action = " callback " ,
callback = self . _display_version ,
help = " Display version number " )
def _display_version ( self , option , opt_str , arg , parser ) :
import samba , sys
print samba . version
sys . exit ( 0 )
2007-11-21 15:07:16 +03:00
class CredentialsOptions ( optparse . OptionGroup ) :
2008-05-22 20:47:32 +04:00
""" Command line options for specifying credentials. """
2007-11-21 15:07:16 +03:00
def __init__ ( self , parser ) :
2010-02-12 15:55:14 +03:00
self . no_pass = True
2007-11-21 15:07:16 +03:00
optparse . OptionGroup . __init__ ( self , parser , " Credentials Options " )
2007-12-28 08:31:42 +03:00
self . add_option ( " --simple-bind-dn " , metavar = " DN " , action = " callback " ,
2007-12-30 03:14:18 +03:00
callback = self . _set_simple_bind_dn , type = str ,
2007-11-21 15:07:16 +03:00
help = " DN to use for a simple bind " )
2007-12-28 08:31:42 +03:00
self . add_option ( " --password " , metavar = " PASSWORD " , action = " callback " ,
2007-12-30 03:14:18 +03:00
help = " Password " , type = str , callback = self . _set_password )
2009-12-28 18:05:04 +03:00
self . add_option ( " -U " , " --username " , metavar = " USERNAME " ,
2007-12-28 08:31:42 +03:00
action = " callback " , type = str ,
2007-12-30 03:14:18 +03:00
help = " Username " , callback = self . _parse_username )
2009-12-28 18:05:04 +03:00
self . add_option ( " -W " , " --workgroup " , metavar = " WORKGROUP " ,
2007-12-29 00:36:55 +03:00
action = " callback " , type = str ,
2007-12-30 03:14:18 +03:00
help = " Workgroup " , callback = self . _parse_workgroup )
2008-01-24 03:05:57 +03:00
self . add_option ( " -N " , " --no-pass " , action = " store_true " ,
help = " Don ' t ask for a password " )
2009-12-28 18:05:04 +03:00
self . add_option ( " -k " , " --kerberos " , metavar = " KERBEROS " ,
2008-03-28 13:57:15 +03:00
action = " callback " , type = str ,
help = " Use Kerberos " , callback = self . _set_kerberos )
2007-12-28 08:31:42 +03:00
self . creds = Credentials ( )
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 )
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 )
2010-02-12 15:55:14 +03:00
self . no_pass = False
2007-12-28 08:31:42 +03:00
2008-03-28 13:57:15 +03:00
def _set_kerberos ( self , option , opt_str , arg , parser ) :
if bool ( arg ) or arg . lower ( ) == " yes " :
self . creds . set_kerberos_state ( MUST_USE_KERBEROS )
else :
self . creds . set_kerberos_state ( DONT_USE_KERBEROS )
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
2008-03-28 13:57:15 +03:00
def get_credentials ( self , lp ) :
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 )
2010-02-12 15:55:14 +03:00
if self . no_pass :
2008-01-24 03:05:57 +03:00
self . creds . set_cmdline_callbacks ( )
2007-12-28 08:31:42 +03:00
return self . creds
2010-01-13 11:41:56 +03:00
class CredentialsOptionsDouble ( CredentialsOptions ) :
""" Command line options for specifying credentials of two servers. """
def __init__ ( self , parser ) :
CredentialsOptions . __init__ ( self , 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 " ,
help = " Password " , type = str , callback = self . _set_password2 )
self . add_option ( " --username2 " , metavar = " USERNAME2 " ,
action = " callback " , type = str ,
help = " Username for second server " , callback = self . _parse_username2 )
self . add_option ( " --workgroup2 " , metavar = " WORKGROUP2 " ,
action = " callback " , type = str ,
help = " Workgroup for second server " , callback = self . _parse_workgroup2 )
self . add_option ( " --no-pass2 " , action = " store_true " ,
help = " Don ' t ask for a password for the second server " )
self . add_option ( " --kerberos2 " , metavar = " KERBEROS2 " ,
action = " callback " , type = str ,
help = " Use Kerberos " , callback = self . _set_kerberos2 )
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
def _set_kerberos2 ( self , option , opt_str , arg , parser ) :
if bool ( arg ) or arg . lower ( ) == " yes " :
self . creds2 . set_kerberos_state ( MUST_USE_KERBEROS )
else :
self . creds2 . set_kerberos_state ( DONT_USE_KERBEROS )
def _set_simple_bind_dn2 ( self , option , opt_str , arg , parser ) :
self . creds2 . set_bind_dn ( arg )
def get_credentials2 ( self , lp ) :
""" Obtain the credentials set on the command-line.
: param lp : Loadparm object to use .
: return : Credentials object
"""
self . creds2 . guess ( lp )
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