mark sockets as binary so we don't corrupt encoding
[virtual-ldap] / bin / ldap-rewrite.pl
index 931eebd..4e2d55e 100755 (executable)
@@ -84,13 +84,21 @@ sub log_response {
                my $uid = $response->{protocolOp}->{searchResEntry}->{objectName};
                warn "## SEARCH $uid";
 
-if(0) {
+               my @attrs;
+
                map {
-                       if ( $_->{type} eq 'postalAddress' ) {
-                               $_->{vals} = [ 'foobar' ];
+                       if ( $_->{type} eq 'hrEduPersonUniqueNumber' ) {
+                               foreach my $val ( @{ $_->{vals} } ) {
+                                       next if $val !~ m{.+:.+};
+                                       my ( $n, $v ) = split(/\s*:\s*/, $val );
+                                       push @attrs, { type => $_->{type} . '_' . $n, vals => [ $v ] };
+                               }
                        }
                } @{ $response->{protocolOp}->{searchResEntry}->{attributes} };
-}
+
+               warn "# ++ attrs ",dump( @attrs );
+
+               push @{ $response->{protocolOp}->{searchResEntry}->{attributes} }, $_ foreach @attrs;
 
                my $path = $config->{yaml_dir} . "$uid.yaml";
                if ( -e $path ) {
@@ -100,12 +108,11 @@ if(0) {
                        foreach my $type ( keys %$data ) {
 
                                my $vals = $data->{$type};
-                               $vals =~ s{#\s*$}{};
-                               
-                               my @vals = split(/\s*#\s*/, $vals);
 
-                               push @{ $response->{protocolOp}->{searchResEntry}->{attributes} },
-                                       { type => $config->{overlay_prefix} . $type, vals => [ @vals ] };
+                               push @{ $response->{protocolOp}->{searchResEntry}->{attributes} }, {
+                                       type => $config->{overlay_prefix} . $type,
+                                       vals => ref($vals) eq 'ARRAY' ? $vals : [ $vals ],
+                               };
                        }
                }
 
@@ -124,6 +131,10 @@ sub run_proxy {
        die "Could not create listener socket: $!\n" unless $listenersock;
        die "Could not create connection to server: $!\n" unless $targetsock;
 
+       # mark sockets as binary
+       binmode( $listenersock );
+       binmode( $targetsock );
+
        my $sel = IO::Select->new($listenersock);
        my %Handlers;
        while (my @ready = $sel->can_read) {