[Date Prev][Date Next] [Chronological] [Thread] [Top]

2 unrelated questions -- Control::Paged and SASL



Question 1  = about SASL using openldap-2.2.11 + sasl-2.1.18 with the
saslauthd running and {SASL} in the userpassword attribute.. 
All of this works properly for simple binds and apparently for SASL
binds except that the SASL bind prompts me for a username.  If I just
hit enter, it pulls the info from my Kerberos ticket I think, cause I
get the correct response.. 
... so my question is do I need "saslRegexp" in my slapd.conf any
more?

Question 2 = is about Net::LDAP::Control::Paged .. I have read that
there is an open issue with paged responses, but Im not sure if the
error Im getting is related to the know bug.  The errors I receive are
similar to:
Deep recursion on subroutine "Net::LDAP::_sendmesg" at
/usr/lib/perl5/site_perl/5.6.1/Net/LDAP.pm line 549, <DATA> line 456.

I get about 7 of those entries all referring to the ldap search.  I use
(almost) the exact same code to get paged results from an AD system. 
Below is a snip.. which you will notice is almost identical to
http://search.cpan.org/~gbarr/perl-ldap/lib/Net/LDAP/Control/Paged.pm

can ignore the code inside the callback also.. because it fails before
that I think..

#--<snip>--
use Net::LDAP;
use Net::LDAPS;
use Net::LDAP::Control::Paged;
use Net::LDAP::Constant qw( LDAP_CONTROL_PAGED );

$BASE = "dc=example,dc=org";
$NAME = "manager";
$pass = "secret";

$ldap = new Net::LDAPS('beta.example.org',
	port => '636',
	verify => 'require',
	sslversion => 'sslv3',
	cafile => '/path/to/my/CA.cer') or die "$@";

$page = Net::LDAP::Control::Paged->new( size => 100 );

@searchargs = ( base    => "dc=example,dc=org",
	scope	=> "subtree",
                filter  => "(objectClass=posixGroup)",
                callback => \&callback,
                control => [ $page ],
	);
## This is added because I require auth to my tree
$ldap->bind(dn => "$NAME,$BASE", password => $pass);

my $cookie;
while(1){
        $mesg = $ldap->search( @searchargs );
        $mesg->code and last;
        my($resp) = $mesg->control( LDAP_CONTROL_PAGED ) or last;
        $cookie = $resp->cookie or last;
        $page->cookie($cookie);
}
if($cookie) {
        $page->cookie($cookie);
        $page->size(0);
        $ldap->search( @searchargs );
}
$ldap->unbind;

sub callback{
	my($mesg,$entry) = @_;
	if(ref($entry) eq 'Net::LDAP::Entry'){
		$cn = join("cn",$entry->get_value("cn"));
		$entry->add(objectClass => "groupOfURLs");
		$entry->add(memberURL =>
"ldap://beta.example.org:636/ou=people,dc=example,dc=org??sub?isaMemberof=$cn";);
		my $mesg = $entry->update($ldap);
	}
}
#--<snip>--

Jonathan Higgins
Network Service Specialist IV
Kennesaw State University
jhiggins@kennesaw.edu