[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;
 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 ) {
 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->bv_len = strlen(detail.f_name);
 berval1->bv_val = strdup(detail.f_name);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
 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->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->bv_len = strlen(detail.obj_cls);
 berval1->bv_val = strdup(detail.obj_cls);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
 berval1->bv_len = strlen(detail.org);
 berval1->bv_val = strdup(detail.org);
 printf("%d %s\n", berval1->bv_len, berval1->bv_val );
 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 */
 if ( ldap_add_s(ld, dn, &attrs) != LDAP_SUCCESS )
  perror ( "ldap_add" );
 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