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