#define _XOPEN_SOURCE 500
#define _GNU_SOURCE
+#include <errno.h> /* EINVAL */
#include <fcntl.h> /* AT_FOO constants */
#include <ftw.h> /* nftw() et al. */
#include <getopt.h> /* getopt_long() */
*
*/
void usage(const char* program_name) {
+ if (program_name == NULL) {
+ /* ??? */
+ return;
+ }
+
printf("Apply any applicable default ACLs to the given files or "
- "directories.\n\n");
+ "directories.\n\n");
printf("Usage: %s [flags] <target1> [<target2> [ <target3>...]]\n\n",
- program_name);
+ program_name);
printf("Flags:\n");
printf(" -h, --help Print this help message\n");
printf(" -r, --recursive Act on any given directories recursively\n");
*
*/
int apply_default_acl_nftw(const char *target,
- const struct stat *sp,
- int info,
- struct FTW *ftw) {
+ const struct stat *sp,
+ int info,
+ struct FTW *ftw) {
+
+ if (target == NULL) {
+ errno = EINVAL;
+ perror("apply_default_acl_nftw (args)");
+ return ACL_ERROR;
+ }
+
if (apply_default_acl_ex(target, sp, false) == ACL_ERROR) {
/* I guess we do want to bail out for serious/unexpected errors? */
*
*/
int apply_default_acl_nftw_x(const char *target,
- const struct stat *sp,
- int info,
- struct FTW *ftw) {
+ const struct stat *sp,
+ int info,
+ struct FTW *ftw) {
+
+ if (target == NULL) {
+ errno = EINVAL;
+ perror("apply_default_acl_nftw_x (args)");
+ return ACL_ERROR;
+ }
if (apply_default_acl_ex(target, sp, true) == ACL_ERROR) {
/* I guess we do want to bail out for serious/unexpected errors? */
* then we return @c ACL_ERROR. Otherwise, we return @c ACL_SUCCESS.
*/
int apply_default_acl_recursive(const char *target, bool no_exec_mask) {
+ if (target == NULL) {
+ errno = EINVAL;
+ perror("apply_default_acl_recursive (args)");
+ return ACL_ERROR;
+ }
+
int max_levels = 256;
int flags = FTW_MOUNT | FTW_PHYS;