diff options
Diffstat (limited to 'ldap/servers/slapd')
-rw-r--r-- | ldap/servers/slapd/back-ldbm/sort.c | 4 | ||||
-rw-r--r-- | ldap/servers/slapd/back-ldbm/vlv.c | 6 | ||||
-rw-r--r-- | ldap/servers/slapd/passwd_extop.c | 10 |
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) { |