r13239: Silly little patch: make the order of declaration match the order of use.
[ira/wip.git] / source / setup / provision
1 #!/bin/sh
2 exec smbscript "$0" ${1+"$@"}
3 /*
4         provision a Samba4 server
5         Copyright Andrew Tridgell 2005
6         Released under the GNU GPL v2 or later
7 */
8
9 options = GetOptions(ARGV,
10                 "POPT_AUTOHELP",
11                 "POPT_COMMON_SAMBA",
12                 "POPT_COMMON_VERSION",
13                 "POPT_COMMON_CREDENTIALS",
14                 'realm=s',
15                 'domain=s',
16                 'domain-guid=s',
17                 'domain-sid=s',
18                 'host-name=s',
19                 'host-ip=s',
20                 'host-guid=s',
21                 'invocationid=s',
22                 'adminpass=s',
23                 'krbtgtpass=s',
24                 'machinepass=s',
25                 'root=s',
26                 'nobody=s',
27                 'nogroup=s',
28                 'wheel=s',
29                 'users=s',
30                 'quiet',
31                 'blank');
32
33 if (options == undefined) {
34    println("Failed to parse options");
35    return -1;
36 }
37
38 libinclude("base.js");
39 libinclude("provision.js");
40
41 /*
42   print a message if quiet is not set
43 */
44 function message() 
45 {
46         if (options["quiet"] == undefined) {
47                 print(vsprintf(arguments));
48         }
49 }
50
51 /*
52  show some help
53 */
54 function ShowHelp()
55 {
56         print("
57 Samba4 provisioning
58
59 provision [options]
60  --realm        REALM           set realm
61  --domain       DOMAIN          set domain
62  --domain-guid  GUID            set domainguid (otherwise random)
63  --domain-sid   SID             set domainsid (otherwise random)
64  --host-name    HOSTNAME        set hostname
65  --host-ip      IPADDRESS       set ipaddress
66  --host-guid    GUID            set hostguid (otherwise random)
67  --invocationid GUID            set invocationid (otherwise random)
68  --adminpass    PASSWORD        choose admin password (otherwise random)
69  --krbtgtpass   PASSWORD        choose krbtgt password (otherwise random)
70  --machinepass  PASSWORD        choose machine password (otherwise random)
71  --root         USERNAME        choose 'root' unix username
72  --nobody       USERNAME        choose 'nobody' user
73  --nogroup      GROUPNAME       choose 'nogroup' group
74  --wheel        GROUPNAME       choose 'wheel' privileged group
75  --users        GROUPNAME       choose 'users' group
76  --quiet                        Be quiet
77  --blank                        do not add users or groups, just the structure
78
79 You must provide at least a realm and domain
80
81 ");
82         exit(1);
83 }
84
85 if (options['host-name'] == undefined) {
86         options['host-name'] = hostname();
87 }
88
89 /*
90    main program
91 */
92 if (options["realm"] == undefined ||
93     options["domain"] == undefined ||
94     options["host-name"] == undefined) {
95         ShowHelp();
96 }
97
98 /* cope with an initially blank smb.conf */
99 var lp = loadparm_init();
100 lp.set("realm", options.realm);
101 lp.set("workgroup", options.domain);
102 lp.reload();
103
104 var subobj = provision_guess();
105 for (r in options) {
106         var key = strupper(join("", split("-", r)));
107         subobj[key] = options[r];
108 }
109
110 var blank = (options["blank"] != undefined);
111
112 if (!provision_validate(subobj, message)) {
113         return -1;
114 }
115
116 var system_session = system_session();
117 var creds = options.get_credentials();
118 var paths = provision_default_paths(subobj);
119 message("Provisioning for %s in realm %s\n", subobj.DOMAIN, subobj.REALM);
120 message("Using administrator password: %s\n", subobj.ADMINPASS);
121 provision(subobj, message, blank, paths, system_session, creds);
122 provision_dns(subobj, message, paths, system_session, creds);
123 message("All OK\n");
124 return 0;