acl_create_entry: Don't invalidate existing entry_d and permset_d.
* sec_posixacl .cc (__acl_dup): Remove. (acl_dup): Fold __acl_dup functionality into this function. (acl_create_entry): Don't create new acl_t. Just realloc acl->entry to make room for new aclent_t. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
3d88f10983
commit
e4ecb5b96a
|
@ -48,22 +48,21 @@ acl_init (int count)
|
|||
return acl;
|
||||
}
|
||||
|
||||
static acl_t
|
||||
__acl_dup (acl_t acl, int max)
|
||||
extern "C" acl_t
|
||||
acl_dup (acl_t acl)
|
||||
{
|
||||
__try
|
||||
{
|
||||
acl_t new_acl = acl_init (max);
|
||||
acl_t new_acl = acl_init (acl->max_count);
|
||||
if (new_acl)
|
||||
{
|
||||
int new_idx = 0;
|
||||
uint16_t new_idx = 0;
|
||||
|
||||
for (uint16_t idx = 0; idx < acl->count; ++idx)
|
||||
if (acl->entry[idx].a_type != ACL_DELETED_TAG)
|
||||
new_acl->entry[new_idx++] = acl->entry[idx];
|
||||
new_acl->magic = ACL_MAGIC;
|
||||
new_acl->count = new_idx;
|
||||
new_acl->max_count = max;
|
||||
return new_acl;
|
||||
}
|
||||
}
|
||||
|
@ -72,12 +71,6 @@ __acl_dup (acl_t acl, int max)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
extern "C" acl_t
|
||||
acl_dup (acl_t acl)
|
||||
{
|
||||
return __acl_dup (acl, acl->max_count);
|
||||
}
|
||||
|
||||
extern "C" int
|
||||
acl_free (void *obj_p)
|
||||
{
|
||||
|
@ -159,12 +152,14 @@ acl_create_entry (acl_t *acl_p, acl_entry_t *entry_p)
|
|||
}
|
||||
if (acl->count >= acl->max_count)
|
||||
{
|
||||
acl_t new_acl = __acl_dup (acl, acl->count + 1);
|
||||
if (!new_acl)
|
||||
aclent_t *new_e;
|
||||
|
||||
new_e = (aclent_t *) realloc (acl->entry,
|
||||
_ENTRY_SIZE (acl->max_count + 1));
|
||||
if (!new_e)
|
||||
__leave;
|
||||
*acl_p = new_acl;
|
||||
acl_free (acl);
|
||||
acl = *acl_p;
|
||||
acl->entry = new_e;
|
||||
++acl->max_count;
|
||||
}
|
||||
idx = acl->count++;
|
||||
*entry_p = __to_entry (acl, idx);
|
||||
|
|
Loading…
Reference in New Issue