X-Git-Url: https://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2Flibadacl.c;h=21b8141cbbc0158a3c6cfce3e985838bed1e20ce;hb=aaf323d45b5c2043acd64b7e6b8b1fea1664dd0b;hp=b25a43b38cba13d055f26ca848241e041fb6d1c7;hpb=81233b65dc8bbccba15394751f240ad59f15f342;p=apply-default-acl.git diff --git a/src/libadacl.c b/src/libadacl.c index b25a43b..21b8141 100644 --- a/src/libadacl.c +++ b/src/libadacl.c @@ -26,6 +26,15 @@ #include "libadacl.h" +/* Even though most other library functions reliably return -1 for + * error, it feels a little wrong to re-use the ACL_ERROR constant. + */ +#define CLOSE_ERROR -1 +#define OPEN_ERROR -1 +#define SNPRINTF_ERROR -1 +#define STAT_ERROR -1 + + /** * @brief The recursive portion of the @c safe_open function, used to * open a file descriptor in a symlink-safe way when combined with @@ -37,6 +46,9 @@ * @param pathname * The path to the file/directory/whatever whose descriptor you want. * + * @param flags + * File status flags to be passed to @c openat. + * * @return a file descriptor for @c pathname if everything goes well, * and @c OPEN_ERROR if not. */ @@ -97,6 +109,9 @@ int safe_open_ex(int at_fd, char* pathname, int flags) { * @param pathname * The path to the file/directory/whatever whose descriptor you want. * + * @param flags + * File status flags to be passed to @c openat. + * * @return a file descriptor for @c pathname if everything goes well, * and @c OPEN_ERROR if not. */ @@ -145,6 +160,11 @@ int safe_open(const char* pathname, int flags) { } int fd = open("/", flags); + if (fd == OPEN_ERROR) { + perror("safe_open (open)"); + return OPEN_ERROR; + } + if (strcmp(abspath, "/") == 0) { return fd; }