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

Protocol Error (2) on LDAP Add C API



I'm hoping that someone can help me.  I'm trying to use the
LDAP C API to add an entry to an openLDAP directory, but my
attempts are failing with a Protocol Error.  I can't seem 
to figure out the problem.  I've been working on this for
several days with no luck. I've tried setting the 
protocol version to 2 and 3 and using all the different
ldap_add and ldap_modify functions with the same (2)
results.

I'm working on a stock RedHat 7.3 install with RedHat's
copy of openLDAP.  I've also tested on RedHat 7.2, and 
6.2.  I'm able to add entries to the directory using the
ldapadd and ldapmodify utilities, as well as with the 
perl api. 

Command I'm using to compile:
gcc -L/usr/local/lib -lldap -llber -lresolv test.c -o test

ldap lib:
libldap.so.2.0.16

Any help that anyone can provide would be greatly appreciated.

I'll include some test source code I've been working with in
line below.  Please ignore memory leaks and other problems
such as that, I've greatly simplified the code to try and 
find the LDAP error.


Thanks,

	 - Alex

---
code
---
#include <stdio.h>
#include <stdlib.h>
#include <ldap.h>


int main(void)
{
	LDAP *ld;
	int rslt = 0;
	LDAPMod *list_of_attrs[4];
	LDAPMod attribute1, attribute2, attribute3;

	char *dn = "ou=classes,dc=univ,dc=edu";

	char *object_values[] = { "top", "organizationalUnit", NULL };
	char *ou_values[] = { "classes", NULL };
	char *des_values[] = { "Classes Students Can Take", NULL };

	/* Build the LDAPMod datastructure */
	attribute1.mod_op = LDAP_MOD_ADD;
	attribute1.mod_type = "objectClass";
	attribute1.mod_values = object_values;
	attribute1.mod_bvalues = NULL;

	attribute2.mod_op = LDAP_MOD_ADD;
	attribute2.mod_type = "ou";
	attribute2.mod_values = object_values;
	attribute2.mod_bvalues = NULL;

	attribute3.mod_op = LDAP_MOD_ADD;
	attribute3.mod_type = "description";
	attribute3.mod_values = des_values;
	attribute3.mod_bvalues = NULL;

	list_of_attrs[0] = &attribute2;
	list_of_attrs[1] = &attribute1;
	list_of_attrs[2] = &attribute3;
	list_of_attrs[3] = NULL;

	ld = ldap_init("test.mycompany.com",389);
	if(ld == NULL)
	{
		printf("Failed to init\n");
	}

	rslt = ldap_simple_bind_s(ld,"cn=root,dc=univ,dc=edu","password");
	if(rslt != LDAP_SUCCESS)
	{
		printf("Failed to bind. %d\n",rslt);
		printf("%s\n",ldap_err2string( rslt ));
	}

	rslt = ldap_add_ext_s(ld,dn,list_of_attrs,NULL,NULL);
	if(rslt != LDAP_SUCCESS)
	{
		printf("Failed to add %d.\n",rslt);
		printf("%s\n",ldap_err2string( rslt ));
	}

	/* Close connection to the LDAP Server */
	ldap_unbind(ld);
}