mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-02-17 14:00:30 +08:00
ITS#7851 tell lutil_b64_pton the correct target buffer size
This commit is contained in:
parent
44f797edad
commit
9b36358270
@ -119,21 +119,21 @@ static int chk_phk(
|
|||||||
{
|
{
|
||||||
unsigned char digest[LUTIL_MD5_BYTES];
|
unsigned char digest[LUTIL_MD5_BYTES];
|
||||||
unsigned char *orig_pass;
|
unsigned char *orig_pass;
|
||||||
int rc, n;
|
int rc;
|
||||||
struct berval salt;
|
struct berval salt;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
n = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
if (decode_len <= sizeof(digest))
|
||||||
if (n <= sizeof(digest))
|
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
/* base64 un-encode password hash */
|
/* base64 un-encode password hash */
|
||||||
orig_pass = (unsigned char *) ber_memalloc((size_t) (n + 1));
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
|
|
||||||
if (orig_pass == NULL)
|
if (orig_pass == NULL)
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
if (rc <= (int) sizeof(digest)) {
|
if (rc <= (int) sizeof(digest)) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
|
@ -230,19 +230,19 @@ static int chk_ssha256(
|
|||||||
unsigned char SHAdigest[SHA256_DIGEST_LENGTH];
|
unsigned char SHAdigest[SHA256_DIGEST_LENGTH];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <= sizeof(SHAdigest)) {
|
if (decode_len <= sizeof(SHAdigest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base64 un-encode password */
|
/* base64 un-encode password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
if( rc <= sizeof(SHAdigest) ) {
|
if( rc <= sizeof(SHAdigest) ) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
@ -274,19 +274,19 @@ static int chk_sha256(
|
|||||||
unsigned char SHAdigest[SHA256_DIGEST_LENGTH];
|
unsigned char SHAdigest[SHA256_DIGEST_LENGTH];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) < sizeof(SHAdigest)) {
|
if (decode_len < sizeof(SHAdigest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base64 un-encode password */
|
/* base64 un-encode password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
if( rc != sizeof(SHAdigest) ) {
|
if( rc != sizeof(SHAdigest) ) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
@ -318,19 +318,19 @@ static int chk_ssha384(
|
|||||||
unsigned char SHAdigest[SHA384_DIGEST_LENGTH];
|
unsigned char SHAdigest[SHA384_DIGEST_LENGTH];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <= sizeof(SHAdigest)) {
|
if (decode_len <= sizeof(SHAdigest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base64 un-encode password */
|
/* base64 un-encode password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
if( rc <= sizeof(SHAdigest) ) {
|
if( rc <= sizeof(SHAdigest) ) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
@ -362,19 +362,19 @@ static int chk_sha384(
|
|||||||
unsigned char SHAdigest[SHA384_DIGEST_LENGTH];
|
unsigned char SHAdigest[SHA384_DIGEST_LENGTH];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) < sizeof(SHAdigest)) {
|
if (decode_len < sizeof(SHAdigest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base64 un-encode password */
|
/* base64 un-encode password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
if( rc != sizeof(SHAdigest) ) {
|
if( rc != sizeof(SHAdigest) ) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
@ -406,19 +406,19 @@ static int chk_ssha512(
|
|||||||
unsigned char SHAdigest[SHA512_DIGEST_LENGTH];
|
unsigned char SHAdigest[SHA512_DIGEST_LENGTH];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <= sizeof(SHAdigest)) {
|
if (decode_len <= sizeof(SHAdigest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base64 un-encode password */
|
/* base64 un-encode password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
if( rc <= sizeof(SHAdigest) ) {
|
if( rc <= sizeof(SHAdigest) ) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
@ -450,19 +450,19 @@ static int chk_sha512(
|
|||||||
unsigned char SHAdigest[SHA512_DIGEST_LENGTH];
|
unsigned char SHAdigest[SHA512_DIGEST_LENGTH];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) < sizeof(SHAdigest)) {
|
if (decode_len < sizeof(SHAdigest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base64 un-encode password */
|
/* base64 un-encode password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
if( rc != sizeof(SHAdigest) ) {
|
if( rc != sizeof(SHAdigest) ) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
|
@ -493,19 +493,19 @@ static int chk_ssha1(
|
|||||||
unsigned char SHA1digest[LUTIL_SHA1_BYTES];
|
unsigned char SHA1digest[LUTIL_SHA1_BYTES];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check -- must have some salt */
|
/* safety check -- must have some salt */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <= sizeof(SHA1digest)) {
|
if (decode_len <= sizeof(SHA1digest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* decode base64 password */
|
/* decode base64 password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
/* safety check -- must have some salt */
|
/* safety check -- must have some salt */
|
||||||
if (rc <= (int)(sizeof(SHA1digest))) {
|
if (rc <= (int)(sizeof(SHA1digest))) {
|
||||||
@ -538,19 +538,19 @@ static int chk_sha1(
|
|||||||
unsigned char SHA1digest[LUTIL_SHA1_BYTES];
|
unsigned char SHA1digest[LUTIL_SHA1_BYTES];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) < sizeof(SHA1digest)) {
|
if (decode_len < sizeof(SHA1digest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base64 un-encode password */
|
/* base64 un-encode password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
if( rc != sizeof(SHA1digest) ) {
|
if( rc != sizeof(SHA1digest) ) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
@ -580,19 +580,19 @@ static int chk_smd5(
|
|||||||
unsigned char MD5digest[LUTIL_MD5_BYTES];
|
unsigned char MD5digest[LUTIL_MD5_BYTES];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) <= sizeof(MD5digest)) {
|
if (decode_len <= sizeof(MD5digest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base64 un-encode password */
|
/* base64 un-encode password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
|
|
||||||
if (rc <= (int)(sizeof(MD5digest))) {
|
if (rc <= (int)(sizeof(MD5digest))) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
@ -625,19 +625,19 @@ static int chk_md5(
|
|||||||
unsigned char MD5digest[LUTIL_MD5_BYTES];
|
unsigned char MD5digest[LUTIL_MD5_BYTES];
|
||||||
int rc;
|
int rc;
|
||||||
unsigned char *orig_pass = NULL;
|
unsigned char *orig_pass = NULL;
|
||||||
|
size_t decode_len = LUTIL_BASE64_DECODE_LEN(passwd->bv_len);
|
||||||
|
|
||||||
/* safety check */
|
/* safety check */
|
||||||
if (LUTIL_BASE64_DECODE_LEN(passwd->bv_len) < sizeof(MD5digest)) {
|
if (decode_len < sizeof(MD5digest)) {
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* base64 un-encode password */
|
/* base64 un-encode password */
|
||||||
orig_pass = (unsigned char *) ber_memalloc( (size_t) (
|
orig_pass = (unsigned char *) ber_memalloc(decode_len + 1);
|
||||||
LUTIL_BASE64_DECODE_LEN(passwd->bv_len) + 1) );
|
|
||||||
|
|
||||||
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
if( orig_pass == NULL ) return LUTIL_PASSWD_ERR;
|
||||||
|
|
||||||
rc = lutil_b64_pton(passwd->bv_val, orig_pass, passwd->bv_len);
|
rc = lutil_b64_pton(passwd->bv_val, orig_pass, decode_len);
|
||||||
if ( rc != sizeof(MD5digest) ) {
|
if ( rc != sizeof(MD5digest) ) {
|
||||||
ber_memfree(orig_pass);
|
ber_memfree(orig_pass);
|
||||||
return LUTIL_PASSWD_ERR;
|
return LUTIL_PASSWD_ERR;
|
||||||
|
Loading…
Reference in New Issue
Block a user