--- rpms/cpu/sme8/cpu-1.4.3-mod-delete.patch 2010/11/06 03:56:49 1.1 +++ rpms/cpu/sme8/cpu-1.4.3-mod-delete.patch 2010/11/08 03:51:36 1.5 @@ -1,27 +1,142 @@ +diff -up cpu-1.4.3/src/include/plugins/ldap/ldap.h.mod-delete cpu-1.4.3/src/include/plugins/ldap/ldap.h +--- cpu-1.4.3/src/include/plugins/ldap/ldap.h.mod-delete 2003-12-30 20:22:20.000000000 -0700 ++++ cpu-1.4.3/src/include/plugins/ldap/ldap.h 2010-11-05 23:54:19.000000000 -0600 +@@ -127,8 +127,8 @@ int ldapCat(LDAP *ld); + uid_t getNextUid(LDAP * ld); + gid_t getNextGid(LDAP * ld, ldapop_t op); + int ldapUserCheck(int mod_op, LDAP * ld); +-int ldapGroupCheck(int mod_op); +-LDAPMod ** ldapBuildListStr(int mod_op, char * mod_type, char * value, ++int ldapGroupCheck(int mod_op, LDAP * ld); ++LDAPMod ** ldapBuildListStr(LDAP * ld, int mod_op, char * mod_type, char * value, + LDAPMod ** mods); + LDAPMod ** ldapBuildList(int mod_op, char * mod_type, char ** value, + LDAPMod ** mods); +diff -up cpu-1.4.3/src/plugins/ldap/group.c.mod-delete cpu-1.4.3/src/plugins/ldap/group.c +--- cpu-1.4.3/src/plugins/ldap/group.c.mod-delete 2003-10-12 17:34:59.000000000 -0600 ++++ cpu-1.4.3/src/plugins/ldap/group.c 2010-11-05 23:54:19.000000000 -0600 +@@ -31,7 +31,7 @@ LDAPMod **groupMod = NULL; + int + ldapGroupAdd (LDAP * ld) + { +- if (ldapGroupCheck (LDAP_MOD_ADD) < 0) ++ if (ldapGroupCheck (LDAP_MOD_ADD, ld) < 0) + { + fprintf (stderr, "ldap: ldapGroupAdd: error in ldapGroupCheck\n"); + return -1; +@@ -50,7 +50,7 @@ int + ldapGroupMod (LDAP * ld) + { + char *newdn = NULL; +- if (ldapGroupCheck (LDAP_MOD_REPLACE) < 0) ++ if (ldapGroupCheck (LDAP_MOD_REPLACE, ld) < 0) + { + fprintf (stderr, "ldap: ldapGroupMod: error in ldapGroupCheck\n"); + return -1; +@@ -105,7 +105,7 @@ ldapGroupDel (LDAP * ld) + } + + int +-ldapGroupCheck (int mod_op) ++ldapGroupCheck (int mod_op, LDAP * ld) + { + int op = 0; + if (mod_op == LDAP_MOD_ADD) +@@ -126,11 +126,11 @@ ldapGroupCheck (int mod_op) + groupMod = ldapBuildList (op, "objectClass", + globalLdap->group_object_class, groupMod); + groupMod = +- ldapBuildListStr (LDAP_MOD_ADD, "cn", ldapGetCn (), groupMod); ++ ldapBuildListStr (ld, LDAP_MOD_ADD, "cn", ldapGetCn (), groupMod); + } + + if (globalLdap->passent->pw_passwd) +- groupMod = ldapBuildListStr (op, "userPassword", ++ groupMod = ldapBuildListStr (ld, op, "userPassword", + globalLdap->passent->pw_passwd, groupMod); + + if ((int) globalLdap->passent->pw_gid > -1) +@@ -143,7 +143,7 @@ ldapGroupCheck (int mod_op) + pos = globalLdap->parse; + while (pos != NULL) + { +- groupMod = ldapBuildListStr (op, pos->attr, pos->attrval, groupMod); ++ groupMod = ldapBuildListStr (ld, op, pos->attr, pos->attrval, groupMod); + pos = pos->next; + } + } diff -up cpu-1.4.3/src/plugins/ldap/ld.c.mod-delete cpu-1.4.3/src/plugins/ldap/ld.c ---- cpu-1.4.3/src/plugins/ldap/ld.c.mod-delete 2010-11-05 21:41:38.000000000 -0600 -+++ cpu-1.4.3/src/plugins/ldap/ld.c 2010-11-05 21:45:29.000000000 -0600 -@@ -285,19 +285,26 @@ ldapBuildListStr (int mod_op, char *mod_ - if (mod_type == NULL || strlen(mod_type) == strspn(mod_type, " ")) +--- cpu-1.4.3/src/plugins/ldap/ld.c.mod-delete 2010-11-05 23:53:41.000000000 -0600 ++++ cpu-1.4.3/src/plugins/ldap/ld.c 2010-11-06 00:03:17.000000000 -0600 +@@ -278,7 +278,7 @@ ldapAddList (LDAPMod ** mods) + } + + LDAPMod ** +-ldapBuildListStr (int mod_op, char *mod_type, char *value, LDAPMod ** mods) ++ldapBuildListStr (LDAP * ld, int mod_op, char *mod_type, char *value, LDAPMod ** mods) + { + char **temp; + +@@ -286,19 +286,66 @@ ldapBuildListStr (int mod_op, char *mod_ return mods; -- if (value == NULL || strlen(value) == strspn(value, " ")) + if (value == NULL || strlen(value) == strspn(value, " ")) - return mods; - - mods = ldapAddList (mods); +- mods = ldapAddList (mods); ++ { ++ int strsize = 1; ++ char *filter = NULL; ++ int ldapres = 0; ++ int err = 0; ++ ++ LDAPMessage *res[2]; ++ res[1] = NULL; ++ ++ strsize = strlen (mod_type) + 5; ++ filter = (char *) malloc (sizeof (char) * strsize); ++ if (filter == NULL) ++ return -1; ++ bzero (filter, strsize); ++ snprintf (filter, strsize, "(%s=*)", mod_type); ++ if (ldap_search_st (ld, globalLdap->dn, LDAP_SCOPE_BASE, filter, NULL, 0, ++ &globalLdap->timeout, res) != LDAP_SUCCESS) ++ { ++ if (ldap_get_option (ld, LDAP_OPT_ERROR_NUMBER, &err) < 0) ++ { ++ fprintf (stderr, "Error in ldap_get_option\n"); ++ return -1; ++ } ++ if (err != LDAP_NO_SUCH_OBJECT) ++ { ++ CPU_ldapPerror (ld, globalLdap, ++ "ldapBuildListStr: ldap_search_st"); ++ return -1; ++ } ++ } ++ else ++ { ++ ldapres = ldap_count_entries (ld, res[0]); ++ if (ldapres > 0) ++ { ++ mods = ldapAddList (mods); ++ ++ mods[list_size]->mod_op = LDAP_MOD_DELETE; ++ mods[list_size]->mod_type = strdup (mod_type); ++ mods[list_size]->mod_values = NULL; ++ list_size++; ++ } ++ } ++ free(filter); ++ } ++ else ++ { ++ mods = ldapAddList (mods); - temp = (char **) malloc (sizeof (char *) * 2); - bzero (temp, sizeof (char *) * 2); - temp[0] = value; - temp[1] = NULL; -+ if (value == NULL || strlen(value) == strspn(value, " ")) -+ { -+ mods[list_size]->mod_op = LDAP_MOD_DELETE; -+ mods[list_size]->mod_type = strdup (mod_type); -+ mods[list_size]->mod_values = NULL; -+ } -+ else -+ { + temp = (char **) malloc (sizeof (char *) * 2); + bzero (temp, sizeof (char *) * 2); + temp[0] = value; @@ -30,11 +145,105 @@ diff -up cpu-1.4.3/src/plugins/ldap/ld.c + mods[list_size]->mod_op = mod_op; + mods[list_size]->mod_type = strdup (mod_type); + mods[list_size]->mod_values = temp; ++ list_size++; + } - mods[list_size]->mod_op = mod_op; - mods[list_size]->mod_type = strdup (mod_type); - mods[list_size]->mod_values = temp; - list_size++; +- list_size++; return mods; } + +diff -up cpu-1.4.3/src/plugins/ldap/user.c.mod-delete cpu-1.4.3/src/plugins/ldap/user.c +--- cpu-1.4.3/src/plugins/ldap/user.c.mod-delete 2010-11-05 23:53:41.000000000 -0600 ++++ cpu-1.4.3/src/plugins/ldap/user.c 2010-11-05 23:54:19.000000000 -0600 +@@ -251,16 +251,16 @@ ldapUserCheck (int mod_op, LDAP * ld) + */ + if (op == LDAP_MOD_ADD) + { +- userMod = ldapBuildListStr (LDAP_MOD_ADD, "cn", ldapGetCn (), userMod); ++ userMod = ldapBuildListStr (ld, LDAP_MOD_ADD, "cn", ldapGetCn (), userMod); + userMod = + ldapBuildList (op, "objectClass", globalLdap->user_object_class, + userMod); + } + else if (globalLdap->passent->pw_gecos || (globalLdap->first_name && globalLdap->last_name)) +- userMod = ldapBuildListStr (op, "cn", ldapGetCn (), userMod); ++ userMod = ldapBuildListStr (ld, op, "cn", ldapGetCn (), userMod); + + userMod = +- ldapBuildListStr (op, "uid", globalLdap->passent->pw_name, userMod); ++ ldapBuildListStr (ld, op, "uid", globalLdap->passent->pw_name, userMod); + + /* do we allow duplicates ? */ + if ((int) globalLdap->passent->pw_uid > -1) +@@ -433,35 +433,35 @@ ldapUserCheck (int mod_op, LDAP * ld) + } + if (globalLdap->first_name) + userMod = +- ldapBuildListStr (op, "givenName", globalLdap->first_name, userMod); ++ ldapBuildListStr (ld, op, "givenName", globalLdap->first_name, userMod); + + if (globalLdap->last_name) +- userMod = ldapBuildListStr (op, "sn", globalLdap->last_name, userMod); ++ userMod = ldapBuildListStr (ld, op, "sn", globalLdap->last_name, userMod); + + if (globalLdap->new_username) +- userMod = ldapBuildListStr (op, "uid", globalLdap->new_username, userMod); ++ userMod = ldapBuildListStr (ld, op, "uid", globalLdap->new_username, userMod); + + if (globalLdap->email_address) + userMod = +- ldapBuildListStr (op, "mail", globalLdap->email_address, userMod); ++ ldapBuildListStr (ld, op, "mail", globalLdap->email_address, userMod); + + if (globalLdap->passent->pw_passwd) + userMod = +- ldapBuildListStr (op, "userPassword", globalLdap->passent->pw_passwd, ++ ldapBuildListStr (ld, op, "userPassword", globalLdap->passent->pw_passwd, + userMod); + + if (globalLdap->passent->pw_gecos) +- userMod = ldapBuildListStr (op, "gecos", globalLdap->passent->pw_gecos, ++ userMod = ldapBuildListStr (ld, op, "gecos", globalLdap->passent->pw_gecos, + userMod); + + if (globalLdap->passent->pw_dir) + userMod = +- ldapBuildListStr (op, "homeDirectory", globalLdap->passent->pw_dir, ++ ldapBuildListStr (ld, op, "homeDirectory", globalLdap->passent->pw_dir, + userMod); + + if (globalLdap->passent->pw_shell) + userMod = +- ldapBuildListStr (op, "loginShell", globalLdap->passent->pw_shell, ++ ldapBuildListStr (ld, op, "loginShell", globalLdap->passent->pw_shell, + userMod); + if ((int) globalLdap->passent->sp_lstchg != -10) + userMod = ldapBuildListInt (op, "shadowLastChange", +@@ -501,7 +501,7 @@ ldapUserCheck (int mod_op, LDAP * ld) + pos = globalLdap->parse; + while (pos != NULL) + { +- userMod = ldapBuildListStr (op, pos->attr, pos->attrval, userMod); ++ userMod = ldapBuildListStr (ld, op, pos->attr, pos->attrval, userMod); + pos = pos->next; + } + } +diff -up cpu-1.4.3/src/util/parser.c.mod-delete cpu-1.4.3/src/util/parser.c +--- cpu-1.4.3/src/util/parser.c.mod-delete 2010-11-07 16:05:19.000000000 -0700 ++++ cpu-1.4.3/src/util/parser.c 2010-11-07 16:13:07.000000000 -0700 +@@ -290,11 +290,7 @@ + p->cont = true; + token = getToken(&cart[i], delim); + if ( token == NULL ) +- { +- printf("%d: Malformed file, cannot continue parsing.\n", +- __LINE__); +- return NULL; +- } ++ token = strdup (""); + } + p->attrval = delWhite(&token); + pos = parse;