Blame libnfs4acl/nfs4_print_ace_verbose.c

Packit b0b924
/*
Packit b0b924
 *  NFSv4 ACL Code
Packit b0b924
 *  Print the contents of an nfs4 ACE
Packit b0b924
 *
Packit b0b924
 *  Permission mapping:
Packit b0b924
 *  r - NFS4_ACE_READ_DATA
Packit b0b924
 *  l - NFS4_ACE_LIST_DIRECTORY
Packit b0b924
 *  w - NFS4_ACE_WRITE_DATA
Packit b0b924
 *  f - NFS4_ACE_ADD_FILE
Packit b0b924
 *  a - NFS4_ACE_APPEND_DATA
Packit b0b924
 *  s - NFS4_ACE_ADD_SUBDIRECTORY
Packit b0b924
 *  n - NFS4_ACE_READ_NAMED_ATTRS
Packit b0b924
 *  N - NFS4_ACE_WRITE_NAMED_ATTRS
Packit b0b924
 *  x - NFS4_ACE_EXECUTE
Packit b0b924
 *  D - NFS4_ACE_DELETE_CHILD
Packit b0b924
 *  t - NFS4_ACE_READ_ATTRIBUTES
Packit b0b924
 *  T - NFS4_ACE_WRITE_ATTRIBUTES
Packit b0b924
 *  d - NFS4_ACE_DELETE
Packit b0b924
 *  c - NFS4_ACE_READ_ACL
Packit b0b924
 *  C - NFS4_ACE_WRITE_ACL
Packit b0b924
 *  o - NFS4_ACE_WRITE_OWNER
Packit b0b924
 *  y - NFS4_ACE_SYNCHRONIZE
Packit b0b924
 *
Packit b0b924
 *
Packit b0b924
 *  Copyright (c) 2002, 2003, 2006 The Regents of the University of Michigan.
Packit b0b924
 *  All rights reserved.
Packit b0b924
 *
Packit b0b924
 *  Nathaniel Gallaher <ngallahe@umich.edu>
Packit b0b924
 *  David M. Richter <richterd@citi.umich.edu>
Packit b0b924
 *
Packit b0b924
 *  Redistribution and use in source and binary forms, with or without
Packit b0b924
 *  modification, are permitted provided that the following conditions
Packit b0b924
 *  are met:
Packit b0b924
 *
Packit b0b924
 *  1. Redistributions of source code must retain the above copyright
Packit b0b924
 *     notice, this list of conditions and the following disclaimer.
Packit b0b924
 *  2. Redistributions in binary form must reproduce the above copyright
Packit b0b924
 *     notice, this list of conditions and the following disclaimer in the
Packit b0b924
 *     documentation and/or other materials provided with the distribution.
Packit b0b924
 *  3. Neither the name of the University nor the names of its
Packit b0b924
 *     contributors may be used to endorse or promote products derived
Packit b0b924
 *     from this software without specific prior written permission.
Packit b0b924
 *
Packit b0b924
 *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
Packit b0b924
 *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
Packit b0b924
 *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Packit b0b924
 *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
Packit b0b924
 *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
Packit b0b924
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
Packit b0b924
 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
Packit b0b924
 *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
Packit b0b924
 *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
Packit b0b924
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Packit b0b924
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit b0b924
 */
