Add interactive flag to setup/provision (also the default when no arguments are given).
[ab/samba.git/.git] / source4 / setup / provision
index b748dab33998cd49dd66ec8579c598ac09bc9032..882a92ad481ffdd72f133398f8462b2e64349b17 100755 (executable)
 
 import getopt
 import optparse
-import os, sys
+import os
+import sys
 
-import samba
-import param
+# Find right directory when running from source tree
+sys.path.insert(0, "bin/python")
 
-from auth import system_session
+import samba
+from samba.credentials import DONT_USE_KERBEROS
+from samba.auth import system_session
 import samba.getopt as options
+from samba import param
 from samba.provision import (provision, 
                              FILL_FULL, FILL_NT4SYNC,
                              FILL_DRS)
@@ -43,6 +47,7 @@ parser.add_option_group(sambaopts)
 parser.add_option_group(options.VersionOptions(parser))
 credopts = options.CredentialsOptions(parser)
 parser.add_option_group(credopts)
+parser.add_option("--interactive", help="Ask for names")
 parser.add_option("--setupdir", type="string", metavar="DIR", 
                help="directory with setup files")
 parser.add_option("--realm", type="string", metavar="REALM", help="set realm")
@@ -105,7 +110,10 @@ def message(text):
        if not opts.quiet:
                print text
 
-if opts.realm is None or opts.domain is None:
+if len(sys.argv) == 1:
+       opts.interactive = True
+
+if not opts.interactive and (opts.realm is None or opts.domain is None):
        if opts.realm is None:
                print >>sys.stderr, "No realm set"
        if opts.domain is None:
@@ -113,6 +121,26 @@ if opts.realm is None or opts.domain is None:
        parser.print_usage()
        sys.exit(1)
 
+if opts.interactive:
+       from getpass import getpass
+       import readline
+       import socket
+       def ask(prompt, default=None):
+               if default is not None:
+                       print "%s [%s]: " % (prompt,default),
+               else:
+                       print "%s: " % (prompt,),
+               return sys.stdin.readline().rstrip("\n") or default
+       opts.realm = ask("Realm", socket.gethostname().split(".", 1)[1])
+       opts.domain = ask("Domain", opts.realm)
+       opts.server_role = ask("Server Role (dc, member, standalone)", "dc")
+       for i in range(3):
+               opts.adminpass = getpass("Administrator password: ")
+               if not opts.adminpass:
+                       print >>sys.stderr, "Invalid administrator password."
+               else:
+                       break
+
 lp = sambaopts.get_loadparm()
 smbconf = lp.configfile()
 
@@ -128,6 +156,8 @@ else:
 
 creds = credopts.get_credentials(lp)
 
+creds.set_kerberos_state(DONT_USE_KERBEROS)
+
 setup_dir = opts.setupdir
 if setup_dir is None:
        setup_dir = "setup"