/[virtual-ldap]/bin/ldap-rewrite.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /bin/ldap-rewrite.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 10 by dpavlin, Sun Mar 15 19:48:21 2009 UTC revision 22 by dpavlin, Mon Mar 16 10:12:57 2009 UTC
# Line 9  use warnings; Line 9  use warnings;
9    
10  use IO::Select;  use IO::Select;
11  use IO::Socket;  use IO::Socket;
12    use IO::Socket::SSL;
13  use warnings;  use warnings;
14  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
15  use Convert::ASN1 qw(asn_read);  use Convert::ASN1 qw(asn_read);
# Line 17  our $VERSION = '0.2'; Line 18  our $VERSION = '0.2';
18  use fields qw(socket target);  use fields qw(socket target);
19  use YAML qw/LoadFile/;  use YAML qw/LoadFile/;
20    
21    my $config = {
22            yaml_dir => './yaml/',
23            listen => 'localhost:1389',
24            upstream_ldap => 'ldap.ffzg.hr',
25            upstream_ssl => 1,
26            overlay_prefix => 'ffzg-',
27    
28    };
29    
30    if ( ! -d $config->{yaml_dir} ) {
31            warn "DISABLE ", $config->{yaml_dir}," data overlay";
32    }
33    
34    warn "# config = ",dump( $config );
35    
36  sub handle {  sub handle {
37          my $clientsocket=shift;          my $clientsocket=shift;
38          my $serversocket=shift;          my $serversocket=shift;
# Line 68  sub log_response { Line 84  sub log_response {
84                  my $uid = $response->{protocolOp}->{searchResEntry}->{objectName};                  my $uid = $response->{protocolOp}->{searchResEntry}->{objectName};
85                  warn "## SEARCH $uid";                  warn "## SEARCH $uid";
86    
87  if(0) {                  my @attrs;
88    
89                  map {                  map {
90                          if ( $_->{type} eq 'postalAddress' ) {                          if ( $_->{type} eq 'hrEduPersonUniqueNumber' ) {
91                                  $_->{vals} = [ 'foobar' ];                                  foreach my $val ( @{ $_->{vals} } ) {
92                                            next if $val !~ m{.+:.+};
93                                            my ( $n, $v ) = split(/\s*:\s*/, $val );
94                                            push @attrs, { type => $_->{type} . '_' . $n, vals => [ $v ] };
95                                    }
96                          }                          }
97                  } @{ $response->{protocolOp}->{searchResEntry}->{attributes} };                  } @{ $response->{protocolOp}->{searchResEntry}->{attributes} };
 }  
98    
99                  my $path = "yaml/$uid.yaml";                  warn "# ++ attrs ",dump( @attrs );
100    
101                    push @{ $response->{protocolOp}->{searchResEntry}->{attributes} }, $_ foreach @attrs;
102    
103                    my $path = $config->{yaml_dir} . "$uid.yaml";
104                  if ( -e $path ) {                  if ( -e $path ) {
105                          my $data = LoadFile($path);                          my $data = LoadFile($path);
106                          warn "# yaml = ",dump($data);                          warn "# yaml = ",dump($data);
# Line 84  if(0) { Line 108  if(0) {
108                          foreach my $type ( keys %$data ) {                          foreach my $type ( keys %$data ) {
109    
110                                  my $vals = $data->{$type};                                  my $vals = $data->{$type};
                                 $vals =~ s{#\s*$}{};  
                                   
                                 my @vals = split(/\s*#\s*/, $vals);  
111    
112                                  push @{ $response->{protocolOp}->{searchResEntry}->{attributes} },                                  push @{ $response->{protocolOp}->{searchResEntry}->{attributes} }, {
113                                          { type => "ffzg-$type", vals => [ @vals ] };                                          type => $config->{overlay_prefix} . $type,
114                                            vals => ref($vals) eq 'ARRAY' ? $vals : [ $vals ],
115                                    };
116                          }                          }
117                  }                  }
118    
# Line 134  my $listenersock = IO::Socket::INET->new Line 157  my $listenersock = IO::Socket::INET->new
157          Listen => 5,          Listen => 5,
158          Proto => 'tcp',          Proto => 'tcp',
159          Reuse => 1,          Reuse => 1,
160          LocalPort => 1389          LocalAddr => $config->{listen},
161  );  );
162    
163    
164  my $targetsock = new IO::Socket::INET (  my $targetsock = $config->{upstream_ssl}
165          Proto => 'tcp',          ? IO::Socket::INET->new(
166          PeerAddr => 'ldap.ffzg.hr',                  Proto => 'tcp',
167          PeerPort => 389,                  PeerAddr => $config->{upstream_ldap},
168  );                  PeerPort => 389,
169            )
170            : IO::Socket::SSL->new( $config->{upstream_ldap} . ':ldaps')
171            ;
172    
173  run_proxy($listenersock,$targetsock);  run_proxy($listenersock,$targetsock);
174    

Legend:
Removed from v.10  
changed lines
  Added in v.22

  ViewVC Help
Powered by ViewVC 1.1.26