#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
* @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.
*/
* @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.
*/
}
int fd = open("/", flags);
+ if (fd == OPEN_ERROR) {
+ perror("safe_open (open)");
+ return OPEN_ERROR;
+ }
+
if (strcmp(abspath, "/") == 0) {
return fd;
}
*
* @return
* - @c ACL_SUCCESS - The parent default ACL was inherited successfully.
- * - @c ACL_FAILURE - The target path is not a regular file/directory,
- * or the parent of @c path is not a directory.
+ * - @c ACL_FAILURE - If symlinks or hard links are encountered.
* - @c ACL_ERROR - Unexpected library error.
*/
int apply_default_acl_ex(const char* path,
*
* @return
* - @c ACL_SUCCESS - The parent default ACL was inherited successfully.
- * - @c ACL_FAILURE - The target path is not a regular file/directory,
+ * - @c ACL_FAILURE - If symlinks or hard links are encountered.
* or the parent of @c path is not a directory.
* - @c ACL_ERROR - Unexpected library error.
*/