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