1 |
dpavlin |
98 |
#!/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; |