VERSION: Bump version number up to 4.0.4.
[samba.git] / source4 / scripting / python / samba / getopt.py
index f939180066ffbc422ce9f9753ad6269a62d83c19..c3c080084ec581504baafb24cc64ad620d97befb 100644 (file)
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
 # Samba-specific bits for optparse
 # Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2007
 #
@@ -64,6 +62,9 @@ class SambaOptions(optparse.OptionGroup):
         self._configfile = arg
 
     def _set_debuglevel(self, option, opt_str, arg, parser):
+        if arg < 0:
+            raise optparse.OptionValueError("invalid %s option value: %s" %
+                                            (opt_str, arg))
         self._lp.set('debug level', str(arg))
 
     def _set_realm(self, option, opt_str, arg, parser):
@@ -72,10 +73,14 @@ class SambaOptions(optparse.OptionGroup):
 
     def _set_option(self, option, opt_str, arg, parser):
         if arg.find('=') == -1:
-            print("--option takes a 'a=b' argument")
-            sys.exit(1)
+            raise optparse.OptionValueError(
+                "--option option takes a 'a=b' argument")
         a = arg.split('=')
-        self._lp.set(a[0], a[1])
+        try:
+            self._lp.set(a[0], a[1])
+        except Exception, e:
+            raise optparse.OptionValueError(
+                "invalid --option option value %r: %s" % (arg, e))
 
     def get_loadparm(self):
         """Return loadparm object with data specified on the command line."""
@@ -95,7 +100,7 @@ class VersionOptions(optparse.OptionGroup):
     """Command line option for printing Samba version."""
     def __init__(self, parser):
         optparse.OptionGroup.__init__(self, parser, "Version Options")
-        self.add_option("--version", action="callback",
+        self.add_option("-V", "--version", action="callback",
                 callback=self._display_version,
                 help="Display version number")
 
@@ -105,7 +110,7 @@ class VersionOptions(optparse.OptionGroup):
         sys.exit(0)
 
 
-def parse_kerberos_arg(arg):
+def parse_kerberos_arg(arg, opt_str):
     if arg.lower() in ["yes", 'true', '1']:
         return MUST_USE_KERBEROS
     elif arg.lower() in ["no", 'false', '0']:
@@ -113,7 +118,8 @@ def parse_kerberos_arg(arg):
     elif arg.lower() in ["auto"]:
         return AUTO_USE_KERBEROS
     else:
-        raise optparse.BadOptionError("invalid kerberos option: %s" % arg)
+        raise optparse.OptionValueError("invalid %s option value: %s" %
+                                        (opt_str, arg))
 
 
 class CredentialsOptions(optparse.OptionGroup):
@@ -159,7 +165,7 @@ class CredentialsOptions(optparse.OptionGroup):
         self.ipaddress = arg
 
     def _set_kerberos(self, option, opt_str, arg, parser):
-        self.creds.set_kerberos_state(parse_kerberos_arg(arg))
+        self.creds.set_kerberos_state(parse_kerberos_arg(arg, opt_str))
 
     def _set_simple_bind_dn(self, option, opt_str, arg, parser):
         self.creds.set_bind_dn(arg)
@@ -223,7 +229,7 @@ class CredentialsOptionsDouble(CredentialsOptions):
         self.no_pass2 = False
 
     def _set_kerberos2(self, option, opt_str, arg, parser):
-        self.creds2.set_kerberos_state(parse_kerberos_arg(arg))
+        self.creds2.set_kerberos_state(parse_kerberos_arg(arg, opt_str))
 
     def _set_simple_bind_dn2(self, option, opt_str, arg, parser):
         self.creds2.set_bind_dn(arg)