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
pe...@adpm.de

Reply via email to