Hi,
On Thursday, 20. December 2012, Bakkiaraj Murugesan wrote:
> I have migrated to perl 5.16. Below is my configuration,
>
> Perl: ActiveState Perl 5.16 (This is perl 5, version 16, subversion 1
> (v5.16.1) built for MSWin32-x86-multi-thread)
>
> OS: Windows 7 64 bit
>
> compiler: GCC 4.7.0
>
> Make: dmake
>
> I downloaded latest version of Net-LDAP module (0.51) from cpan.org,
> compiled and installed. damke test PASSED no errors. But when I use the
> following code,
>
> <code>
> use strict;
> use warnings;
> use Net::LDAP 0.51;
> use Win32;
> use Data::Dumper;
>
> my $userName = Win32::DomainName().'\\'.Win32::LoginName();
>
> my $pw="xxxxxx";
>
>
> #$pw=~s/\%([A-Fa-f0-9]{2})/pack('C',hex($1))/seg;
> #$pw=~s/\+/ /g;
>
>
>
> my $host="xx.xx.xxx";
>
> my $ldap = Net::LDAP->new($host) or die "Can't connect to LDAP server: $@";
> my $mesg = $ldap->bind($userName, password=>$pw);
> my $results = sprintf("%s",$mesg->error);
>
>
> print "\n MSG: ",$results;
>
> </code>
>
> I get following error,
>
> <snip>
> syswrite() on unopened filehandle GEN0 at C:/Perl/site/lib/Net/LDAP.pm line
> 847, <DATA> line 581.
>
> MSG: Bad file descriptor
> </snip>
>
> I suspect this error is caused due to "Socket.pm", I have a updated
> "Socket.pm" version 2.007. When I uninstall this module , perl uses
> Socket.pm from c:\perl\lib which is Socket.pm version 2.001 and I dont get
> any error in Net-LDAP.
>
> So my finding is Net-LDAP is not properly working with Sockets.pm 2.007.
I am sorry, but I do not know how the perl-ldap maintainers shall react to
this bug report.
With the exception of some symbolic constants from Socket.pm, perl-ldap
only uses Socket.pm indirectly via the IO::Socket::* family.
So, I fear there is nothing perl-ldap can do here to fix the issue-
Would you mind to inform the Socket.pm author about your finding?
Because I consider it a bug in a module if some of its - directo or indirect -
clients start to fail after a new release has come out.
But I admit I have doubts that Socket.pm changed in an incompatible way.
The only effective change between Socket 2.006 and 2.007 is:
--- Socket-2.006/Socket.xs 2012-08-19 23:31:04.000000000 +0200
+++ Socket-2.007/Socket.xs 2012-12-16 19:24:00.000000000 +0100
@@ -916,13 +916,13 @@
case AF_INET:
if(addrlen != 4)
croak("Bad address length for Socket::inet_ntop on AF_INET;"
- " got %d, should be 4");
+ " got %d, should be 4", addrlen);
break;
#ifdef AF_INET6
case AF_INET6:
if(addrlen != 16)
croak("Bad address length for Socket::inet_ntop on AF_INET6;"
- " got %d, should be 16");
+ " got %d, should be 16", addrlen);
which
a) fixes a real bug: add argument for the %d pattern
b) does not look as if it would suddenly break working implementations
of perl-ldap only.
In addition to that, I cannot reproduce the issue with Strawberry Perl
5.16.2.1 (with Socket 2.006) when connecting to a non-AD LDAP server.
So:
* Can you try reproding the issue using another LDAP server (preferably
another type. i.e. no AD)?
* Can you try reproducing the issue using the above version of Strawberry Perl
(http://strawberryperl.com/)?
* Can you double check your implementation?
I assume you did it for yourself, and did not use pre-compiled images from
somewhere on the net?
Please report back.
Thanks
PEter
--
Peter Marschall
[email protected]