diff -r 5b0accae98a7 -r b6923b230915 schema2ldif --- a/schema2ldif Mon Oct 21 22:27:11 2013 +0200 +++ b/schema2ldif Mon Oct 21 22:44:49 2013 +0200 @@ -1,44 +1,49 @@ #! /usr/bin/perl # according # http://www.zytrax.com/books/ldap/ch6/slapd-config.html#use-schemas +# © 2013 Heiko Schlittermann + use 5.010; use strict; use warnings; +use English qw(-no_match_vars); use File::Temp; +our $VERSION = 0.01; + my $CORE = '/etc/ldap/schema/core.schema'; -die "$0: $CORE: $!\n" if not -r $CORE; +die "$PROGRAM_NAME: $CORE: $!\n" if not -r $CORE; +die "Need schema file\n" if not @ARGV == 1; +(my $name = $ARGV[0]) =~ s/\.schema$//xms; my $cf = File::Temp->new(); my $cd = File::Temp->newdir(); -$cf->print(<<_EOF); +# create a short temp config +$cf->print(<<"_EOF"); include $CORE -include ./exim.schema +include $ARGV[0] _EOF - -close $cf; - +close $cf or die "Can't close $cf: $!\n"; +# ... convert it system slaptest => ( -f => $cf ), ( -F => $cd ); -my $ldif; -open($ldif, '<', $_ = "$cd/cn=config/cn=schema/cn={1}exim.ldif") +# slurp the generated file +open(my $ldif, '<', $_ = "$cd/cn=config/cn=schema/cn={1}$name.ldif") or die "Can't open $_: $!\n"; - -$_ = do { local $/ = undef; <$ldif> }; +$_ = do { local $RS = undef; <$ldif> }; +close($ldif) or die "Can't close ldif generated ldif file: $!\n"; -s/\n\s+//gms; -s/^(?!(olc|dn|objectClass|cn)).*?\n//msg; -s/(?<=^dn: cn=){\d+}(\w+)/$1,cn=schema,cn=config/ms; -s/(?<=^cn: ){\d+}//msg; +# some modifications +s/\n\s+//xgms; +s/^(?!(?:olc|dn|objectClass|cn)).*?\n//xmsg; +s/(?<=^dn:\scn=){\d+}(\w+)/$1,cn=schema,cn=config/xms; +s/(?<=^cn:\s){\d+}//xmsg; -open($ldif, '>', 'exim.ldif') - or die "Can't open > exim.ldif: $!\n"; -$ldif->print(<<__); -# autogenerated by $0 -# do not edit, edit exim.schema instead +print <<"__", $_; +# autogenerated by $PROGRAM_NAME +# do not edit, edit $name.schema instead +# see https://ssl.schlittermann.de/hg/exim-ldap-schema __ -$ldif->print($_); -close $ldif;