Hi,
i'm new to Net::LDAP and have difficulty to make Net::LDAP execute an 'add' or 
'modify'. Can somebody point out what i'm doing wrong?
This is my code:
#!d:\perl\bin\perl.exe

use Data::Dumper;
use Net::LDAP;

use strict;

my 
($attr,$ldap,$mesg,$userToAuthenticate,$passwd,@ocs,@atts,@bju_attrs,%add_attrs,%modify_attrs);

@bju_attrs = qw ( givenName sn physicalDeliveryOfficeName telephoneNumber 
streetAddress postOfficeBox l st postalCode c co countryCode homePhone pager 
mobile facsimileTelephoneNumber ipPhone title department company manager 
directReports);

$add_attrs { givenName } = "JustaName";
$modify_attrs {company} = "Roodbms";

$userToAuthenticate = $ARGV[0];
#print STDOUT ("userToAuthenticate= $userToAuthenticate\n");
$passwd = $ARGV[1];
#print STDOUT ("passwd= $passwd\n");

$ldap = Net::LDAP->new ( "mymachine.mydomain" ) or die "$@";

$mesg = $ldap->bind ( "$userToAuthenticate",            
                       password => "$passwd",
                       version => 3 );

print STDOUT ("After: bind\, mesg= \n".Dumper(%$mesg)."\n\n");

#my @Attrs = qw( );             # request all available attributes
                                # to be returned.

#my $result = LDAPsearch ( $ldap, "sn=ordinary", \...@attrs);
my $result = LDAPsearch ( $ldap, "sn=ordinary", \...@bju_attrs);
print STDOUT ("result= \n".Dumper(%$result)."\n\n");
print_result_by_entry($result);
#
# Now attempt to add/modify (a) value(s) to/of a DN
#
my $dn = "DC=Roodbms,CN=Users,CN=ordinary"; # This is shown in LDAPExplorerTool2
#
# First attempt: ADD
#
foreach $attr (keys %add_attrs)
{
  print STDOUT ("Adding attribute: $attr with value: ".$add_attrs{$attr}."\n");
}

my $result = LDAPaddUsingHash ( $ldap, $dn, \%add_attrs );
$result = LDAPsearch ( $ldap, "sn=ordinary", \...@bju_attrs);
print STDOUT ("result (after add)= \n".Dumper(%$result)."\n\n");
print_result_by_entry($result);
#
# Then attempt: MODIFY
#
foreach $attr (keys %modify_attrs)
{
  print STDOUT ("Modifying attribute: $attr to: ".$modify_attrs{$attr}."\n");
}

my $result = LDAPmodifyUsingHash ( $ldap, $dn, \%modify_attrs );
$result = LDAPsearch ( $ldap, "sn=ordinary", \...@bju_attrs);
print STDOUT ("result (after modify)= \n".Dumper(%$result)."\n\n");
print_result_by_entry($result);

$ldap->unbind;

#
# Several functions to use
#

sub print_result_by_entry
{
  my ($result) = @_;

  my @entries = $result->entries;

  my $entr;
  foreach $entr ( @entries )
  {
    print "DN: ", $entr->dn, "\n";

    my $attr;
    foreach $attr ( sort $entr->attributes )
    {
# skip binary we can't handle
      next if ( $attr =~ /;binary$/ );
      print "  $attr : ", $entr->get_value ( $attr ) ,"\n";
    }
    print "#-------------------------------\n";
  }
}

sub print_result_by_struct
{
  my ($struct) = @_;

#------------
#
# Accessing the data as if in a structure
#  i.e. Using the "as_struct"  method
#

  my $href = $result->as_struct;

# get an array of the DN names

  my @arrayOfDNs  = keys %$href;        # use DN hashes

# process each DN using it as a key
 
  foreach ( @arrayOfDNs )
  {
    print $_, "\n";
    my $valref = $$href{$_};

# get an array of the attribute names
# passed for this one DN.

    my @arrayOfAttrs = sort keys %$valref; #use Attr hashes

    my $attrName;       
    foreach $attrName (@arrayOfAttrs)
    {

# skip any binary data: yuck!

      next if ( $attrName =~ /;binary$/ );

# get the attribute value (pointer) using the
# attribute name as the hash

      my $attrVal =  @$valref{$attrName};
      print "\t $attrName: @$attrVal \n";
    }
    print "#-------------------------------\n";
  }
}

sub LDAPsearch
{
  my ($ldap,$searchString,$attrs,$base) = @_;

# if they don't pass a base... set it for them

  if (!$base ) { $base = "dc=Roodbms"; }

# if they don't pass an array of attributes...
# set up something for them

#  if (!$attrs ) { $attrs = [ 'cn','mail' ]; }
#  if (!$attrs ) { $attrs = [ 'cn', 'userPrincipalName' ]; }

  my $result = $ldap->search ( base    => "$base",
                               scope   => "sub",
                               filter  => "$searchString",
                               attrs   =>  $attrs
                             );

  return $result;
}

