diff options
Diffstat (limited to 'dbus/dbus-sysdeps.c')
| -rw-r--r-- | dbus/dbus-sysdeps.c | 36 | 
1 files changed, 36 insertions, 0 deletions
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index 96d51bed..fe747b8d 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -1131,6 +1131,42 @@ _dbus_string_parse_int (const DBusString *str,    return TRUE;  } +/** +* Checks to make sure the given directory is  +* private to the user  +* +* @param error error return +* @returns #FALSE on failure +**/ +dbus_bool_t +_dbus_check_dir_is_private_to_user (DBusString *dir, DBusError *error) +{ +  const char *directory; +  struct stat sb; +	 +  _DBUS_ASSERT_ERROR_IS_CLEAR (error); +     +  directory = _dbus_string_get_const_data (dir); +	 +  if (stat (directory, &sb) < 0) +    { +      dbus_set_error (error, _dbus_error_from_errno (errno), +                      "%s", _dbus_strerror (errno)); +    +      return FALSE; +    } +     +  if ((S_IROTH & sb.st_mode) || (S_IWOTH & sb.st_mode) || +      (S_IRGRP & sb.st_mode) || (S_IWGRP & sb.st_mode)) +    { +      dbus_set_error (error, DBUS_ERROR_FAILED, +                     "%s directory is not private to the user", directory); +      return FALSE; +    } +     +  return TRUE; +} +  #ifdef DBUS_BUILD_TESTS  /* Not currently used, so only built when tests are enabled */  /**  | 
