summaryrefslogtreecommitdiffstats
path: root/ldap/servers/slapd
diff options
context:
space:
mode:
Diffstat (limited to 'ldap/servers/slapd')
-rw-r--r--ldap/servers/slapd/back-ldbm/sort.c4
-rw-r--r--ldap/servers/slapd/back-ldbm/vlv.c6
-rw-r--r--ldap/servers/slapd/passwd_extop.c10
3 files changed, 20 insertions, 0 deletions
diff --git a/ldap/servers/slapd/back-ldbm/sort.c b/ldap/servers/slapd/back-ldbm/sort.c
index 10d44170..7a2a9c97 100644
--- a/ldap/servers/slapd/back-ldbm/sort.c
+++ b/ldap/servers/slapd/back-ldbm/sort.c
@@ -299,6 +299,10 @@ int parse_sort_spec(struct berval *sort_spec_ber, sort_spec **ps)
char *matchrule = NULL;
int rc = LDAP_SUCCESS;
+ if (NULL == sort_spec_ber->bv_val) {
+ return LDAP_PROTOCOL_ERROR;
+ }
+
ber = ber_init(sort_spec_ber);
if(ber==NULL)
{
diff --git a/ldap/servers/slapd/back-ldbm/vlv.c b/ldap/servers/slapd/back-ldbm/vlv.c
index 163d8a64..c68ce642 100644
--- a/ldap/servers/slapd/back-ldbm/vlv.c
+++ b/ldap/servers/slapd/back-ldbm/vlv.c
@@ -1846,6 +1846,12 @@ vlv_parse_request_control( backend *be, struct berval *vlv_spec_ber,struct vlv_r
vlvp->value.bv_len = 0;
vlvp->value.bv_val = NULL;
+ if (NULL == vlv_spec_ber->bv_val)
+ {
+ return_value= LDAP_OPERATIONS_ERROR;
+ return return_value;
+ }
+
ber = ber_init(vlv_spec_ber);
if (ber_scanf(ber, "{ii", &vlvp->beforeCount, &vlvp->afterCount) == LBER_ERROR)
{
diff --git a/ldap/servers/slapd/passwd_extop.c b/ldap/servers/slapd/passwd_extop.c
index ff2e19f3..e22a52d4 100644
--- a/ldap/servers/slapd/passwd_extop.c
+++ b/ldap/servers/slapd/passwd_extop.c
@@ -527,6 +527,16 @@ passwd_modify_extop( Slapi_PBlock *pb )
/* Get the ber value of the extended operation */
slapi_pblock_get(pb, SLAPI_EXT_OP_REQ_VALUE, &extop_value);
+
+ if (extop_value->bv_val == NULL)
+ {
+ /* The request field wasn't provided. We'll
+ * now try to determine the userid and verify
+ * knowledge of the old password via other
+ * means.
+ */
+ goto parse_req_done;
+ }
if ((ber = ber_init(extop_value)) == NULL)
{