diff options
author | Havoc Pennington <hp@redhat.com> | 2003-04-18 17:45:34 +0000 |
---|---|---|
committer | Havoc Pennington <hp@redhat.com> | 2003-04-18 17:45:34 +0000 |
commit | d3fb6f35716ff1d6f6644dea2043d539007811de (patch) | |
tree | 46716f651f7e3d1ab87d427ac192de409aafb28a /dbus/dbus-sysdeps.c | |
parent | e0b284c7e38f0c002b2173d85ab89dc18700867c (diff) |
2003-04-18 Havoc Pennington <hp@pobox.com>
* dbus/dbus-auth.c (record_mechanisms): memleak fixes
* dbus/dbus-sysdeps.c (_dbus_string_save_to_file): fix some
memleaks
* dbus/dbus-keyring.c (add_new_key): fix a memleak, and
on realloc be sure to update the pointer in the keyring
* dbus/dbus-string.c (_dbus_string_zero): compensate for align
offset to avoid writing to unallocated memory
* dbus/dbus-auth.c (process_rejected): return FALSE if we fail to
try the next mechanism, so we properly handle OOM
* dbus/dbus-keyring.c (_dbus_keyring_new_homedir): fix double-free
on OOM.
(_dbus_keyring_new): fix OOM bug
(_dbus_keyring_new_homedir): always set error; impose a maximum
number of keys we'll load from the file, mostly to speed up the
test suite and make its OOM checks more useful, but also for
general sanity.
* dbus/dbus-auth.c (process_error_server): reject authentication
if we get an error from the client
(process_cancel): on cancel, send REJECTED, per the spec
(process_error_client): send CANCEL if we get an error from the
server.
Diffstat (limited to 'dbus/dbus-sysdeps.c')
-rw-r--r-- | dbus/dbus-sysdeps.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index e546c4be..62aa0b4b 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -1455,7 +1455,18 @@ fill_user_info (DBusUserInfo *info, buf = new; - getgrouplist (username_c, info->primary_gid, buf, &buf_count); + errno = 0; + if (getgrouplist (username_c, info->primary_gid, buf, &buf_count) < 0) + { + dbus_set_error (error, + _dbus_error_from_errno (errno), + "Failed to get groups for username \"%s\" primary GID " + DBUS_GID_FORMAT ": %s\n", + username_c, info->primary_gid, + _dbus_strerror (errno)); + dbus_free (buf); + goto failed; + } } info->group_ids = dbus_new (dbus_gid_t, buf_count); @@ -2121,12 +2132,14 @@ _dbus_string_save_to_file (const DBusString *str, if (!_dbus_string_copy (filename, 0, &tmp_filename, 0)) { dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); + _dbus_string_free (&tmp_filename); return FALSE; } if (!_dbus_string_append (&tmp_filename, ".")) { dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); + _dbus_string_free (&tmp_filename); return FALSE; } @@ -2134,6 +2147,7 @@ _dbus_string_save_to_file (const DBusString *str, if (!_dbus_generate_random_ascii (&tmp_filename, N_TMP_FILENAME_RANDOM_BYTES)) { dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); + _dbus_string_free (&tmp_filename); return FALSE; } |