* dbus/dbus-sysdeps.h:

* dbus/dbus-sysdeps-unix.c: Add function
	_dbus_make_file_world_readable that chmods a file to 0644.

	* dbus/dbus-sysdeps-unix.c (_dbus_get_autolaunch_address):
        Avoid writing to the static "argv" array, thereby avoiding a
        COW on the child process.

	* dbus/dbus-internals.c (_dbus_create_uuid_file_exclusively):
        call _dbus_make_file_world_readable on the created file.
This commit is contained in:
Thiago Macieira 2006-10-24 20:25:01 +00:00
parent cb905b58f0
commit 9bb44a470f
4 changed files with 48 additions and 4 deletions

View file

@ -1,3 +1,16 @@
2006-10-24 Thiago Macieira <thiago@kde.org>
* dbus/dbus-sysdeps.h:
* dbus/dbus-sysdeps-unix.c: Add function
_dbus_make_file_world_readable that chmods a file to 0644.
* dbus/dbus-sysdeps-unix.c (_dbus_get_autolaunch_address):
Avoid writing to the static "argv" array, thereby avoiding a
COW on the child process.
* dbus/dbus-internals.c (_dbus_create_uuid_file_exclusively):
call _dbus_make_file_world_readable on the created file.
2006-10-23 David Zeuthen <davidz@redhat.com>
* dbus/dbus-memory.c: Use atomic variable to protect

View file

@ -639,6 +639,8 @@ _dbus_create_uuid_file_exclusively (const DBusString *filename,
if (!_dbus_string_save_to_file (&encoded, filename, error))
goto error;
if (!_dbus_make_file_world_readable (filename, error))
goto error;
_dbus_string_free (&encoded);

View file

@ -1802,6 +1802,33 @@ _dbus_string_save_to_file (const DBusString *str,
return retval;
}
/** Makes the file readable by every user in the system.
*
* @param filename the filename
* @param error error location
* @returns #TRUE if the file's permissions could be changed.
*/
dbus_bool_t
_dbus_make_file_world_readable(const DBusString *filename,
DBusError *error)
{
const char *filename_c;
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
filename_c = _dbus_string_get_const_data (filename);
if (chmod (filename_c, 0644) == -1)
{
dbus_set_error (error,
DBUS_ERROR_FAILED,
"Could not change permissions of file %s: %s\n",
filename_c,
_dbus_strerror (errno));
return FALSE;
}
return TRUE;
}
/** Creates the given file, failing if the file already exists.
*
* @param filename the filename
@ -2361,11 +2388,11 @@ _dbus_get_autolaunch_address (DBusString *address,
}
i = 0;
argv[i] = DBUS_BINDIR "/dbus-launch";
argv[i] = "dbus-launch";
++i;
argv[i] = "--autolaunch";
++i;
argv[i] = /* const cast */ (char*) _dbus_string_get_const_data (&uuid);
argv[i] = _dbus_string_get_data (&uuid);
++i;
argv[i] = "--binary-syntax";
++i;
@ -2423,10 +2450,9 @@ _dbus_get_autolaunch_address (DBusString *address,
close (fd);
close (address_pipe[WRITE_END]);
execv (argv[0], argv);
execv (DBUS_BINDIR "/dbus-launch", argv);
/* failed, try searching PATH */
argv[0] = "dbus-launch";
execvp ("dbus-launch", argv);
/* still nothing, we failed */

View file

@ -273,6 +273,9 @@ dbus_bool_t _dbus_string_save_to_file (const DBusString *str,
const DBusString *filename,
DBusError *error);
dbus_bool_t _dbus_make_file_world_readable (const DBusString *filename,
DBusError *error);
dbus_bool_t _dbus_create_file_exclusively (const DBusString *filename,
DBusError *error);
dbus_bool_t _dbus_delete_file (const DBusString *filename,