]> gitweb.michael.orlitzky.com - apply-default-acl.git/commitdiff
Add various NULL pointer checks for good measure.
authorMichael Orlitzky <michael@orlitzky.com>
Tue, 27 Feb 2018 23:02:21 +0000 (18:02 -0500)
committerMichael Orlitzky <michael@orlitzky.com>
Tue, 27 Feb 2018 23:02:21 +0000 (18:02 -0500)
src/apply-default-acl.c
src/libadacl.c

index ea3ef6491a2d1ab374d707f86822439c21809be3..bebb27c9907cb43f4bfb43599b483b5c568c189d 100644 (file)
@@ -9,6 +9,7 @@
 #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() */
@@ -67,6 +68,11 @@ bool path_accessible(const char* path) {
  *
  */
 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");
   printf("Usage: %s [flags] <target1> [<target2> [ <target3>...]]\n\n",
@@ -96,6 +102,13 @@ int apply_default_acl_nftw(const char *target,
                           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? */
     return ACL_ERROR;
@@ -119,6 +132,12 @@ int apply_default_acl_nftw_x(const char *target,
                             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? */
     return ACL_ERROR;
@@ -148,6 +167,12 @@ int apply_default_acl_nftw_x(const char *target,
  *   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;
 
index a1923601669b66efb0ffa45e62a9b73695354ddb..5402a32be0ac3ca03a535aa40bf049ef1eabca3f 100644 (file)
  *   and @c OPEN_ERROR if not.
  */
 int safe_open_ex(int at_fd, char* pathname, int flags) {
-  /* We're only called by safe_open(), so pathname is guaranteed to be
-     non-NULL */
+  if (pathname == NULL) {
+    errno = EINVAL;
+    perror("safe_open_ex (args)");
+    return OPEN_ERROR;
+  }
+
   if (strlen(pathname) == 0) {
     /* Oops, went one level to deep with nothing to do. */
     return at_fd;
@@ -210,6 +214,11 @@ int safe_open(const char* pathname, int flags) {
  *
  */
 int acl_set_entry(acl_t* aclp, acl_entry_t entry) {
+  if (aclp == NULL || entry == NULL) {
+    errno = EINVAL;
+    perror("acl_set_entry (args)");
+    return ACL_ERROR;
+  }
 
   acl_tag_t entry_tag;
   if (acl_get_tag_type(entry, &entry_tag) == ACL_ERROR) {
@@ -358,6 +367,11 @@ int acl_entry_count(acl_t acl) {
  *   - @c ACL_ERROR - Unexpected library error
  */
 int acl_is_minimal(acl_t acl) {
+  if (acl == NULL) {
+    errno = EINVAL;
+    perror("acl_is_minimal (args)");
+    return ACL_ERROR;
+  }
 
   int ec = acl_entry_count(acl);
 
@@ -388,6 +402,11 @@ int acl_is_minimal(acl_t acl) {
  *   - @c ACL_ERROR - Unexpected library error.
  */
 int acl_execute_masked(acl_t acl) {
+  if (acl == NULL) {
+    errno = EINVAL;
+    perror("acl_execute_masked (args)");
+    return ACL_ERROR;
+  }
 
   acl_entry_t entry;
   int ge_result = acl_get_entry(acl, ACL_FIRST_ENTRY, &entry);
@@ -451,6 +470,12 @@ int acl_execute_masked(acl_t acl) {
  *   - @c ACL_ERROR - Unexpected library error.
  */
 int any_can_execute(int fd, const struct stat* sp) {
+  if (sp == NULL) {
+    errno = EINVAL;
+    perror("any_can_execute (args)");
+    return ACL_ERROR;
+  }
+
   acl_t acl = acl_get_fd(fd);
 
   if (acl == (acl_t)NULL) {
@@ -548,8 +573,7 @@ int any_can_execute(int fd, const struct stat* sp) {
  *   - @c ACL_ERROR - Unexpected library error.
  */
 int assign_default_acl(const char* path, acl_t acl) {
-
-  if (path == NULL) {
+  if (path == NULL || acl == NULL) {
     errno = EINVAL;
     perror("assign_default_acl (args)");
     return ACL_ERROR;