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

ldapmodify - deletion of related attributes



Hello,

I am new to openldap so I am not sure of much... I hope the 
title I gave to this mail is not too misleading, here is my problem :

I want to add/delete users to a group.

I use the following ldif to add an user to a group :
dn: cn=grptest, cn=testOU, dc=example, dc=com
add: uniqueMember
uniqueMember: uid=test, cn=KlogicOU, dc=example, dc=com

so far, so good.
Now, when I want to add an user the first time, it does not work because
there is a missing related attribute : groupOfUniqueNames.

To add it I have found only the following syntax :
dn: cn=grptest,cn=KlogicOU, dc=example, dc=com
add:objectClass,uniqueMember
objectClass: groupOfUniqueNames
uniqueMember: uid=test,cn=KlogicOU,dc=example,dc=com

so far, so good.
Now the problem : when I want to delete a group member,
I need also to delete the groupOfUniqueNames attribute
when it's the last group member in this group. I know it's
possible to do it using the Api since directory_administrator
(a graphical utility) does it without problem on my system.

I want to do it using scripts, however.
I have not found a ldif syntax to do it.

Trying 
dn: cn=grptest,cn=testOU, dc=example, dc=com
delete: objectClass, uniqueMember
objectClass:groupOfUniqueNames
uniqueMember: uid=test,cn=testOU, dc=example, dc=com

get me the following result :

ldap_modify: Undefined attribute type
 additional info: objectClass, uniqueMember: attribute description
 contains inappropriate characters

other less likely syntaxes I tried did not work or produced
other strange error messages.

Could it be a bug in ldapmodify ? or is there a way to do it 
using another syntax ?

I have the following setup : stock Mandrake 8.2 with its OpenLDAP 2.0.23.

I have found that the following change to ldapmodify allowed
me to add/remove members of my groups without problem :

--- ldapmodify.c.orig   Fri Feb  8 19:12:31 2002
+++ ldapmodify.c        Sat Jul 20 09:31:01 2002
@@ -840,7 +840,6 @@
                goto end_line;
            } else if ( strcasecmp( type, T_MODOPDELETESTR ) == 0 ) {
                modop = LDAP_MOD_DELETE;
-               addmodifyop( &pmods, modop, val.bv_val, NULL );
                goto end_line;
            } else {    /* no modify op:  use default */
                modop = ldapadd ? LDAP_MOD_ADD : LDAP_MOD_REPLACE;

Not that I did not try to upgrade my system, that is, I compiled
2.0.25 ldapmodify and tested it with my 2.0.23 version. Browsing
Cvs I noticed that HEAD code is similar. I even tried to
compile with this ldapmodify.c and found that its behaviour
is identical.

However not being familiar with the code I don't know if it is
really a bug. If it is, the replace case would need the same
change of course.

additional info : I found this patch adding fprintf instruction
at the beginning of addmodifyop routine and seeing it was called
3 times for this operation with the following content in 'attr' : 

attr=objectClass, uniqueMember
attr=objectClass
attr=uniqueMember

The patch removes the first call to addmodifyop.

Thanks for your attention.

Gerard PatelÉ]