r23177: Add in a new provision-backend script. This helps set up the OpenLDAP or...
[samba.git] / source4 / setup / provision-backend
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                 'host-name=s',
16                 'ldap-manager-pass=s',
17                 'root=s',
18                 'quiet',
19                 'ldap-backend-type=s');
20
21 if (options == undefined) {
22    println("Failed to parse options");
23    return -1;
24 }
25
26 sys = sys_init();
27
28 libinclude("base.js");
29 libinclude("provision.js");
30
31 /*
32   print a message if quiet is not set
33 */
34 function message()
35 {
36         if (options["quiet"] == undefined) {
37                 print(vsprintf(arguments));
38         }
39 }
40
41 /*
42  show some help
43 */
44 function ShowHelp()
45 {
46         print("
47 Samba4 provisioning
48
49 provision [options]
50  --realm        REALM           set realm
51  --host-name    HOSTNAME        set hostname
52  --ldap-manager-pass    PASSWORD        choose LDAP Manager password (otherwise random)
53  --root         USERNAME        choose 'root' unix username
54  --quiet                        Be quiet
55  --ldap-backend-type LDAPSERVER     Select either \"openldap\" or \"fedora-ds\" as a target to configure
56  --ldap-module= MODULE          LDB mapping module to use for the LDAP backend
57 You must provide at least a realm and ldap-backend-type
58
59 ");
60         exit(1);
61 }
62
63 if (options['host-name'] == undefined) {
64         options['host-name'] = hostname();
65 }
66
67 /*
68    main program
69 */
70 if (options["realm"] == undefined ||
71     options["ldap-backend-type"] == undefined ||
72     options["host-name"] == undefined) {
73         ShowHelp();
74 }
75
76 /* cope with an initially blank smb.conf */
77 var lp = loadparm_init();
78 lp.set("realm", options.realm);
79 lp.reload();
80
81 var subobj = provision_guess();
82 for (r in options) {
83         var key = strupper(join("", split("-", r)));
84         subobj[key] = options[r];
85 }
86
87 var ldapbackend = (options["ldap-backend-type"] != undefined);
88
89 var paths = provision_default_paths(subobj);
90 provision_fix_subobj(subobj, message, paths);
91 message("Provisioning LDAP backend for %s in realm %s into %s\n", subobj.HOSTNAME, subobj.REALM, subobj.LDAPDIR);
92 message("Using LDAP Manager password: %s\n", subobj.LDAPMANAGERPASS);
93
94 var tmp_schema_ldb = subobj.LDAPDIR + "/schema-tmp.ldb";
95 sys.mkdir(subobj.LDAPDIR, 0700);
96
97 provision_schema(subobj, message, tmp_schema_ldb, paths);
98
99 var mapping;
100 var ext;
101 if (options["ldap-backend-type"] == "fedora-ds") {
102         mapping = "schema-map-fedora-ds-1.0";
103         ext = "ldif";
104         setup_file("fedorads.inf", message, subobj.LDAPDIR + "/fedorads.inf", subobj);
105         setup_file("fedorads-partitions.ldif", message, subobj.LDAPDIR + "/fedorads-partitions.ldif", subobj);
106 } else if (options["ldap-backend-type"] == "openldap") {
107         mapping = "schema-map-openldap-2.3";
108         ext = "schema";
109         setup_file("slapd.conf", message, subobj.LDAPDIR + "/slapd.conf", subobj);
110 }
111 message("ad2oLschema --option=convert:target=" + options["ldap-backend-type"] + " -I " + lp.get("setup directory") + "/" + mapping + " -H tdb://" + tmp_schema_ldb + " -O " + subobj.LDAPDIR + "/backend-schema." + ext + "\n");
112
113 message("All OK\n");
114 return 0;