summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorJim McDonough <jmcd@samba.org>2002-02-06 02:28:46 +0000
committerJim McDonough <jmcd@samba.org>2002-02-06 02:28:46 +0000
commit01e7f7c3d9006883b71e43d917d32e325cff7a15 (patch)
tree732e4edb23786e794536cb77adcb16237574e562 /source
parentf424b691ea76819e90f10919b0506bb2216ecd0e (diff)
downloadsamba-01e7f7c3d9006883b71e43d917d32e325cff7a15.tar.gz
samba-01e7f7c3d9006883b71e43d917d32e325cff7a15.tar.xz
samba-01e7f7c3d9006883b71e43d917d32e325cff7a15.zip
Fix ldapmod list overrun check. Also better document and format ldap control for permissive modify.
Diffstat (limited to 'source')
-rw-r--r--source/libads/ldap.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/source/libads/ldap.c b/source/libads/ldap.c
index 75c7982105c..4567a42c0fc 100644
--- a/source/libads/ldap.c
+++ b/source/libads/ldap.c
@@ -71,7 +71,7 @@ ADS_STATUS ads_do_search(ADS_STRUCT *ads, const char *bind_path, int scope,
rc = ldap_search_ext_s(ads->ld,
bind_path, scope,
- exp, attrs, 0, NULL, NULL,
+ exp, (char **) attrs, 0, NULL, NULL,
&timeout, LDAP_NO_LIMIT, (LDAPMessage **)res);
return ADS_ERROR(rc);
}
@@ -187,10 +187,11 @@ static ADS_STATUS ads_modlist_add(void **mods, int mod_op, char *name, char **va
LDAPMod **modlist = (LDAPMod **) mods;
/* find the first empty slot */
- for (curmod=0; modlist[curmod] > 0; curmod++);
+ for (curmod=0; modlist[curmod] && modlist[curmod] != (LDAPMod *) -1;
+ curmod++);
if (modlist[curmod] == (LDAPMod *) -1)
return ADS_ERROR(LDAP_NO_MEMORY);
-
+
if (!(modlist[curmod] = malloc(sizeof(LDAPMod))))
return ADS_ERROR(LDAP_NO_MEMORY);
modlist[curmod]->mod_type = name;
@@ -313,21 +314,17 @@ void ads_free_mods(void **mods)
ADS_STATUS ads_gen_mod(ADS_STRUCT *ads, const char *mod_dn, void **mods)
{
int ret,i;
- LDAPControl control;
- LDAPControl *controls[2];
- char bv_val = (char) 1;
-
/*
- this control seems to be necessary to have any modify
- that contains a currently non-existent attribute (but
- allowable for the object) to run
+ this control is needed to modify that contains a currently
+ non-existent attribute (but allowable for the object) to run
*/
- control.ldctl_oid = "1.2.840.113556.1.4.1413";
- control.ldctl_value.bv_len = 1;
- control.ldctl_value.bv_val = &bv_val;
- control.ldctl_iscritical = (char) 0;
- controls[0] = &control;
- controls[1] = NULL;
+ LDAPControl PermitModify = {
+ "1.2.840.113556.1.4.1413",
+ {0, NULL},
+ (char) 1};
+ LDAPControl *controls[2] = {
+ &PermitModify,
+ NULL };
/* find the end of the list, marked by NULL or -1 */
for(i=0;mods[i]>0;i++);