X-Git-Url: http://git.rot13.org/?p=virtual-ldap;a=blobdiff_plain;f=bin%2Fldap-rewrite.pl;h=9c57242be9c6ceec70908ec6c97443b5cc070804;hp=4e2d55e672cae29a74cb75594fa808ceede97578;hb=b3ce3ad0c105c022cc9b048a5f93c7eaaa0f4931;hpb=1372374f7304912d81029a3a3b3f0a935e9b9fa0 diff --git a/bin/ldap-rewrite.pl b/bin/ldap-rewrite.pl index 4e2d55e..9c57242 100755 --- a/bin/ldap-rewrite.pl +++ b/bin/ldap-rewrite.pl @@ -20,13 +20,30 @@ use YAML qw/LoadFile/; my $config = { yaml_dir => './yaml/', - listen => 'localhost:1389', + listen => shift @ARGV || 'localhost:1389', upstream_ldap => 'ldap.ffzg.hr', upstream_ssl => 1, overlay_prefix => 'ffzg-', + log_file => 'log', }; +my $log_fh; + +sub log { + if ( ! $log_fh ) { + open($log_fh, '>>', $config->{log_file}) || die "can't open ", $config->{log_file},": $!"; + print $log_fh "# " . time; + } + $log_fh->autoflush(1); + print $log_fh join("\n", @_),"\n"; +} + +BEGIN { + $SIG{'__WARN__'} = sub { warn @_; main::log(@_); } +} + + if ( ! -d $config->{yaml_dir} ) { warn "DISABLE ", $config->{yaml_dir}," data overlay"; } @@ -63,26 +80,26 @@ sub handle { sub log_request { my $pdu=shift; - print '-' x 80,"\n"; - print "Request ASN 1:\n"; - Convert::ASN1::asn_hexdump(\*STDOUT,$pdu); - print "Request Perl:\n"; +# print '-' x 80,"\n"; +# print "Request ASN 1:\n"; +# Convert::ASN1::asn_hexdump(\*STDOUT,$pdu); +# print "Request Perl:\n"; my $request = $LDAPRequest->decode($pdu); - print dump($request); + warn "## request = ",dump($request); } sub log_response { my $pdu=shift; - print '-' x 80,"\n"; - print "Response ASN 1:\n"; - Convert::ASN1::asn_hexdump(\*STDOUT,$pdu); - print "Response Perl:\n"; +# print '-' x 80,"\n"; +# print "Response ASN 1:\n"; +# Convert::ASN1::asn_hexdump(\*STDOUT,$pdu); +# print "Response Perl:\n"; my $response = $LDAPResponse->decode($pdu); if ( defined $response->{protocolOp}->{searchResEntry} ) { my $uid = $response->{protocolOp}->{searchResEntry}->{objectName}; - warn "## SEARCH $uid"; + warn "## objectName $uid"; my @attrs; @@ -119,7 +136,7 @@ sub log_response { $pdu = $LDAPResponse->encode($response); } - print dump($response); + warn "## response = ", dump($response); return $pdu; } @@ -131,10 +148,6 @@ 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) { @@ -162,7 +175,7 @@ my $listenersock = IO::Socket::INET->new( Proto => 'tcp', Reuse => 1, LocalAddr => $config->{listen}, -); +) || die "can't open listen socket: $!"; my $targetsock = $config->{upstream_ssl} @@ -172,7 +185,7 @@ my $targetsock = $config->{upstream_ssl} PeerPort => 389, ) : IO::Socket::SSL->new( $config->{upstream_ldap} . ':ldaps') - ; + || die "can't open upstream socket: $!"; run_proxy($listenersock,$targetsock);