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