138494Sobrien#!@PERL@ 238494Sobrien 338494Sobrien$usage=<<EOU; 438494SobrienUsage $0 mapname base < mapfile >mapfile.ldif 538494Sobrien 638494Sobrienmapname: name of the amd map beeing converted to ldif 738494Sobrienbase : The LDAP search base. Do not forget the quotes! 838494Sobrien 938494SobrienThis script should/could be used in a Makefile together 1038494Sobrienwith ldif2ldbm(8C) to automagically update the ldap 1138494Sobriendatabases and restart slapd whenever a master copy of 1238494Sobrienthe maps have changed. Remember "cd /var/yp; make" ? 1338494SobrienEOU 1438494Sobrien 1538494Sobrienmy $fmt = "%-12s: %s\n"; 1638494Sobrienmy $tfmt = "%-15s: %s\n"; 1738494Sobrienmy $mapname = $ARGV[0] or die $usage; 1838494Sobrienmy $base = $ARGV[1] or die $usage; 1938494Sobrien$time = time(); 2038494Sobrien 21174294Sobrienprint "dn: cn=amdmap $mapname timestamp, $base\n"; 22174294Sobrienprintf "$tfmt", "cn", "amdmap $mapname timestamp"; 2338494Sobrienprintf "$tfmt", "objectClass", "amdmapTimestamp"; 24174294Sobrienprintf "$tfmt", "amdmapName", "$mapname"; 2538494Sobrienprintf "$tfmt", "amdmapTimestamp", $time; 26174294Sobrienprintf "$tfmt", "amdmapName", $mapname; 2738494Sobrienprint "\n"; 2838494Sobrien 2938494Sobrienmy $line = ""; 3038494Sobrienmy $done = 0; 3138494Sobrien 3238494Sobrienwhile (<STDIN>) { 3338494Sobrien chomp; 3438494Sobrien if (/\s*(.+)\\\s*/) { 3538494Sobrien if ($line) { 3638494Sobrien $line .= " ".$1; 3738494Sobrien } else { 3838494Sobrien $line = $1; 3938494Sobrien } 4038494Sobrien $done = 0; 4138494Sobrien } else { 4238494Sobrien s/^\s+//g; 4338494Sobrien $line .= $_; 4438494Sobrien $done = 1; 4538494Sobrien } 4638494Sobrien if ($done) { 4738494Sobrien my @vals = split(/\s+/,$line); 4838494Sobrien my $key = shift @vals; 4938494Sobrien my $entry; 5038494Sobrien 5138494Sobrien print "dn: cn=amdmap $mapname\[$key\], $base\n"; 5238494Sobrien printf "$fmt","cn","amdmap $mapname\[$key\]"; 5338494Sobrien printf "$fmt","objectClass", "amdmap"; 5438494Sobrien printf "$fmt","amdmapName", $mapname; 5538494Sobrien printf "$fmt","amdmapKey", $key; 5638494Sobrien printf "$fmt","amdmapValue", join(' ',@vals); 5738494Sobrien print "\n"; 5838494Sobrien $line = ""; $done = 0; 5938494Sobrien } 6038494Sobrien} 61