You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cpu/cpu-1.4.3-mod-delete.patch

250 lines
8.7 KiB
Diff

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 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, " "))
- return 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;
+ temp = (char **) malloc (sizeof (char *) * 2);
+ bzero (temp, sizeof (char *) * 2);
+ temp[0] = value;
+ temp[1] = NULL;
+
+ 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++;
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;