1 |
#!/usr/bin/perl |
2 |
use warnings; |
3 |
use strict; |
4 |
|
5 |
# schema2model.pl - convert LDAP schema file into jifty model |
6 |
# |
7 |
# 04/30/08 20:55:21 CEST Dobrica Pavlinusic <dpavlin@rot13.org> |
8 |
|
9 |
use Net::LDAP::Schema; |
10 |
use Data::Dump qw/dump/; |
11 |
|
12 |
my ( $path, $objectClass ) = @ARGV; |
13 |
|
14 |
die "usage: $0 path/to/schema.ldif inetOrgPerson\n" unless $path && $objectClass; |
15 |
|
16 |
my $schema = Net::LDAP::Schema->new; |
17 |
$schema->parse ( $path ) or die $schema->error; |
18 |
|
19 |
sub entry { |
20 |
my ( $e, $add ) = @_; |
21 |
my $out = qq/\tcolumn $_->{name} =>\n\t\tlabel is _('$_->{desc}')/; |
22 |
$out .= qq/,\n\t\t# single-value/ if $_->{'single-value'}; |
23 |
$out .= qq/,\n\t\tmax_length is $_->{max_length}/ if $_->{'max_length'}; |
24 |
$out .= qq/,\n\t\t$add/ if $add; |
25 |
$out .= qq/;\n\n/; |
26 |
return $out; |
27 |
} |
28 |
|
29 |
my $model = qq/\t# $objectClass super: / . join(' ', $schema->superclass($objectClass)). qq/\n\n/; |
30 |
|
31 |
$model .= qq/\t# $objectClass must:\n\n/; |
32 |
|
33 |
map { |
34 |
warn "# $objectClass must: ",dump( $_ ); |
35 |
$model .= entry( $_, 'is mandatory' ); |
36 |
} $schema->must( $objectClass ); |
37 |
|
38 |
$model .= qq/\t# $objectClass may:\n\n/; |
39 |
|
40 |
map { |
41 |
warn "# $objectClass may: ",dump( $_ ); |
42 |
$model .= entry( $_ ); |
43 |
} $schema->may( $objectClass ); |
44 |
|
45 |
print $model; |