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]

Reply via email to