Fix and test python scripts and kerberos
[ab/samba.git/.git] / source4 / scripting / python / samba / getopt.py
index c0e70530626eec5e1003dc82503ff613fe160eed..82cb004b621eebd263a17f944a075d92b866d113 100644 (file)
 #
 
 import optparse
-from credentials import Credentials
+from credentials import Credentials, AUTO_USE_KERBEROS, DONT_USE_KERBEROS, MUST_USE_KERBEROS
 
 class SambaOptions(optparse.OptionGroup):
     def __init__(self, parser):
         optparse.OptionGroup.__init__(self, parser, "Samba Common Options")
-        self.add_option("-s", "--configfile", type="string", metavar="FILE",
-                        help="Configuration file")
+        self.add_option("-s", "--configfile", action="callback",
+                        type=str, metavar="FILE", help="Configuration file", 
+                        callback=self._load_configfile)
+        self._configfile = None
 
+    def get_loadparm_path(self):
+        return self._configfile
+
+    def _load_configfile(self, option, opt_str, arg, parser):
+        self._configfile = arg
+
+    def get_loadparm(self):
+        import param
+        lp = param.LoadParm()
+        if self._configfile is None:
+            lp.load_default()
+        else:
+            lp.load(self._configfile)
+        return lp
 
 class VersionOptions(optparse.OptionGroup):
     def __init__(self, parser):
@@ -34,31 +50,46 @@ class VersionOptions(optparse.OptionGroup):
 
 class CredentialsOptions(optparse.OptionGroup):
     def __init__(self, parser):
+        self.no_pass = False
         optparse.OptionGroup.__init__(self, parser, "Credentials Options")
         self.add_option("--simple-bind-dn", metavar="DN", action="callback",
-                        callback=self.set_simple_bind_dn, type=str,
+                        callback=self._set_simple_bind_dn, type=str,
                         help="DN to use for a simple bind")
         self.add_option("--password", metavar="PASSWORD", action="callback",
-                        help="Password", type=str, callback=self.set_password)
+                        help="Password", type=str, callback=self._set_password)
         self.add_option("-U", "--username", metavar="USERNAME", 
                         action="callback", type=str,
-                        help="Username", callback=self.parse_username)
+                        help="Username", callback=self._parse_username)
         self.add_option("-W", "--workgroup", metavar="WORKGROUP", 
                         action="callback", type=str,
-                        help="Workgroup", callback=self.parse_workgroup)
+                        help="Workgroup", callback=self._parse_workgroup)
+        self.add_option("-N", "--no-pass", action="store_true",
+                        help="Don't ask for a password")
+        self.add_option("-k", "--kerberos", metavar="KERBEROS", 
+                        action="callback", type=str,
+                        help="Use Kerberos", callback=self._set_kerberos)
         self.creds = Credentials()
 
-    def parse_username(self, option, opt_str, arg, parser):
+    def _parse_username(self, option, opt_str, arg, parser):
         self.creds.parse_string(arg)
 
-    def parse_workgroup(self, option, opt_str, arg, parser):
+    def _parse_workgroup(self, option, opt_str, arg, parser):
         self.creds.set_domain(arg)
 
-    def set_password(self, option, opt_str, arg, parser):
+    def _set_password(self, option, opt_str, arg, parser):
         self.creds.set_password(arg)
 
-    def set_simple_bind_dn(self, option, opt_str, arg, parser):
+    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)
+
+    def _set_simple_bind_dn(self, option, opt_str, arg, parser):
         self.creds.set_bind_dn(arg)
 
-    def get_credentials(self):
+    def get_credentials(self, lp):
+        self.creds.guess(lp)
+        if not self.no_pass:
+            self.creds.set_cmdline_callbacks()
         return self.creds