-=head1 Introduction
-
-This is a sample Perl module for the OpenLDAP server slapd.
-It also contains the documentation that you will need to
-get up and going.
-
-WARNING: the interfaces of this backen to the perl module
-MAY change. Any suggestions would greatly be appreciated.
-
-
-=head1 Overview
-
-The Perl back end works by embedding a Perl interpreter into
-the slapd backend. Then when the configuration file indicates
-that we are going to be using a Perl backend it will get an
-option that tells it what module to use. It then creates a
-new Perl object that handles all the request for that particular
-instance of the back end.
-
-
-=head1 Interface
-
-You will need to create a method for each one of the
-following actions that you wish to handle.
-
- * new # Creates a new object.
- * search # Performs the ldap search
- * compare # does a compare
- * modify # modify's and entry
- * add # adds an entry to back end
- * modrdn # modifies a an entries rdn
- * delete # deletes an ldap entry
- * config # process unknow config file lines
-
-=head2 new
-
-This method is called when the config file encounters a
-B<perlmod> line. The module in that line is then effectively
-used into the perl interpreter, then the new method is called
-to create a new object. Note that multiple instances of that
-object may be instantiated, as with any perl object.
-
-The new method doesn't receive any arguments other than the
-class name.
-
-RETURN:
-
-=head2 search
-
-This method is called when a search request comes from a client.
-It arguments are as follow.
-
- * obj reference
- * filter string
- * size limit
- * time limit
- * attributes only flag ( 1 for yes )
- * list of attributes that are to be returned. (could be empty)
-
-RETURN:
-
-=head2 compare
-
-This method is called when a compare request comes from a client.
-Its arguments are as follows.
-
- * obj reference
- * dn
-
-RETURN:
-
-=head2 modify
-
-This method is called when a modify request comes from a client.
-Its arguments are as follows.
-
- * obj reference
- * dn
- * lists formatted as follows
- { ADD | DELETE | REPLACE }, key, value
-
-RETURN:
-
-=head2 add
-
-This method is called when a add request comes from a client.
-Its arguments are as follows.
-
- * obj reference
- * entry in string format.
-
-RETURN:
-
-=head2 modrdn
-
-This method is called when a modrdn request comes from a client.
-Its arguments are as follows.
-
- * obj reference
- * dn
- * new rdn
- * delete old dn flage ( 1 means yes )
-
-RETURN:
-
-=head2 delete
-
-This method is called when a delete request comes from a client.
-Its arguments are as follows.
-
- * obj reference
- * dn
-
-RETURN:
-
-=head2 config
-
- * obj reference
- * arrray of arguments on line
-
-RETURN: non zero value if this is not a valid option.
-
-=head1 Configuration
-
-The perl section of the config file recognizes the following
-options. It should also be noted that any option not recoginized
-will be sent to the B<config> method of the perl module as noted
-above.
-
- database perl # startn section for the perl database
-
- suffix "o=AnyOrg, c=US"
-
- perlModulePath /path/to/libs # addes the path to @INC variable same
- # as "use lib '/path/to/libs'"
-
- perlModule ModName # use the module name ModName from ModName.pm
-
-
-
-=cut
+# This is a sample Perl module for the OpenLDAP server slapd.
+# $OpenLDAP$
+## This work is part of OpenLDAP Software <http://www.openldap.org/>.
+##
+## Copyright 1998-2005 The OpenLDAP Foundation.
+## Portions Copyright 1999 John C. Quillan.
+## All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted only as authorized by the OpenLDAP
+## Public License.
+##
+## A copy of this license is available in the file LICENSE in the
+## top-level directory of the distribution or, alternatively, at
+## <http://www.OpenLDAP.org/license.html>.
+#
+# Usage: Add something like this to slapd.conf:
+#
+# database perl
+# suffix "o=AnyOrg,c=US"
+# perlModulePath /path/to/this/file
+# perlModule SampleLDAP
package SampleLDAP;
+use POSIX;
+
sub new
{
my $class = shift;
my $this = {};
bless $this, $class;
-
+ print STDERR "Here in new\n";
+ print STDERR "Posix Var " . BUFSIZ . " and " . FILENAME_MAX . "\n";
return $this;
}
+sub init
+{
+ return 0;
+}
+
sub search
{
my $this = shift;
- my( $filterStr, $sizeLim, $timeLim, $attrOnly, @attrs ) = @_;
-
+ my($base, $scope, $deref, $sizeLim, $timeLim, $filterStr, $attrOnly, @attrs ) = @_;
+ print STDERR "====$filterStr====\n";
$filterStr =~ s/\(|\)//g;
$filterStr =~ s/=/: /;
sub compare
{
my $this = shift;
- my ( $dn ) = @_;
+ my ( $dn, $avaStr ) = @_;
+ my $rc = 5; # LDAP_COMPARE_FALSE
+
+ $avaStr =~ s/=/: /;
+
+ if ( $this->{ $dn } =~ /$avaStr/im ) {
+ $rc = 6; # LDAP_COMPARE_TRUE
+ }
- return 1;
+ return $rc;
}
sub modify
my ( $dn ) = ( $entryStr =~ /dn:\s(.*)$/m );
#
- # This needs to be here untill a normalize dn is
+ # This needs to be here until a normalized dn is
# passed to this routine.
#
$dn = uc( $dn );
my ( $dn ) = @_;
+ print STDERR "XXXXXX $dn XXXXXXX\n";
delete $this->{$dn};
}
my $this = shift;
my ( @args ) = @_;
-
- return 1;
+ local $, = " - ";
+ print STDERR @args;
+ print STDERR "\n";
+ return 0;
}
1;
-
-