diff options
| author | Andreas Schneider <asn@samba.org> | 2021-04-07 14:16:52 +0200 |
|---|---|---|
| committer | Andrew Bartlett <abartlet@samba.org> | 2021-06-20 23:26:32 +0000 |
| commit | 36bb6686cb23971844585f29ae5eb6bbe4b5a12b (patch) | |
| tree | b35b2c3088b6c57d2858ca61fcfb4884d913516e /python | |
| parent | 7f27bbd540bbf05fae2611faeb1367259f407752 (diff) | |
| download | samba-36bb6686cb23971844585f29ae5eb6bbe4b5a12b.tar.gz samba-36bb6686cb23971844585f29ae5eb6bbe4b5a12b.tar.bz2 samba-36bb6686cb23971844585f29ae5eb6bbe4b5a12b.zip | |
python: Streamline option parser of python tools
The python tools, especially samba-tool should have the same option set
as the rest of the client utils.
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'python')
| -rw-r--r-- | python/samba/getopt.py | 42 | ||||
| -rw-r--r-- | python/samba/tests/get_opt.py | 35 |
2 files changed, 60 insertions, 17 deletions
diff --git a/python/samba/getopt.py b/python/samba/getopt.py index f693cde7b31..7b8d2ef46c5 100644 --- a/python/samba/getopt.py +++ b/python/samba/getopt.py @@ -107,7 +107,7 @@ class VersionOptions(optparse.OptionGroup): sys.exit(0) -def parse_kerberos_arg(arg, opt_str): +def parse_kerberos_arg_legacy(arg, opt_str): if arg.lower() in ["yes", 'true', '1']: return MUST_USE_KERBEROS elif arg.lower() in ["no", 'false', '0']: @@ -119,6 +119,18 @@ def parse_kerberos_arg(arg, opt_str): (opt_str, arg)) +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)) + + class CredentialsOptions(optparse.OptionGroup): """Command line options for specifying credentials.""" @@ -147,9 +159,6 @@ class CredentialsOptions(optparse.OptionGroup): self._add_option("-N", "--no-pass", action="callback", help="Don't ask for a password", callback=self._set_no_password) - self._add_option("-k", "--kerberos", metavar="KERBEROS", - action="callback", type=str, - help="Use Kerberos", callback=self._set_kerberos) self._add_option("", "--ipaddress", metavar="IPADDRESS", action="callback", type=str, help="IP address of server", @@ -158,10 +167,18 @@ class CredentialsOptions(optparse.OptionGroup): action="callback", help="Use stored machine account password", callback=self._set_machine_pass) - self._add_option("--krb5-ccache", metavar="KRB5CCNAME", + 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", action="callback", type=str, help="Kerberos Credentials cache", callback=self._set_krb5_ccache) + + # LEGACY + self._add_option("-k", "--kerberos", metavar="KERBEROS", + action="callback", type=str, + help="DEPRECATED: Migrate to --use-kerberos", callback=self._set_kerberos_legacy) self.creds = Credentials() def _ensure_secure_proctitle(self, opt_str, secret_data, data_type="password"): @@ -244,6 +261,10 @@ class CredentialsOptions(optparse.OptionGroup): def _set_ipaddress(self, option, opt_str, arg, parser): self.ipaddress = arg + 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)) + def _set_kerberos(self, option, opt_str, arg, parser): self.creds.set_kerberos_state(parse_kerberos_arg(arg, opt_str)) @@ -251,6 +272,7 @@ class CredentialsOptions(optparse.OptionGroup): self.creds.set_bind_dn(arg) def _set_krb5_ccache(self, option, opt_str, arg, parser): + self.creds.set_kerberos_state(MUST_USE_KERBEROS) self.creds.set_named_ccache(arg) def get_credentials(self, lp, fallback_machine=False): @@ -298,9 +320,14 @@ class CredentialsOptionsDouble(CredentialsOptions): 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("--use-kerberos2", metavar="desired|required|off", + action="callback", type=str, + help="Use Kerberos authentication", callback=self._set_kerberos2) + + # LEGACY self.add_option("--kerberos2", metavar="KERBEROS2", action="callback", type=str, - help="Use Kerberos", callback=self._set_kerberos2) + help="Use Kerberos", callback=self._set_kerberos2_legacy) self.creds2 = Credentials() def _parse_username2(self, option, opt_str, arg, parser): @@ -313,6 +340,9 @@ class CredentialsOptionsDouble(CredentialsOptions): self.creds2.set_password(arg) self.no_pass2 = False + def _set_kerberos2_legacy(self, option, opt_str, arg, parser): + self.creds2.set_kerberos_state(parse_kerberos_arg(arg, opt_str)) + def _set_kerberos2(self, option, opt_str, arg, parser): self.creds2.set_kerberos_state(parse_kerberos_arg(arg, opt_str)) diff --git a/python/samba/tests/get_opt.py b/python/samba/tests/get_opt.py index 2aad954830b..60caf523a0f 100644 --- a/python/samba/tests/get_opt.py +++ b/python/samba/tests/get_opt.py @@ -24,6 +24,7 @@ from samba.getopt import ( AUTO_USE_KERBEROS, DONT_USE_KERBEROS, MUST_USE_KERBEROS, + parse_kerberos_arg_legacy, parse_kerberos_arg, ) import samba.tests @@ -31,26 +32,38 @@ import samba.tests class KerberosOptionTests(samba.tests.TestCase): - def test_parse_true(self): + def test_legacy_parse_true(self): self.assertEqual( - MUST_USE_KERBEROS, parse_kerberos_arg("yes", "--kerberos")) + MUST_USE_KERBEROS, parse_kerberos_arg_legacy("yes", "--kerberos")) self.assertEqual( - MUST_USE_KERBEROS, parse_kerberos_arg("true", "--kerberos")) + MUST_USE_KERBEROS, parse_kerberos_arg_legacy("true", "--kerberos")) self.assertEqual( - MUST_USE_KERBEROS, parse_kerberos_arg("1", "--kerberos")) + MUST_USE_KERBEROS, parse_kerberos_arg_legacy("1", "--kerberos")) - def test_parse_false(self): + def test_legacy_parse_false(self): self.assertEqual( - DONT_USE_KERBEROS, parse_kerberos_arg("no", "--kerberos")) + DONT_USE_KERBEROS, parse_kerberos_arg_legacy("no", "--kerberos")) self.assertEqual( - DONT_USE_KERBEROS, parse_kerberos_arg("false", "--kerberos")) + DONT_USE_KERBEROS, parse_kerberos_arg_legacy("false", "--kerberos")) self.assertEqual( - DONT_USE_KERBEROS, parse_kerberos_arg("0", "--kerberos")) + DONT_USE_KERBEROS, parse_kerberos_arg_legacy("0", "--kerberos")) - def test_parse_auto(self): + def test_legacy_parse_auto(self): self.assertEqual( - AUTO_USE_KERBEROS, parse_kerberos_arg("auto", "--kerberos")) + AUTO_USE_KERBEROS, parse_kerberos_arg_legacy("auto", "--kerberos")) + + def test_legacy_parse_invalid(self): + self.assertRaises(optparse.OptionValueError, + parse_kerberos_arg_legacy, "blah?", "--kerberos") + + def test_parse_valid(self): + self.assertEqual( + MUST_USE_KERBEROS, parse_kerberos_arg("required", "--use-kerberos")) + self.assertEqual( + AUTO_USE_KERBEROS, parse_kerberos_arg("desired", "--use-kerberos")) + self.assertEqual( + DONT_USE_KERBEROS, parse_kerberos_arg("off", "--use-kerberos")) def test_parse_invalid(self): self.assertRaises(optparse.OptionValueError, - parse_kerberos_arg, "blah?", "--kerberos") + parse_kerberos_arg, "wurst", "--use-kerberos") |
