Fix regression introduced with NFSv4 ACL support - make acl_to_text(3)

and acl_calc_mask(3) return error instead of crashing when acl passed
to them is NULL.

Submitted by:	markus
Reviewed by:	rwatson
MFC after:	3 days
This commit is contained in:
Edward Tomasz Napierala 2009-09-01 18:30:17 +00:00
parent 2e7de50933
commit 59831d7595
2 changed files with 12 additions and 11 deletions

View File

@ -50,12 +50,6 @@ acl_calc_mask(acl_t *acl_p)
acl_t acl_new;
int i, mask_mode, mask_num;
if (!_acl_brand_may_be(*acl_p, ACL_BRAND_POSIX)) {
errno = EINVAL;
return (-1);
}
_acl_brand_as(*acl_p, ACL_BRAND_POSIX);
/*
* (23.4.2.4) requires acl_p to point to a pointer to a valid ACL.
* Since one of the primary reasons to use this function would be
@ -67,6 +61,13 @@ acl_calc_mask(acl_t *acl_p)
errno = EINVAL;
return (-1);
}
if (!_acl_brand_may_be(*acl_p, ACL_BRAND_POSIX)) {
errno = EINVAL;
return (-1);
}
_acl_brand_as(*acl_p, ACL_BRAND_POSIX);
acl_int = &(*acl_p)->ats_acl;
if ((acl_int->acl_cnt < 3) || (acl_int->acl_cnt > ACL_MAX_ENTRIES)) {
errno = EINVAL;

View File

@ -70,11 +70,6 @@ _posix1e_acl_to_text(acl_t acl, ssize_t *len_p, int flags)
if (buf == NULL)
return(NULL);
if (acl == NULL) {
errno = EINVAL;
return(NULL);
}
acl_int = &acl->ats_acl;
mask_perm = ACL_PERM_BITS; /* effective is regular if no mask */
@ -243,6 +238,11 @@ char *
acl_to_text_np(acl_t acl, ssize_t *len_p, int flags)
{
if (acl == NULL) {
errno = EINVAL;
return(NULL);
}
switch (_acl_brand(acl)) {
case ACL_BRAND_POSIX:
return (_posix1e_acl_to_text(acl, len_p, flags));