> The samba.schema file was converted with a tool that doesn't avoid > the "overly picky schema parsing" bug (#170791). You can try the > new schema conversion script on the website to see if it handles > this, or for samba.schema the workaround > > ./ol-schema-migrate.pl samba.schema | grep -v DESC > 61samba.ldif Jeez, I spent half a day tracking down that bug on Monday. Here are some improvements to your migration script so that it handles objectIdentifier macro expansion http://www.openldap.org/doc/admin22/schema.html#OID%20Macros and aliases in names. If the email mangles the patch, it's also at http://kevin.goess.org/software/ol-schema-migrate.diff --- ol-schema-migrate.pl.old 2005-12-07 08:53:49.375263056 -0800 +++ ol-schema-migrate.pl 2005-12-07 09:40:12.609147192 -0800 @@ -18,12 +18,29 @@ my $oc = 0; my $at_string; my $oc_string; +my (%objectidentifier, $objectidentifier_re); #macro replacement for (@lines) { next if (/^\s*\#/); # skip comments + if (/^\s*objectidentifier\s+(\S+)\s+(\S+)/) + { + my $macroname = $1; + my $subsval = $2; + + #do the expansion for this one + $subsval =~ s/($objectidentifier_re):/$objectidentifier{$1}./; + + $objectidentifier{$macroname} = $subsval; + + $objectidentifier_re = join('|',keys(%objectidentifier)); + + next; + } + + # going through the loop again if ($at) { @@ -86,8 +103,8 @@ s/\t/ /g; # remove embedded tabs s/\$ +/\$ /g; # remove multiple spaces after the $ sign - my $oid = $1 if ( /(\d.+? )/ ); - my $name = $1 if ( /(NAME +'.+?')/ ); + my $oid = $1 if ( /attributeTypes: \( ([\w:]+) / ); + my $name = $1 if ( /(NAME +\(?'.+?'\)?)/ ); my $desc = $1 if ( /(DESC +'.+?')/ ); my $obsolete = $1 if ( /(OBSOLETE)/ ); my $sup = $1 if ( /(SUP .+?) / ); @@ -97,6 +114,11 @@ my $syntax = $1 if ( /(SYNTAX .+?) / ); my $single = $1 if ( /(SINGLE-VALUE)/ ); + #macro expansion + $oid =~ s/\b($objectidentifier_re)(:)?/$objectidentifier{$1}.($2?'.':'')/e; + $syntax =~ s/\b($objectidentifier_re)(:)?/$objectidentifier{$1}. ($2?'.':'')/e; + + print "attributeTypes: (\n"; print " $oid\n"; print " $name\n"; @@ -123,7 +145,7 @@ # # OID; NAME; DESC; SUP; (STRUCTURAL|AUXILIARY|ABSTRACT); MUST; MAY # - my $oid = $1 if ( /(\d.+?) / ); + my $oid = $1 if ( /objectClasses: \( ([\w:]+) / ); my $name = $1 if ( /(NAME +'.+?')/ ); my $desc = $1 if ( /(DESC +'.+?')/ ); my $sup = $1 if ( /(SUP .+?) / ); @@ -131,6 +153,9 @@ my $must = $1 if ( /(MUST +\(.+?\))/ ); my $may = $1 if ( /(MAY +\(.+?\))/ ); + #macro expansion + $oid =~ s/\b($objectidentifier_re)(:)?/$objectidentifier{$1}.($2?'.':'')/e; + print "objectClasses: (\n"; print " $oid\n"; print " $name\n"; -- Kevin M. Goess (415) 277-2079 Ensenda, Inc.