All, I need to convert LDIF files that were generated by a broken ldapsearch utility. Below is are the requested formats:
From broken LDIF:
uid=HAMonitor1,ou=People,o=test.com
userPassword={SHA}[deleted]
uid=HAMonitor1
givenName=HA
objectClass=top
objectClass=person
objectClass=organizationalPerson
objectClass=inetorgperson
sn=Monitor
cn=HA Monitor
uid=HAMonitor2,ou=People,o=test.com
uid=HAMonitor2
givenName=HA
objectClass=top
objectClass=person
objectClass=organizationalPerson
objectClass=inetorgperson
sn=Monitor
cn=HA Monitor
userPassword={SHA} [deleted]
To good LDIF:
dn: uid=HAMonitor1,ou=People,o=test.com
userPassword: {SHA}[deleted]
uid: HAMonitor1
givenName: HA
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass:inetorgperson
sn: Monitor
cn: HA Monitor
dn: uid=HAMonitor2,ou=People,o=test.com
uid: HAMonitor2
givenName: HA
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
sn: Monitor
cn: HA Monitor
userPassword: {SHA} [deleted]
Here's my initial code that works but is very ugly. Can you please review, comment and perhaps suggest a more elegant approach. Thanks,
Andras
#!/usr/bin/perl
$prev_line = "\n";
while (<>) {
chop;
$this = $_;
# print "DEBUG: original line: $this\n";
if ($prev_line =~ m/^\s+$/) {
# don't do anything
# print "DEBUG: empty line\n";
$this = "dn: $this";
} else {
# replace first token = to first token:
# print "DEBUG: full line\n";
($firsttoken, $remainder) = split (/=/, $this, 2);
$this="$firsttoken: $remainder";
}
$prev_line = $_;
if ($_ =~ m/^$/ ) {
print "$_\n";
$prev_line = "\n";
} else {
print "$this\n";
}
}