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

How to populate LDAPMod Structure?



Hi all,
        This may be very problem for most of u all ........... but i am just getting started .please dont get irritated .
 
Here goes the problem......
 
We are using OpenLDAP 2.0.11, we have populated the same to hold centralized address book. Now we are trying to write a menu driven application to do all the required operations on the LDAP database. Currently we are struck in ldap_add call, which required LDAPMod ** structure as the third argument.
 
 
We populated the LDAPMod structure as follows:-
 #include <lber.h>
#include <ldap.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
struct ldapentry {
 char f_name[120];
 char m_name[120];
 char l_name[120];
 char obj_cls[120];
 char org_unit[120];
 char org[120];
 char country[120];
 char e_mail[120];
} detail;
 
int main()
{
 LDAP *ld;
 LDAPMod *attrs;
 char dn[1024];
 char cn[1024];
 int ret_val;
 struct berval *berval1;
 
 
 
 init();
 accept_data();
 validate();
 ld=ldap_open("200.200.100.129",389);
 ret_val=ldap_simple_bind_s(ld,"cn=Manager,o=thbs.com,c=US","secret");
 printf("%s\n", ldap_err2string(ret_val));
 sprintf(dn,"cn=%s %s %s,ou=%s,o=%s,c=%s",detail.f_name,
  detail.m_name, detail.l_name,detail.org_unit, detail.org,
  detail.country );
 attrs = (LDAPMod *)malloc(sizeof (LDAPMod));
/*
 attrs->mod_op = LDAP_MOD_ADD;
 attrs->mod_type = NULL ;
*/
 
 *(attrs->mod_vals.modv_bvals) = (struct berval *)malloc ( 6 * sizeof ( struct berval ) );
 if ( *(attrs->mod_vals.modv_bvals) == NULL ) {
  perror("malloc");
 }
 berval1 = *attrs->mod_vals.modv_bvals; 
 sprintf(cn,"%s %s %s",detail.f_name, detail.m_name,detail.l_name );
 berval1->bv_len = strlen(cn);
 berval1->bv_val = strdup(cn);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
/*
 berval1++;
 berval1->bv_len = strlen(detail.f_name);
 berval1->bv_val = strdup(detail.f_name);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
*/
 berval1++;
 berval1->bv_len = strlen(detail.m_name);
 berval1->bv_val = strdup(detail.m_name);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
 
 berval1++;
 berval1->bv_len = 0;
 berval1->bv_len = strlen(detail.l_name);
        printf("-------------------  %d\n",berval1->bv_len);
 berval1->bv_val = strdup(detail.l_name);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
 
 berval1++;
 berval1->bv_len = strlen(detail.obj_cls);
 berval1->bv_val = strdup(detail.obj_cls);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
 
 berval1++;
 berval1->bv_len = strlen(detail.org);
 berval1->bv_val = strdup(detail.org);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
 
 berval1++;
 berval1->bv_len = strlen(detail.e_mail);
 berval1->bv_val = strdup(detail.e_mail);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
 
 printf("Values %d = %s\n", berval1->bv_len, berval1->bv_val );
 
/* dn:cn=Srinivas Kumar,ou=SES,o=thbs.com,c=US */
 sprintf(dn,"cn=%s,ou=%s,o=%s,c=%s",cn,detail.org_unit,
     detail.org,detail.country);
 printf("Hello\n");
 if ( ldap_add_s(ld, dn, &attrs) != LDAP_SUCCESS )
 {
  perror ( "ldap_add" );
 } 
 ldap_unbind(ld);
 return 0;
 
}
This program dumps core at ldap_add .
 
So , thought it may be a problem with the way we are populating the LDAPMod structure .....
Please help
 
regards,
nagendra.