sub LDAPmodifyUsingHash
{
  my ($ldap, $dn, $whatToChange ) = @_;

  my $entry = Net::LDAP::Entry->new('DN');

  print STDOUT ("whatToChange= \n".Dumper(%$whatToChange)."\n\n");
#  my $result = $ldap->modify ( $dn,
#                               replace => { $whatToChange }
#                             );
#  return $result;

  $entry->changetype('modify'); 
  $entry->replace(%$whatToChange); # for adding and updating 
#  $entry->replace( "company" => "Roodbms");
  $entry->update($ldap);

  return $entry;
}

sub LDAPaddUsingHash
{
  my ($ldap, $dn, $whatToChange ) = @_;

  my $entry = Net::LDAP::Entry->new('DN');
  $entry->changetype('add'); 

  print STDOUT ("whatToChange= \n".Dumper(%$whatToChange)."\n\n");
#  my $result = $ldap->modify ( $dn,
#                               add => { $whatToChange }
#                             );
#  return $result;

  foreach my $attr (keys %$whatToChange)
  {
    $entry->add( $attr => $$whatToChange{$attr});
    $entry->update($ldap);
  }
  r eturn $entry;

}

and this is the result I get:
After: bind, mesg= 
$VAR1 = 'parent';
$VAR2 = bless( {
                 'net_ldap_version' => 3,
                 'net_ldap_scheme' => 'ldap',
                 'net_ldap_debug' => 0,
                 'net_ldap_socket' => bless( \*Symbol::GEN0, 'IO::Socket::INET' 
),
                 'net_ldap_host' => 'mymachine.mydomain',
                 'net_ldap_uri' => 'mymachine.mydomain',
                 'net_ldap_resp' => {},
                 'net_ldap_mesg' => {},
                 'net_ldap_async' => 0,
                 'net_ldap_port' => 389,
                 'net_ldap_refcnt' => 1
               }, 'Net::LDAP' );
$VAR3 = 'errorMessage';
$VAR4 = '';
$VAR5 = 'ctrl_hash';
$VAR6 = undef;
$VAR7 = 'resultCode';
$VAR8 = 0;
$VAR9 = 'callback';
$VAR10 = undef;
$VAR11 = 'mesgid';
$VAR12 = 1;
$VAR13 = 'matchedDN';
$VAR14 = '';
$VAR15 = 'controls';
$VAR16 = undef;
$VAR17 = 'raw';
$VAR18 = undef;


result= 
$VAR1 = 'parent';
$VAR2 = bless( {
                 'net_ldap_version' => 3,
                 'net_ldap_scheme' => 'ldap',
                 'net_ldap_debug' => 0,
                 'net_ldap_socket' => bless( \*Symbol::GEN0, 'IO::Socket::INET' 
),
                 'net_ldap_host' => 'mymachine.mydomain',
                 'net_ldap_uri' => 'mymachine.mydomain',
                 'net_ldap_resp' => {},
                 'net_ldap_mesg' => {},
                 'net_ldap_async' => 0,
                 'net_ldap_port' => 389,
                 'net_ldap_refcnt' => 1
               }, 'Net::LDAP' );
$VAR3 = 'entries';
$VAR4 = [
          bless( {
                   'changes' => [],
                   'changetype' => 'modify',
                   'asn' => {
                              'objectName' => 'CN=ordinary,CN=Users,DC=Roodbms',
                              'attributes' => [
                                                {
                                                  'type' => 'sn',
                                                  'vals' => [
                                                              'ordinary'
                                                            ]
                                                },
                                                {
                                                  'type' => 'title',
                                                  'vals' => [
                                                              'Functienaam'
                                                            ]
                                                },
                                                {
                                                  'type' => 'company',
                                                  'vals' => [
                                                              'BJU'
                                                            ]
                                                },
                                                {
                                                  'type' => 'countryCode',
                                                  'vals' => [
                                                              '0'
                                                            ]
                                                }
                                              ]
                            }
                 }, 'Net::LDAP::Entry' )
        ];
$VAR5 = 'errorMessage';
$VAR6 = '';
$VAR7 = 'ctrl_hash';
$VAR8 = undef;
$VAR9 = 'resultCode';
$VAR10 = 0;
$VAR11 = 'callback';
$VAR12 = undef;
$VAR13 = 'matchedDN';
$VAR14 = '';
$VAR15 = 'mesgid';
$VAR16 = 2;
$VAR17 = 'controls';
$VAR18 = undef;
$VAR19 = 'raw';
$VAR20 = undef;


DN: CN=ordinary,CN=Users,DC=Roodbms
  company : BJU
  countryCode : 0
  sn : ordinary
  title : Functienaam
