Package: cpu Version: 1.4.3-8 Severity: wishlist Tags: patch
I use the following classes for a user: USER_OBJECT_CLASS = inetOrgPerson,posixAccount,top USER_CN_STRING = cn We use also phpldapadmin package for creating users. So we have a command line utility and graphical one. Standard cpu uses the unix account name (uid) as RDN. This works as desired if we also set USER_CN_STRING to uid. At our site we use 'cn' as RDN and then cpu fails because it use the unix account name to add/modify/delete the user. I have added an extra option to cpu: -C <value>/--cn_value=<value> When set use this value voor cn,, eg: cpu usermod -cn_value "Bas van der Vlies" bas Now it uses cn="Bas van der Vlies" insetad of cn="bas" as RDN. Here are the patches: Index: trunk/cpu/src/include/plugins/ldap/ldap.h =================================================================== --- trunk/cpu/src/include/plugins/ldap/ldap.h (revision 2393) +++ trunk/cpu/src/include/plugins/ldap/ldap.h (revision 2397) @@ -91,4 +91,5 @@ char * dn; char * cn; + char * cn_value; /* HvB hack use this value for cn */ char * gid; char * exec; /* post {un}install exec script */ Index: trunk/cpu/src/plugins/ldap/commandline.c =================================================================== --- trunk/cpu/src/plugins/ldap/commandline.c (revision 2396) +++ trunk/cpu/src/plugins/ldap/commandline.c (revision 2397) @@ -42,4 +42,5 @@ {"addfile", 1, 0, 'a'}, {"cn", 1, 0, 'A'}, + {"cn_value", 1, 0, 'C'}, {"userbase", 1, 0, 'b'}, {"groupbase", 1, 0, 'B'}, @@ -328,4 +329,6 @@ break; case 'C': + globalLdap->cn_value = strdup (optarg); + break; case 'M': default: @@ -761,6 +764,17 @@ } if (operation != CAT) + { + /* HvB globalLdap->dn = buildDn ((operation > 2) ? GROUPADD : USERADD, globalLdap->passent->pw_name); + */ + globalLdap->dn = buildDn ((operation > 2) ? GROUPADD : USERADD, + ldapGetCn()); + +/* HvB */ +#if DEBUG + printf("HvB globalLdap->dn = %s\n", globalLdap->dn); +#endif + } if (globalLdap->add_file != NULL) @@ -878,5 +892,6 @@ "\t-2, -2 : If specified, use LDAPv2\n" "\t-a addfile, --addfile=file : File to use for additional attrs\n" - "\t-A cn, --cn=cn : Comman Name Prefix\n" + "\t-A cn, --cn=cn : Comman Name Prefix (cn)\n" + "\t-C <cn_value>, --cn_value=value : Use this value in LDAP query cn=value\n" "\t-b base, --userbase=base : Base DN for users\n" "\t-B group_base, --groupbase=base : Base DN for groups\n" Index: trunk/cpu/src/plugins/ldap/ld.c =================================================================== --- trunk/cpu/src/plugins/ldap/ld.c (revision 2393) +++ trunk/cpu/src/plugins/ldap/ld.c (revision 2397) @@ -438,5 +438,9 @@ char *temp; - if (globalLdap->first_name && globalLdap->last_name) + if (globalLdap->cn_value) + { + temp = globalLdap->cn_value; + } + else if (globalLdap->first_name && globalLdap->last_name) { slen = @@ -456,4 +460,7 @@ temp = globalLdap->passent->pw_name; +#ifdef DEBUG + printf("HvB ldapGetCn value = %s\n", temp); +#endif return temp; } Index: trunk/cpu/src/plugins/ldap/user.c =================================================================== --- trunk/cpu/src/plugins/ldap/user.c (revision 2393) +++ trunk/cpu/src/plugins/ldap/user.c (revision 2397) @@ -33,4 +33,7 @@ ldapUserAdd (LDAP * ld) { +#ifdef DEBUG + fprintf(stderr, "HvB dn = %s\n", globalLdap->dn); +#endif if (ldapUserCheck (LDAP_MOD_ADD, ld) < 0) { @@ -38,4 +41,5 @@ return -1; } + if (ldap_add_s (ld, globalLdap->dn, userMod) != LDAP_SUCCESS) { @@ -66,4 +70,7 @@ { newdn = buildDn (USERMOD, globalLdap->new_username); + /* + printf("HvB newdn = %s\n", newdn); + */ if (newdn == NULL) return -1; @@ -80,4 +87,7 @@ globalLdap->passent->pw_name = globalLdap->new_username; newdn = buildDn (USERADD, globalLdap->new_username); + /* + printf("HvB newdn = %s\n", newdn); + */ globalLdap->dn = newdn; } -- System Information: Debian Release: 3.1 Architecture: i386 (i686) Kernel: Linux 2.6.13.2-sara1 Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]