Packit b0b924
Packit b0b924
#include <stdio.h>
Packit b0b924
#include "libacl_nfs4.h"
Packit b0b924
Packit b0b924
int nfs4_print_ace_verbose(struct nfs4_ace * ace, u32 is_dir)
Packit b0b924
{
Packit b0b924
	int result;
Packit b0b924
	char * who;
Packit b0b924
	char * whotype_s;
Packit b0b924
	char * type_s;
Packit b0b924
	u32 flag;
Packit b0b924
	u32 whotype;
Packit b0b924
	u32 mask;
Packit b0b924
Packit b0b924
Packit b0b924
	result = acl_nfs4_get_who(ace, &whotype, &who);
Packit b0b924
	if (result != 0)
Packit b0b924
		goto unexp_failed;
Packit b0b924
Packit b0b924
	switch(whotype) {
Packit b0b924
		case NFS4_ACL_WHO_NAMED:
Packit b0b924
			whotype_s = "NFS4_ACL_WHO_NAMED";
Packit b0b924
			break;
Packit b0b924
		case NFS4_ACL_WHO_OWNER:
Packit b0b924
			whotype_s = "NFS4_ACL_WHO_OWNER";
Packit b0b924
			break;
Packit b0b924
		case NFS4_ACL_WHO_GROUP:
Packit b0b924
			whotype_s = "NFS4_ACL_WHO_GROUP";
Packit b0b924
			break;
Packit b0b924
		case NFS4_ACL_WHO_EVERYONE:
Packit b0b924
			whotype_s = "NFS4_ACL_WHO_EVERYONE";
Packit b0b924
			break;
Packit b0b924
		default:
Packit b0b924
			free(who);
Packit b0b924
			printf("Bad whotype: %d", whotype);
Packit b0b924
			goto unexp_failed;
Packit b0b924
	}
Packit b0b924
	printf("  Whotype:\t%s\n", whotype_s);
Packit b0b924
	printf("  Who:\t\t%s\n", who);
Packit b0b924
	free(who);
Packit b0b924
Packit b0b924
	switch(ace->type) {
Packit b0b924
		case NFS4_ACE_ACCESS_ALLOWED_ACE_TYPE:
Packit b0b924
			type_s = "ACCESS_ALLOWED";
Packit b0b924
			break;
Packit b0b924
		case NFS4_ACE_ACCESS_DENIED_ACE_TYPE:
Packit b0b924
			type_s = "ACCESS_DENIED";
Packit b0b924
			break;
Packit b0b924
		case NFS4_ACE_SYSTEM_AUDIT_ACE_TYPE:
Packit b0b924
			type_s = "SYSTEM_AUDIT";
Packit b0b924
			break;
Packit b0b924
		case NFS4_ACE_SYSTEM_ALARM_ACE_TYPE:
Packit b0b924
			type_s = "SYSTEM_ALARM";
Packit b0b924
			break;
Packit b0b924
		default:
Packit b0b924
			printf("Bad Ace Type:%d\n", ace->type);
Packit b0b924
			goto unexp_failed;
Packit b0b924
	}
Packit b0b924
	printf("  Type:\t\t%s\n", type_s);
Packit b0b924
Packit b0b924
Packit b0b924
	flag = ace->flag;
Packit b0b924
	printf("  Flags:\n");
Packit b0b924
Packit b0b924
	if (flag & NFS4_ACE_FILE_INHERIT_ACE)
Packit b0b924
		printf("\t\tNFS4_ACE_FILE_INHERIT_ACE\n");
Packit b0b924
	if (flag & NFS4_ACE_DIRECTORY_INHERIT_ACE)
Packit b0b924
		printf("\t\tNFS4_ACE_DIRECTORY_INHERIT_ACE\n");
Packit b0b924
	if (flag & NFS4_ACE_NO_PROPAGATE_INHERIT_ACE)
Packit b0b924
		printf("\t\tNFS4_ACE_NO_PROPAGATE_INHERIT_ACE\n");
Packit b0b924
	if (flag & NFS4_ACE_INHERIT_ONLY_ACE)
Packit b0b924
		printf("\t\tNFS4_ACE_INHERIT_ONLY_ACE\n");
Packit b0b924
	if (flag & NFS4_ACE_SUCCESSFUL_ACCESS_ACE_FLAG)
Packit b0b924
		printf("\t\tNFS4_ACE_SUCCESSFUL_ACCESS_ACE_FLAG\n");
Packit b0b924
	if (flag & NFS4_ACE_FAILED_ACCESS_ACE_FLAG)
Packit b0b924
		printf("\t\tNFS4_ACE_FAILED_ACCESS_ACE_FLAG\n");
Packit b0b924
	if (flag & NFS4_ACE_IDENTIFIER_GROUP)
Packit b0b924
		printf("\t\tNFS4_ACE_IDENTIFIER_GROUP\n");
Packit Service 39b1a3
	if (flag & NFS4_ACE_OWNER)
Packit Service 39b1a3
		printf("\t\tNFS4_ACE_OWNER\n");
Packit Service 39b1a3
	if (flag & NFS4_ACE_GROUP)
Packit Service 39b1a3
		printf("\t\tNFS4_ACE_GROUP\n");
Packit Service 39b1a3
	if (flag & NFS4_ACE_EVERYONE)
Packit Service 39b1a3
		printf("\t\tNFS4_ACE_EVERYONE\n");
Packit b0b924
Packit b0b924
Packit b0b924
	mask = ace->access_mask;
Packit b0b924
	printf("  Perms:\t");
Packit b0b924
Packit b0b924
	if (is_dir & NFS4_ACL_ISDIR) {
Packit b0b924
		if (mask & NFS4_ACE_LIST_DIRECTORY)
Packit b0b924
			printf("l");
Packit b0b924
		if (mask & NFS4_ACE_ADD_FILE)
Packit b0b924
			printf("f");
Packit b0b924
		if (mask & NFS4_ACE_ADD_SUBDIRECTORY)
Packit b0b924
			printf("s");
Packit b0b924
		if (mask & NFS4_ACE_DELETE_CHILD)
Packit b0b924
			printf("D");
Packit b0b924
	} else {
Packit b0b924
		if (mask & NFS4_ACE_READ_DATA)
Packit b0b924
			printf("r");
Packit b0b924
		if (mask & NFS4_ACE_WRITE_DATA)
Packit b0b924
			printf("w");
Packit b0b924
		if (mask & NFS4_ACE_APPEND_DATA)
Packit b0b924
			printf("a");
Packit b0b924
	}
Packit b0b924
	if (mask & NFS4_ACE_READ_NAMED_ATTRS)
Packit b0b924
		printf("n");
Packit b0b924
	if (mask & NFS4_ACE_WRITE_NAMED_ATTRS)
Packit b0b924
		printf("N");
Packit b0b924
	if (mask & NFS4_ACE_EXECUTE)
Packit b0b924
		printf("x");
Packit b0b924
	if (mask & NFS4_ACE_READ_ATTRIBUTES)
Packit b0b924
		printf("t");
Packit b0b924
	if (mask & NFS4_ACE_WRITE_ATTRIBUTES)
Packit b0b924
		printf("T");
Packit b0b924
	if (mask & NFS4_ACE_DELETE)
Packit b0b924
		printf("d");
Packit b0b924
	if (mask & NFS4_ACE_READ_ACL)
Packit b0b924
		printf("c");
Packit b0b924
	if (mask & NFS4_ACE_WRITE_ACL)
Packit b0b924
		printf("C");
Packit b0b924
	if (mask & NFS4_ACE_WRITE_OWNER)
Packit b0b924
		printf("o");
Packit b0b924
	if (mask & NFS4_ACE_SYNCHRONIZE)
Packit b0b924
		printf("y");
Packit b0b924
	printf("\n");
Packit b0b924
Packit b0b924
	return 0;
Packit b0b924
Packit b0b924
unexp_failed:
Packit b0b924
	return -1;
Packit b0b924
}
Packit b0b924