xref: /netbsd-src/external/bsd/am-utils/dist/scripts/amd2ldif.in (revision a53f50b9b44dc9467ccc9c464999b1d1c509cb0c)
1*a53f50b9Schristos#!@PERL@
2*a53f50b9Schristos
3*a53f50b9Schristos$usage=<<EOU;
4*a53f50b9SchristosUsage $0 mapname base < mapfile >mapfile.ldif
5*a53f50b9Schristos
6*a53f50b9Schristosmapname: name of the amd map beeing converted to ldif
7*a53f50b9Schristosbase   : The LDAP search base. Do not forget the quotes!
8*a53f50b9Schristos
9*a53f50b9SchristosThis script should/could be used in a Makefile together
10*a53f50b9Schristoswith ldif2ldbm(8C) to automagically update the ldap
11*a53f50b9Schristosdatabases and restart slapd whenever a master copy of
12*a53f50b9Schristosthe maps have changed. Remember "cd /var/yp; make" ?
13*a53f50b9SchristosEOU
14*a53f50b9Schristos
15*a53f50b9Schristosmy $fmt = "%-12s: %s\n";
16*a53f50b9Schristosmy $tfmt = "%-15s: %s\n";
17*a53f50b9Schristosmy $mapname = $ARGV[0] or die $usage;
18*a53f50b9Schristosmy $base = $ARGV[1] or die $usage;
19*a53f50b9Schristos$time = time();
20*a53f50b9Schristos
21*a53f50b9Schristosprint "dn: cn=amdmap $mapname timestamp, $base\n";
22*a53f50b9Schristosprintf "$tfmt", "cn", "amdmap $mapname timestamp";
23*a53f50b9Schristosprintf "$tfmt", "objectClass", "amdmapTimestamp";
24*a53f50b9Schristosprintf "$tfmt", "amdmapName", "$mapname";
25*a53f50b9Schristosprintf "$tfmt", "amdmapTimestamp", $time;
26*a53f50b9Schristosprintf "$tfmt", "amdmapName", $mapname;
27*a53f50b9Schristosprint "\n";
28*a53f50b9Schristos
29*a53f50b9Schristosmy $line = "";
30*a53f50b9Schristosmy $done = 0;
31*a53f50b9Schristos
32*a53f50b9Schristoswhile (<STDIN>) {
33*a53f50b9Schristos  chomp;
34*a53f50b9Schristos  if (/\s*(.+)\\\s*/) {
35*a53f50b9Schristos    if ($line) {
36*a53f50b9Schristos      $line .= " ".$1;
37*a53f50b9Schristos    } else {
38*a53f50b9Schristos      $line = $1;
39*a53f50b9Schristos    }
40*a53f50b9Schristos    $done = 0;
41*a53f50b9Schristos  } else {
42*a53f50b9Schristos    s/^\s+//g;
43*a53f50b9Schristos    $line .= $_;
44*a53f50b9Schristos    $done = 1;
45*a53f50b9Schristos  }
46*a53f50b9Schristos  if ($done) {
47*a53f50b9Schristos    my @vals = split(/\s+/,$line);
48*a53f50b9Schristos    my $key = shift @vals;
49*a53f50b9Schristos    my $entry;
50*a53f50b9Schristos
51*a53f50b9Schristos    print "dn: cn=amdmap $mapname\[$key\], $base\n";
52*a53f50b9Schristos    printf "$fmt","cn","amdmap $mapname\[$key\]";
53*a53f50b9Schristos    printf "$fmt","objectClass", "amdmap";
54*a53f50b9Schristos    printf "$fmt","amdmapName", $mapname;
55*a53f50b9Schristos    printf "$fmt","amdmapKey", $key;
56*a53f50b9Schristos    printf "$fmt","amdmapValue", join(' ',@vals);
57*a53f50b9Schristos    print "\n";
58*a53f50b9Schristos    $line = ""; $done = 0;
59*a53f50b9Schristos  }
60*a53f50b9Schristos}
61