* 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)
Ralf Habacker [Thu, 14 Jun 2007 07:56:47 +0000 (07:56 +0000)]
* cmake/modules/FindKDEWIN.cmake, cmake/modules/FindKDEWIN_Packager.cmake cmake/modules/Win32Macros.cmake: new files from the kdewin32 project
* cmake/CMakeLists.txt: cleaned support for kdewin installer and win32 explorer wrapper
Havoc Pennington [Wed, 13 Jun 2007 16:30:43 +0000 (16:30 +0000)]
2007-06-13 Havoc Pennington <hp@redhat.com>
* configure.ac, bus/selinux.c, dbus/dbus-sysdeps-unix-util.c: add
libaudit support, no clue what this means really but now we have
it. Patches from Fedora package.
* bus/bus.c (bus_context_new): move selinux initialization after
changing to daemon user, patch from Fedora package
* dbus/dbus-transport.c (auth_via_unix_user_function): fix a typo
Havoc Pennington [Tue, 12 Jun 2007 18:36:19 +0000 (18:36 +0000)]
2007-06-12 Havoc Pennington <hp@redhat.com>
* dbus/dbus-auth.c (sha1_handle_second_client_response)
(handle_server_data_anonymous_mech): add the process ID from
socket credentials, if available, even if not using EXTERNAL
* dbus/dbus-transport.c (auth_via_default_rules): support
allow_anonymous flag
* dbus/dbus-connection.c (dbus_connection_get_is_anonymous)
(dbus_connection_set_allow_anonymous): new API for controlling
anonymous access
Havoc Pennington [Sun, 10 Jun 2007 04:54:45 +0000 (04:54 +0000)]
2007-06-09 Havoc Pennington <hp@redhat.com>
* dbus/dbus-string.c (_dbus_string_pop_line): fix this not to
think an empty line is the end of the file.
Also, fix some whitespace.
* dbus/dbus-string-util.c: add more tests for
_dbus_string_pop_line() revealing that it thinks an empty line is
the end of the file, which broke dbus-auth-script.c so
it didn't really run the scripts
* dbus/dbus-auth.c: add ANONYMOUS mechanism
* dbus/dbus-auth-script.c (_dbus_auth_script_run): fix to detect
an empty/no-op auth script; add commands to check that we have or
don't have the expected credentials
* bus/policy.c (bus_policy_create_client_policy): gracefully
continue if the connection has no unix user - just don't apply
any unix user dependent rules.
* bus/config-parser.c: remove dbus-userdb.h usage
* bus/bus.c: remove dbus-userdb.h usage
* dbus/dbus-transport.c (_dbus_transport_get_is_authenticated):
support Windows user function; also, fix the logic for checking
auth as root in the default auth code (broken in the previous
commit)
* dbus/dbus-connection.c
(dbus_connection_set_windows_user_function): new function
(dbus_connection_get_windows_user): new function
* bus/dispatch.c (check_get_connection_unix_process_id): adapt
since sysdeps-unix.h stuff isn't included anymore
* bus/bus.c (bus_context_new): use more abstract functions to
change user, so they can be no-ops on Windows
* dbus/dbus-credentials.c, dbus/dbus-credentials.h,
dbus/dbus-credentials-util.c: new files containing a fully opaque
DBusCredentials data type to replace the old not opaque one.
* configure.in (DBUS_UNIX): define DBUS_UNIX to match DBUS_WIN on
windows
* dbus/dbus-userdb.h: prohibit on Windows, next step is to clean
up the uses of it in bus/*.c and factor out the parts of
cookie auth that depend on it
Ralf Habacker [Fri, 1 Jun 2007 22:05:42 +0000 (22:05 +0000)]
* bus/main.c (main): uses _dbus_get_config_file_name() to detect session.conf location on win32.
* dbus-sysdeps-win.h (_dbus_get_config_file_name,_dbus_file_exists): new prototyp, undefined interface after including windows.h because t makes trouble when a paramater is named interface.
* dbus-sysdeps-win.c (_dbus_get_install_root,_dbus_get_config_file_name,_dbus_file_exists): new functions.
* Split NEWS and ChangeLog into a .pre-1-0 file as per HACKING
We forgot to do this during the 1.0 release and it makes sense
now as we get ready to release the first 1.1.0 development tarball