Re: [PATCH] dispol: display operations as ranges

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 04/27/2015 06:05 PM, Jeff Vander Stoep wrote:
> Displays operations ranges more concisely. E.g.
> 
> { 0x8901-0x8930 }
> 
> instead of
> 
> { 0x8901 0x8902 0x8903 0x8904 80x8905 0x0806 ... 0x8930 }
> ---
>  checkpolicy/test/dispol.c | 33 ++++++++++++++++++++++++++++++---
>  1 file changed, 30 insertions(+), 3 deletions(-)

Thanks, applied.

> 
> diff --git a/checkpolicy/test/dispol.c b/checkpolicy/test/dispol.c
> index 133759f..157361a 100644
> --- a/checkpolicy/test/dispol.c
> +++ b/checkpolicy/test/dispol.c
> @@ -55,23 +55,50 @@ int render_access_mask(uint32_t mask, avtab_key_t * key, policydb_t * p,
>  }
>  
>  #define operation_perm_test(x, p) (1 & (p[x >> 5] >> (x & 0x1f)))
> +#define next_bit_in_range(i, p) \
> +	((i + 1 < sizeof(p)*8) && operation_perm_test((i + 1), p))
>  
>  int render_operations(avtab_operations_t *ops, avtab_key_t * key, FILE * fp)
>  {
>  	uint16_t value;
> -	unsigned int bit = 0;
> +	uint16_t low_bit;
> +	uint16_t low_value;
> +	unsigned int bit;
> +	unsigned int in_range = 0;
>  
>  	fprintf(fp, "{ ");
>  	for (bit = 0; bit < sizeof(ops->perms)*8; bit++) {
>  		if (!operation_perm_test(bit, ops->perms))
>  			continue;
> +
> +		if (in_range && next_bit_in_range(bit, ops->perms)) {
> +			/* continue until high value found */
> +			continue;
> +		} else if (next_bit_in_range(bit, ops->perms)) {
> +			/* low value */
> +			low_bit = bit;
> +			in_range = 1;
> +			continue;
> +		}
> +
>  		if (key->specified & AVTAB_OPNUM) {
>  			value = ops->type<<8 | bit;
> -			fprintf(fp, "0x%hx ", value);
> +			low_value = ops->type<<8 | low_bit;
> +			if (in_range)
> +				fprintf(fp, "0x%hx-0x%hx ", low_value, value);
> +			else
> +				fprintf(fp, "0x%hx ", value);
>  		} else if (key->specified & AVTAB_OPTYPE) {
>  			value = bit << 8;
> -			fprintf(fp, "0x%hx-0x%hx ", value, value|0xff);
> +			low_value = low_bit << 8;
> +			if (in_range)
> +				fprintf(fp, "0x%hx-0x%hx ", low_value, (uint16_t) (value|0xff));
> +			else
> +				fprintf(fp, "0x%hx-0x%hx ", value, (uint16_t) (value|0xff));
> +
>  		}
> +		if (in_range)
> +			in_range = 0;
>  	}
>  	fprintf(fp, "}");
>  	return 0;
> 

_______________________________________________
Selinux mailing list
Selinux@xxxxxxxxxxxxx
To unsubscribe, send email to Selinux-leave@xxxxxxxxxxxxx.
To get help, send an email containing "help" to Selinux-request@xxxxxxxxxxxxx.




[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux