fd.o bug #11678 Don't error out if compiler does not support vararg macros
* _dbus_verbose is the only function that does this so make it a noop if
vararg macros are not supported
* https://bugs.freedesktop.org/show_bug.cgi?id=11678
fd.o bug #12429 Reverse check to setpcap and only init audit if we were root
* patch by Dan Walsh <dwalsh@redhat.com>
* https://bugs.freedesktop.org/show_bug.cgi?id=12429
* Reverse we_were_root check to setpcap if we were root. Also only init
audit if we were root. So error dbus message will not show up when policy
reload happens. dbus -session will no longer try to send audit message,
only system will.
* For security reasons we want possition independent code for libraries
and possition independent executable for executables
* before we were just enabling -fPIC
* now we correctly enable -fPIC and -PIE for libdbus and the bus respectively
* propper LD_FLAGS are set for each also
Ryan Lortie [Thu, 20 Sep 2007 17:04:38 +0000 (13:04 -0400)]
Add argument path matching support. Bug #11066.
2007-09-20 Ryan Lortie <desrt@desrt.ca>
* dbus/signals.c (struct DBusMatchRule, bus_match_rule_new,
bus_match_rule_set_arg, bus_match_rule_parse_arg_match,
match_rule_matches): Add support for parsing and matching on
arg0path='/some/path' type rules.
* dbus/signals.h (bus_match_rule_set_arg): change to take const
DBusString instead of const char * for the string to match against.
* dbus/dbus-bus.c: add a quick note to dbus_bus_add_match
documentation about the path matching.
* doc/dbus-specification.xml: add a more detailed description of the
changes here.
Havoc Pennington [Fri, 17 Aug 2007 16:43:57 +0000 (16:43 +0000)]
2007-08-17 Havoc Pennington <hp@redhat.com>
* tools/dbus-launch-x11.c (set_address_in_x11): fix from Michael
Lorenz to use long not int with XChangeProperty format 32
* dbus/dbus-sysdeps-util-unix.c
(_dbus_write_pid_to_file_and_pipe): factor this out, and use the
same code in _dbus_become_daemon (where the parent writes the pid
file and to the pid pipe) and in bus_context_new (where the daemon
writes its own pid file and to its own pid pipe)
* bus/bus.c (bus_context_new): close the pid pipe after we print
to it. Also, don't write the pid to the pipe twice when we fork,
someone reported this bug a long time ago.
* configure.in: add major/minor/micro version number AC_SUBST
* dbus/dbus-arch-deps.h.in (DBUS_MAJOR_VERSION,
DBUS_MINOR_VERSION, DBUS_MICRO_VERSION, DBUS_VERSION_STRING,
DBUS_VERSION): collection of macros to get version of library we
are compiled against.
* dbus/dbus-misc.c (dbus_get_version): new function, to get
version of library we are linked against at runtime.
* bus/activation-helper.c (check_bus_name): don't use
_dbus_check_valid_bus_name() which is only around with
--enable-checks, instead use _dbus_validate_bus_name().
Bug #11766 from Diego <diego@pemas.net>
* bus/config-parser-trivial.c (check_return_values): disable a
test that hardcoded the bus user's name
* bus/dispatch.c (bus_dispatch_test_conf): remove the "if
(!use_launcher)" around the tests, they were only failing because
we didn't pass through all the expected errors from the helper.
* bus/activation-exit-codes.h
(BUS_SPAWN_EXIT_CODE_CHILD_SIGNALED): add a code for child segfaulting
(BUS_SPAWN_EXIT_CODE_GENERIC_FAILURE): make "1" be a generic
failure code, so if a third party launch helper were written it
could just always return 1 on failure.
* configure.in: add AM_PROG_CC_C_O to allow per-target CPPFLAGS
* bus/dispatch.c (bus_dispatch_test_conf): Fix up setting
TEST_LAUNCH_HELPER_CONFIG to include the full path, and enable
test shell_fail_service_auto_start when use_launcher==TRUE
* bus/activation-helper-bin.c (convert_error_to_exit_code): pass
through the INVALID_ARGS error so the test suite works
* bus/activation.c (handle_activation_exit_error): return
DBUS_ERROR_NO_MEMORY if we get BUS_SPAWN_EXIT_CODE_NO_MEMORY
* dbus/dbus-spawn.c (_dbus_babysitter_get_child_exit_status):
return only the exit code of the child, not the entire thingy from
waitpid(), and make the return value indicate whether the child
exited normally (with a status code)
* bus/bus.c (process_config_first_time_only): _dbus_strdup works
on NULL so no need to check
(process_config_every_time): move servicehelper init here, so we
reload it on HUP or config file change
* bus/Makefile.am (install-data-hook): remove comment because
Emacs make mode seems to be grumpy about it
Richard Hughes [Tue, 24 Jul 2007 13:03:31 +0000 (13:03 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/Makefile.am:
* bus/test-system.c: (die), (check_memleaks), (test_pre_hook),
(test_post_hook), (main):
Add back the test-system.c file - not sure now this got ignored in the
diff. I blame git.
Richard Hughes [Tue, 24 Jul 2007 12:55:32 +0000 (12:55 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* configure.in:
Use ustar to generate the tarball; this fixes the make distcheck
problem when the data files do not fit in the archive:
tar: dbus-1.1.2/test/data/valid-service-files/org.freedesktop.DBus.
TestSuiteShellEchoServiceFail.service.in: file name is too
long (max 99); not dumped
We have to have the 'long' names as the service helper matches by
filename rather than by the name in the service file.
Richard Hughes [Tue, 24 Jul 2007 12:39:30 +0000 (12:39 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/dispatch.c: (check_segfault_service_no_auto_start),
(check_launch_service_file_missing),
(check_launch_service_user_missing),
(check_launch_service_exec_missing),
(check_launch_service_service_missing), (bus_dispatch_test_conf),
(bus_dispatch_test_conf_fail), (bus_dispatch_test):
Add unit tests for system activation. Most are copied from the
session activation tests, but some didn't apply when using a laucher.
Richard Hughes [Tue, 24 Jul 2007 12:19:59 +0000 (12:19 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/bus.c: (process_config_first_time_only),
(process_config_every_time), (bus_context_unref),
(bus_context_get_servicehelper):
* bus/bus.h:
Add the concept of a service-helper and allow it's value to be read.
Richard Hughes [Tue, 24 Jul 2007 12:17:39 +0000 (12:17 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/activation.c: (bus_activation_entry_unref),
(update_desktop_file_entry):
Add the concept of, and read the value of user from the desktop file.
The user string is not required unless we are using system activation.
Richard Hughes [Tue, 24 Jul 2007 12:14:51 +0000 (12:14 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/activation.c:
* bus/desktop-file.h:
Move the defines into the header file, as we use these in the lauch
helper as well as the desktop file parsing.
Richard Hughes [Tue, 24 Jul 2007 12:10:58 +0000 (12:10 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/Makefile.am:
* bus/test.h:
Add the build glue for the lauch helper, and also add the launch-helper
OOM checks into make check. I've probably broken the build, give me 2.
Richard Hughes [Tue, 24 Jul 2007 12:03:04 +0000 (12:03 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/test-launch-helper.c: (die), (check_memleaks),
(test_post_hook), (bus_activation_helper_oom_test), (main):
Add a test wrapper to allow OOM checks on the launch helper.
Richard Hughes [Tue, 24 Jul 2007 12:01:32 +0000 (12:01 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/activation-helper-bin.c: (convert_error_to_exit_code),
(main):
* bus/activation-helper.c: (desktop_file_for_name),
(clear_environment), (check_permissions), (check_service_name),
(get_parameters_for_service), (switch_user),
(exec_for_correct_user), (check_bus_name), (get_correct_parser),
(launch_bus_name), (check_dbus_user), (run_launch_helper):
* bus/activation-helper.h:
Add the initial launch-helper. This is split into a main section and a
binary loader that allows us to lauch the main section in another test
harness to do stuff like OOM testing. No build glue yet.
Richard Hughes [Tue, 24 Jul 2007 11:58:08 +0000 (11:58 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/Makefile.am:
* bus/config-parser.c: (bus_config_parser_unref),
(start_busconfig_child), (bus_config_parser_end_element),
(servicehelper_path), (bus_config_parser_content),
(bus_config_parser_finished),
(bus_config_parser_get_servicehelper),
(test_default_session_servicedirs),
(test_default_system_servicedirs), (bus_config_parser_test):
* bus/config-parser.h:
Make the config-parser code use the common config code.
Also add the session and systemdirs stuff, and make the config parser
aware of the servicehelper field.
Richard Hughes [Tue, 24 Jul 2007 11:50:59 +0000 (11:50 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/config-parser-trivial.c: (service_dirs_find_dir),
(service_dirs_append_link_unique_or_free), (bus_config_parser_new),
(bus_config_parser_unref), (bus_config_parser_start_element),
(bus_config_parser_end_element), (bus_config_parser_content),
(bus_config_parser_finished), (bus_config_parser_get_user),
(bus_config_parser_get_type), (bus_config_parser_get_service_dirs),
(check_return_values), (do_load), (check_loader_oom_func),
(process_test_valid_subdir), (make_full_path), (check_file_valid),
(bus_config_parser_trivial_test):
* bus/config-parser-trivial.h:
Add a security sensitive stripped down config parser for the setuid
launcher. This file only reads what it needs, and doesn't try to do
anything remotely clever like including external files.
It is not intended to validate the config file; it is expected that
config-parser will do that before the setuid program tries to read it.
Richard Hughes [Tue, 24 Jul 2007 11:47:31 +0000 (11:47 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/config-parser-common.c:
(bus_config_parser_element_name_to_type),
(bus_config_parser_element_type_to_name):
* bus/config-parser-common.h:
We don't want to run the whole config parser with all it's deps in the
setuid program. We need to implement a stripped down config parser just
for the launcher, and to do so I need some common functions and
defines; add them here.
Richard Hughes [Tue, 24 Jul 2007 11:44:35 +0000 (11:44 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* dbus/dbus-sysdeps-unix.c:
(_dbus_get_standard_system_servicedirs):
* dbus/dbus-sysdeps-win.c:
Provide a way to get the standard system servicedirs, just like we do
for the session service dirs. These should be seporate, as there may
be a security issue starting up some session stuff as root.
The use-case for the same binary starting up per-system _and_
per-session is also not valid.
Richard Hughes [Tue, 24 Jul 2007 11:37:20 +0000 (11:37 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* dbus/dbus-spawn.c: (read_data),
(_dbus_babysitter_get_child_exit_status):
* dbus/dbus-spawn.h:
Add a function so we can get access to the exit status of the launch
helper.
By providing the return code and not the error we can leave the
'what does this mean?' to the bus launch code and not include it in the
dbus directory.
Richard Hughes [Tue, 24 Jul 2007 11:34:40 +0000 (11:34 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* bus/activation-exit-codes.h:
Add defines which specify the output codes of the launch helper.
We have to use exit codes as this is the only way we can return failure
type without going grotty things like redirecting possibly-nonsecure
stderr into the error.
Richard Hughes [Tue, 24 Jul 2007 11:23:46 +0000 (11:23 +0000)]
2007-07-24 Richard Hughes <richard@hughsie.com>
* doc/system-activation.txt:
Add design document for the system activation parts. I'll shortly be
committing many patches that add system activation using a setuid
launcher into CVS, so expect things to be broken for a few hours.
* dbus/dbus-message.c (dbus_message_get_cached)
(dbus_message_cache_or_finalize): don't mess with message from
message cache outside of the cache lock. Bug #9164 from Jonathan
Matthew.
* dbus/dbus-connection.c (struct DBusConnection): Fix from Olivier
Hochreutiner to avoid trying to protect individual bits in a word
with different locks (make dispatch_acquired and io_path_acquired
dbus_bool_t rather than bitfields)
Havoc Pennington [Thu, 21 Jun 2007 21:28:59 +0000 (21:28 +0000)]
2007-06-21 Havoc Pennington <hp@redhat.com>
* dbus/dbus-watch.c (dbus_watch_get_fd): 1) its behavior should
not be the same as before, the ABI has never been declared stable
on Windows and 2) do not commit to cross-platform files without
posting the exact patch to the mailing list
* dbus/dbus-sysdeps-util.c (_dbus_sysdeps_test): as I have pointed
out before, either 0xff needs to work on both platforms, or none
of the dbus code can rely on it working. That means the options
are 1) audit the code for anywhere that relies on 0xff working, if
none found ideally add a test that it *doesn't* work and make unix
reject it explicitly, but in any case this test would go away or
2) make it work on Windows also, then we don't have to figure out
whether we rely on it.
And in either case, post the exact patch to the mailing list and
don't just commit.
Ralf Habacker [Thu, 21 Jun 2007 13:11:10 +0000 (13:11 +0000)]
* dbus/dbus-sysdeps-win.c: deleted local DBusCredentials structure
(_dbus_getsid): new function
(_dbus_read_credentials_socket): fixed
(_dbus_append_user_from_current_process, _dbus_credentials_add_from_current_process): added real sid reading
(_dbus_credentials_parse_and_add_desired,_dbus_parse_uid): deleted
Havoc Pennington [Mon, 18 Jun 2007 18:05:21 +0000 (18:05 +0000)]
2007-06-18 Havoc Pennington <hp@redhat.com>
* dbus/dbus-sysdeps-unix.c (_dbus_read_credentials_socket): clean
this up a little bit, to try and understand why telnet'ing to a
server and sending a non-nul byte didn't disconnect immediately;
now it seems that it does disconnect immediately as it should,
though I don't understand what has changed.
Ralf Habacker [Fri, 15 Jun 2007 21:04:43 +0000 (21:04 +0000)]
* cmake/ConfigureChecks.cmake,cmake/config.h.cmake: added check for HAVE_ERRNO_H
* cmake/dbus/CMakeLists.txt: added missing files
* dbus/dbus-transport-win.c/.h: new files
* dbus/dbus-sysdeps-win.c,.h: added required _unix functions to make dbus compilable on win32
* dbus/dbus-sysdeps-win-utils.c,.h: moved some functions to dbus-sysdeps-win.c
* dbus-win.patch: removed applied or obsolate patches
Note: dbus-win32 is now compilable, no guarantee that it runs without any problems
Havoc Pennington [Fri, 15 Jun 2007 19:28:36 +0000 (19:28 +0000)]
2007-06-15 Havoc Pennington <hp@redhat.com>
* dbus/dbus-sysdeps.c (_dbus_set_errno_to_zero)
(_dbus_get_is_errno_nonzero, _dbus_get_is_errno_eintr)
(_dbus_strerror_from_errno): family of functions to abstract
errno, though these are somewhat bogus (really we should make our
socket wrappers not use errno probably - the issue is that any
usage of errno that isn't socket-related probably is not
cross-platform, so should either be in a unix-only file that can
use errno directly, or is a bug - these general errno wrappers
hide issues of this nature in non-socket code, while
socket-specific API changes would not since sockets are allowed
cross-platform)
Havoc Pennington [Thu, 14 Jun 2007 22:02:10 +0000 (22:02 +0000)]
2007-06-14 Havoc Pennington <hp@redhat.com>
* bus/dispatch.c (check_get_connection_unix_process_id): mop up
getpid() (noticed by Peter KKümmel) and adapt the test to
expect a "pid unknown" error when running on Windows.
Havoc Pennington [Thu, 14 Jun 2007 21:15:33 +0000 (21:15 +0000)]
2007-06-14 Havoc Pennington <hp@redhat.com>
* dbus/dbus-sysdeps-unix.c (_dbus_credentials_parse_and_add_user):
delete this function since it was effectively the same as
_dbus_credentials_add_from_username()
Havoc Pennington [Thu, 14 Jun 2007 20:59:16 +0000 (20:59 +0000)]
2007-06-14 Havoc Pennington <hp@redhat.com>
* dbus/dbus-auth.c: adapt to keyring changes
* dbus/dbus-keyring.c: change to avoid using user ID and home
directory directly; instead use a
keyring-location-from-credentials function in dbus-sysdeps
* fix to use _dbus_append_user_from_current_process() instead of
_dbus_username_from_current_process() or _dbus_append_desired_identity().
Ralf Habacker [Thu, 14 Jun 2007 20:08:48 +0000 (20:08 +0000)]
* reverted global rename of function _dbus_username_from_current_process.
It needs to much tests to verify that the change does not break anything. I had overseen that the signatures are different (** to *) which requires non trivial changes. This is one *major* disadvantage of elumating oop functionality with c. You are responsible for cleaning every object on every function return point, which could be a nightmare if you are not working with dbus all the days.
Ralf Habacker [Thu, 14 Jun 2007 17:37:27 +0000 (17:37 +0000)]
* dbus/dbus-sysdeps-win.c: disabled DBusUserInfo related code
(_dbus_append_desired_identity,_dbus_windows_user_is_process_owner): new win32 functions as counterpart of unix related
(_dbus_send_credentials_socket,_dbus_read_credentials_socket): renamed from ..._unix_socket
(_dbus_send_credentials_unix_socket): removed obsolate function
* dbus/dbus-sysdeps-win-util.c: disabled DBusGroupInfo related code
(_dbus_verify_daemon_user,_dbus_change_to_daemon_user): new win32 functions as counterpart of unix related
Simon McVittie [Thu, 14 Jun 2007 09:50:17 +0000 (09:50 +0000)]
doc/dbus-specification.xml: say the protocol version is 1 instead of 0
(patch from Kristoffer Lundén, fd.o#10033)
Also remove the FIXME about removing protocol version from messages (as per
Havoc's comment on that bug)