Changeset View
Changeset View
Standalone View
Standalone View
bin/getfacl/getfacl.c
Show First 20 Lines • Show All 169 Lines • ▼ Show 20 Lines | if (acl_add_perm(perms, ACL_EXECUTE) == -1) | ||||
return NULL; | return NULL; | ||||
if (acl_set_permset(entry, perms) == -1) | if (acl_set_permset(entry, perms) == -1) | ||||
return NULL; | return NULL; | ||||
return(acl); | return(acl); | ||||
} | } | ||||
static int | static int | ||||
print_acl(char *path, acl_type_t type, int hflag, int iflag, int nflag, | print_acl(char *path, acl_type_t type, int hflag, int fflag, int iflag, | ||||
int qflag, int vflag) | int nflag, int qflag, int vflag) | ||||
{ | { | ||||
struct stat sb; | struct stat sb; | ||||
acl_t acl; | acl_t acl; | ||||
acl_aclflag_t aclflag; | |||||
char *acl_text; | char *acl_text; | ||||
int error, flags = 0, ret; | int error, flags = 0, ret; | ||||
if (hflag) | if (hflag) | ||||
error = lstat(path, &sb); | error = lstat(path, &sb); | ||||
else | else | ||||
error = stat(path, &sb); | error = stat(path, &sb); | ||||
if (error == -1) { | if (error == -1) { | ||||
Show All 40 Lines | if (type == ACL_TYPE_DEFAULT) | ||||
return(0); | return(0); | ||||
acl = acl_from_stat(&sb); | acl = acl_from_stat(&sb); | ||||
if (!acl) { | if (!acl) { | ||||
warn("%s: acl_from_stat() failed", path); | warn("%s: acl_from_stat() failed", path); | ||||
return(-1); | return(-1); | ||||
} | } | ||||
} | } | ||||
if (!qflag && fflag) { | |||||
ret = acl_get_aclflag_np(acl, &aclflag); | |||||
printf("# acl_flag: "); | |||||
switch(aclflag) { | |||||
case ACL_ACLFLAG_AUTO_INHERIT: | |||||
printf("auto-inherit\n"); | |||||
break; | |||||
case ACL_ACLFLAG_PROTECTED: | |||||
printf("protected\n"); | |||||
break; | |||||
case ACL_ACLFLAG_DEFAULTED: | |||||
printf("defaulted\n"); | |||||
break; | |||||
default: | |||||
printf("None\n"); | |||||
trasz: Should this be upper case? | |||||
} | |||||
} | |||||
if (iflag) | if (iflag) | ||||
flags |= ACL_TEXT_APPEND_ID; | flags |= ACL_TEXT_APPEND_ID; | ||||
if (nflag) | if (nflag) | ||||
flags |= ACL_TEXT_NUMERIC_IDS; | flags |= ACL_TEXT_NUMERIC_IDS; | ||||
if (vflag) | if (vflag) | ||||
flags |= ACL_TEXT_VERBOSE; | flags |= ACL_TEXT_VERBOSE; | ||||
acl_text = acl_to_text_np(acl, 0, flags); | acl_text = acl_to_text_np(acl, 0, flags); | ||||
if (!acl_text) { | if (!acl_text) { | ||||
warn("%s: acl_to_text_np() failed", path); | warn("%s: acl_to_text_np() failed", path); | ||||
return(-1); | return(-1); | ||||
} | } | ||||
printf("%s", acl_text); | printf("%s", acl_text); | ||||
(void)acl_free(acl); | (void)acl_free(acl); | ||||
(void)acl_free(acl_text); | (void)acl_free(acl_text); | ||||
return(0); | return(0); | ||||
} | } | ||||
static int | static int | ||||
print_acl_from_stdin(acl_type_t type, int hflag, int iflag, int nflag, | print_acl_from_stdin(acl_type_t type, int hflag, int fflag, int iflag, | ||||
int qflag, int vflag) | int nflag, int qflag, int vflag) | ||||
{ | { | ||||
char *p, pathname[PATH_MAX]; | char *p, pathname[PATH_MAX]; | ||||
int carried_error = 0; | int carried_error = 0; | ||||
while (fgets(pathname, (int)sizeof(pathname), stdin)) { | while (fgets(pathname, (int)sizeof(pathname), stdin)) { | ||||
if ((p = strchr(pathname, '\n')) != NULL) | if ((p = strchr(pathname, '\n')) != NULL) | ||||
*p = '\0'; | *p = '\0'; | ||||
if (print_acl(pathname, type, hflag, iflag, nflag, | if (print_acl(pathname, type, hflag, fflag, iflag, | ||||
qflag, vflag) == -1) { | nflag, qflag, vflag) == -1) { | ||||
carried_error = -1; | carried_error = -1; | ||||
} | } | ||||
} | } | ||||
return(carried_error); | return(carried_error); | ||||
} | } | ||||
int | int | ||||
main(int argc, char *argv[]) | main(int argc, char *argv[]) | ||||
{ | { | ||||
acl_type_t type = ACL_TYPE_ACCESS; | acl_type_t type = ACL_TYPE_ACCESS; | ||||
int carried_error = 0; | int carried_error = 0; | ||||
int ch, error, i; | int ch, error, i; | ||||
int hflag, iflag, qflag, nflag, vflag; | int hflag, iflag, qflag, nflag, vflag, fflag; | ||||
hflag = 0; | hflag = 0; | ||||
iflag = 0; | iflag = 0; | ||||
qflag = 0; | qflag = 0; | ||||
nflag = 0; | nflag = 0; | ||||
vflag = 0; | vflag = 0; | ||||
while ((ch = getopt(argc, argv, "dhinqv")) != -1) | fflag = 0; | ||||
while ((ch = getopt(argc, argv, "dfhinqv")) != -1) | |||||
switch(ch) { | switch(ch) { | ||||
case 'd': | case 'd': | ||||
type = ACL_TYPE_DEFAULT; | type = ACL_TYPE_DEFAULT; | ||||
break; | break; | ||||
case 'h': | case 'h': | ||||
hflag = 1; | hflag = 1; | ||||
break; | break; | ||||
case 'f': | |||||
fflag = 1; | |||||
break; | |||||
case 'i': | case 'i': | ||||
iflag = 1; | iflag = 1; | ||||
break; | break; | ||||
case 'n': | case 'n': | ||||
nflag = 1; | nflag = 1; | ||||
break; | break; | ||||
case 'q': | case 'q': | ||||
qflag = 1; | qflag = 1; | ||||
break; | break; | ||||
case 'v': | case 'v': | ||||
vflag = 1; | vflag = 1; | ||||
break; | break; | ||||
default: | default: | ||||
usage(); | usage(); | ||||
return(-1); | return(-1); | ||||
} | } | ||||
argc -= optind; | argc -= optind; | ||||
argv += optind; | argv += optind; | ||||
if (argc == 0) { | if (argc == 0) { | ||||
error = print_acl_from_stdin(type, hflag, iflag, nflag, | error = print_acl_from_stdin(type, hflag, fflag, iflag, nflag, | ||||
qflag, vflag); | qflag, vflag); | ||||
return(error ? 1 : 0); | return(error ? 1 : 0); | ||||
} | } | ||||
for (i = 0; i < argc; i++) { | for (i = 0; i < argc; i++) { | ||||
if (!strcmp(argv[i], "-")) { | if (!strcmp(argv[i], "-")) { | ||||
error = print_acl_from_stdin(type, hflag, iflag, nflag, | error = print_acl_from_stdin(type, hflag, fflag, iflag, | ||||
qflag, vflag); | nflag, qflag, vflag); | ||||
if (error == -1) | if (error == -1) | ||||
carried_error = -1; | carried_error = -1; | ||||
} else { | } else { | ||||
error = print_acl(argv[i], type, hflag, iflag, nflag, | error = print_acl(argv[i], type, hflag, fflag, iflag, | ||||
qflag, vflag); | nflag, qflag, vflag); | ||||
if (error == -1) | if (error == -1) | ||||
carried_error = -1; | carried_error = -1; | ||||
} | } | ||||
} | } | ||||
return(carried_error ? 1 : 0); | return(carried_error ? 1 : 0); | ||||
} | } |
Should this be upper case?