#-------------------------------
Adding attribute: givenName with value: JustaName
whatToChange= 
$VAR1 = 'givenName';
$VAR2 = 'JustaName';


result (after add)= 
$VAR1 = 'parent';
$VAR2 = bless( {
                 'net_ldap_version' => 3,
                 'net_ldap_scheme' => 'ldap',
                 'net_ldap_debug' => 0,
                 'net_ldap_socket' => bless( \*Symbol::GEN0, 'IO::Socket::INET' 
),
                 'net_ldap_host' => 'mymachine.mydomain',
                 'net_ldap_uri' => 'mymachine.mydomain',
                 'net_ldap_resp' => {},
                 'net_ldap_mesg' => {},
                 'net_ldap_async' => 0,
                 'net_ldap_port' => 389,
                 'net_ldap_refcnt' => 1
               }, 'Net::LDAP' );
$VAR3 = 'entries';
$VAR4 = [
          bless( {
                   'changes' => [],
                   'changetype' => 'modify',
                   'asn' => {
                              'objectName' => 'CN=ordinary,CN=Users,DC=Roodbms',
                              'attributes' => [
                                                {
                                                  'type' => 'sn',
                                                  'vals' => [
                                                              'ordinary'
                                                            ]
                                                },
                                                {
                                                  'type' => 'title',
                                                  'vals' => [
                                                              'Functienaam'
                                                            ]
                                                },
                                                {
                                                  'type' => 'company',
                                                  'vals' => [
                                                              'BJU'
                                                            ]
                                                },
                                                {
                                                  'type' => 'countryCode',
                                                  'vals' => [
                                                              '0'
                                                            ]
                                                }
                                              ]
                            }
                 }, 'Net::LDAP::Entry' )
        ];
$VAR5 = 'errorMessage';
$VAR6 = '';
$VAR7 = 'ctrl_hash';
$VAR8 = undef;
$VAR9 = 'resultCode';
$VAR10 = 0;
$VAR11 = 'callback';
$VAR12 = undef;
$VAR13 = 'matchedDN';
$VAR14 = '';
$VAR15 = 'mesgid';
$VAR16 = 4;
$VAR17 = 'controls';
$VAR18 = undef;
$VAR19 = 'raw';
$VAR20 = undef;


DN: CN=ordinary,CN=Users,DC=Roodbms
  company : BJU
  countryCode : 0
  sn : ordinary
  title : Functienaam
#-------------------------------
Modifying attribute: company to: Roodbms
whatToChange= 
$VAR1 = 'company';
$VAR2 = 'Roodbms';


result (after modify)= 
$VAR1 = 'parent';
$VAR2 = bless( {
                 'net_ldap_version' => 3,
                 'net_ldap_scheme' => 'ldap',
                 'net_ldap_debug' => 0,
                 'net_ldap_socket' => bless( \*Symbol::GEN0, 'IO::Socket::INET' 
),
                 'net_ldap_host' => 'mymachine.mydomain',
                 'net_ldap_uri' => 'mymachine.mydomain',
                 'net_ldap_resp' => {},
                 'net_ldap_mesg' => {},
                 'net_ldap_async' => 0,
                 'net_ldap_port' => 389,
                 'net_ldap_refcnt' => 1
               }, 'Net::LDAP' );
$VAR3 = 'entries';
$VAR4 = [
          bless( {
                   'changes' => [],
                   'changetype' => 'modify',
                   'asn' => {
                              'objectName' => 'CN=ordinary,CN=Users,DC=Roodbms',
                              'attributes' => [
                                                {
                                                  'type' => 'sn',
                                                  'vals' => [
                                                              'ordinary'
                                                            ]
                                                },
                                                {
                                                  'type' => 'title',
                                                  'vals' => [
                                                              'Functienaam'
                                                            ]
                                                },
                                                {
                                                  'type' => 'company',
                                                  'vals' => [
                                                              'BJU'
                                                            ]
                                                },
                                                {
                                                  'type' => 'countryCode',
                                                  'vals' => [
                                                              '0'
                                                            ]
                                                }
                                              ]
                            }
                 }, 'Net::LDAP::Entry' )
        ];
$VAR5 = 'errorMessage';
$VAR6 = '';
$VAR7 = 'ctrl_hash';
$VAR8 = undef;
$VAR9 = 'resultCode';
$VAR10 = 0;
$VAR11 = 'callback';
$VAR12 = undef;
$VAR13 = 'matchedDN';
$VAR14 = '';
$VAR15 = 'mesgid';
$VAR16 = 6;
$VAR17 = 'controls';
$VAR18 = undef;
$VAR19 = 'raw';
$VAR20 = undef;


DN: CN=ordinary,CN=Users,DC=Roodbms
  company : BJU
  countryCode : 0
  sn : ordinary
  title : Functienaam
#-------------------------------

Thanks for any useful help that is offered!





      

Reply via email to