d99cb6906c862ed8aef9e8e303f0aec23920eb61
[sfrench/samba-autobuild/.git] / source4 / script / provision.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4
5 my $hostname = `hostname`;
6 chomp $hostname;
7 my $realm = "bludom.tridgell.net";
8 my $domain = "BLUDOM";
9 my $dnsname = "$hostname.$realm";
10
11 my $basedn = "DC=" . join(",DC=", split(/\./, $realm));
12
13 # return the current NTTIME as an integer
14 sub nttime()
15 {
16         my $t = time();
17         $t += (369.0*365.25*24*60*60-(3.0*24*60*60+6.0*60*60));
18         $t *= 1.0e7;
19         return sprintf("%lld", $t);
20 }
21
22 # generate a random guid. Not a good algorithm.
23 sub randguid()
24 {
25         my $r1 = int(rand(2**32));
26         my $r2 = int(rand(2**16));
27         my $r3 = int(rand(2**16));
28         my $r4 = int(rand(2**16));
29         my $r5 = int(rand(2**32));
30         my $r6 = int(rand(2**16));
31         return sprintf("%08x-%04x-%04x-%04x-%08x%04x", $r1, $r2, $r3, $r4, $r5, $r6);
32 }
33
34 my $domainguid = randguid();
35
36 sub randsid()
37 {
38         return sprintf("S-1-5-21-%d-%d-%d", 
39                        int(rand(10**8)), int(rand(10**8)), int(rand(10**8)));
40 }
41
42 my $domainsid = randsid();
43
44 sub ldaptime()
45 {
46         my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) =  gmtime(time);
47         return sprintf "%04u%02u%02u%02u%02u%02u.0Z",
48         $year+1900, $mon+1, $mday, $hour, $min, $sec;
49 }
50
51 #######################
52 # substitute a single variable
53 sub substitute($)
54 {
55         my $var = shift;
56
57         if ($var eq "BASEDN") {
58                 return $basedn;
59         }
60
61         if ($var eq "DOMAINSID") {
62                 return $domainsid;
63         }
64
65         if ($var eq "DOMAIN") {
66                 return $domain;
67         }
68
69         if ($var eq "REALM") {
70                 return $realm;
71         }
72
73         if ($var eq "HOSTNAME") {
74                 return $hostname;
75         }
76
77         if ($var eq "DNSNAME") {
78                 return $dnsname;
79         }
80
81         if ($var eq "LDAPTIME") {
82                 return ldaptime();
83         }
84
85         if ($var eq "NEWGUID") {
86                 return randguid();
87         }
88
89         if ($var eq "NTTIME") {
90                 return "" . nttime();
91         }
92
93         die "ERROR: Uknown substitution variable $var\n";
94 }
95
96 #####################################################################
97 # read a file into a string
98 sub FileLoad($)
99 {
100     my($filename) = shift;
101     local(*INPUTFILE);
102     open(INPUTFILE, $filename) || return undef;
103     my($saved_delim) = $/;
104     undef $/;
105     my($data) = <INPUTFILE>;
106     close(INPUTFILE);
107     $/ = $saved_delim;
108     return $data;
109 }
110
111
112 my $data = FileLoad("provision.ldif") || die "Unable to load provision.ldif\n";
113
114 my $res = "";
115
116 while ($data =~ /(.*?)\$\{(\w*)\}(.*)/s) {
117         my $sub = substitute($2);
118         $res .= "$1$sub";
119         $data = $3;
120 }
121
122 print $res . $data;