|
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 |
|