#!@PERL@ $usage=<<EOU; Usage $0 mapname base < mapfile >mapfile.ldif mapname: name of the amd map beeing converted to ldif base : The LDAP search base. Do not forget the quotes! This script should/could be used in a Makefile together with ldif2ldbm(8C) to automagically update the ldap databases and restart slapd whenever a master copy of the maps have changed. Remember "cd /var/yp; make" ? EOU my $fmt = "%-12s: %s\n"; my $tfmt = "%-15s: %s\n"; my $mapname = $ARGV[0] or die $usage; my $base = $ARGV[1] or die $usage; $time = time(); print "dn: cn=amdmap $mapname timestamp, $base\n"; printf "$tfmt", "cn", "amdmap $mapname timestamp"; printf "$tfmt", "objectClass", "amdmapTimestamp"; printf "$tfmt", "amdmapName", "$mapname"; printf "$tfmt", "amdmapTimestamp", $time; printf "$tfmt", "amdmapName", $mapname; print "\n"; my $line = ""; my $done = 0; while (<STDIN>) { chomp; if (/\s*(.+)\\\s*/) { if ($line) { $line .= " ".$1; } else { $line = $1; } $done = 0; } else { s/^\s+//g; $line .= $_; $done = 1; } if ($done) { my @vals = split(/\s+/,$line); my $key = shift @vals; my $entry; print "dn: cn=amdmap $mapname\[$key\], $base\n"; printf "$fmt","cn","amdmap $mapname\[$key\]"; printf "$fmt","objectClass", "amdmap"; printf "$fmt","amdmapName", $mapname; printf "$fmt","amdmapKey", $key; printf "$fmt","amdmapValue", join(' ',@vals); print "\n"; $line = ""; $done = 0; } } |