diff options
author | rwatson <rwatson@FreeBSD.org> | 2001-03-19 18:09:25 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2001-03-19 18:09:25 +0000 |
commit | 4978ee9a87e5510a56defc3e556c4a2c31a7bdc4 (patch) | |
tree | a21327f2f0786874aabdb6afb6408653ae46e0b6 /bin/setfacl/file.c | |
parent | d98c5293d7c959bbef954c5c8e9c97d67138634f (diff) | |
download | FreeBSD-src-4978ee9a87e5510a56defc3e556c4a2c31a7bdc4.zip FreeBSD-src-4978ee9a87e5510a56defc3e556c4a2c31a7bdc4.tar.gz |
o POSIX.2c Userland tool support for POSIX.1e ACLs -- getfacl retrieves ACLs
from files and directories, and setfacl sets ACLs on files and directories.
Submitted by: jedgar
Obtained from: TrustedBSD Project
Diffstat (limited to 'bin/setfacl/file.c')
-rw-r--r-- | bin/setfacl/file.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/bin/setfacl/file.c b/bin/setfacl/file.c new file mode 100644 index 0000000..776efdc --- /dev/null +++ b/bin/setfacl/file.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2001 Chris D. Faulhaber + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR THE VOICES IN HIS HEAD BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include <sys/types.h> +#include <sys/acl.h> + +#include <err.h> +#include <stdio.h> +#include <string.h> +#include <sysexits.h> + +#include "setfacl.h" + +/* read acl text from a file and return the corresponding acl */ +acl_t +get_acl_from_file(const char *filename) +{ + FILE *file; + char buf[BUFSIZ]; + + if (!filename) + err(EX_USAGE, "(null) filename in get_acl_from_file()"); + + bzero(&buf, sizeof(buf)); + + if (!strcmp(filename, "-")) { + if (have_stdin) + err(EX_USAGE, "cannot specify more than one stdin"); + file = stdin; + have_stdin = 1; + } else { + file = fopen(filename, "r"); + if (!file) + err(EX_OSERR, "fopen() %s failed", filename); + } + + fread(buf, sizeof(buf), 1, file); + if (ferror(file)) { + fclose(file); + err(EX_USAGE, "error reading from %s", filename); + } else if (!feof(file)) { + fclose(file); + errx(EX_USAGE, "line too long in %s", filename); + } + + fclose(file); + + return acl_from_text(buf); +} |