Commit graph

53 commits

Author SHA1 Message Date
Havoc Pennington
1d1b0f20a4 2003-08-12 Havoc Pennington <hp@pobox.com>
* bus/dispatch.c (bus_dispatch): make this return proper
	DBusHandlerResult to avoid DBUS_ERROR_UNKNOWN_METHOD

	* dbus/dbus-errors.c (dbus_set_error): use
	_dbus_string_append_printf_valist

	* dbus/dbus-string.c (_dbus_string_append_printf_valist)
	(_dbus_string_append_printf): new

	* dbus/dbus-errors.h (DBUS_ERROR_UNKNOWN_MESSAGE): change to
	UNKNOWN_METHOD

	* dbus/dbus-connection.c (dbus_connection_dispatch): handle
	DBUS_HANDLER_RESULT_NEED_MEMORY; send default error reply if a
	message is unhandled.
2003-08-12 04:15:49 +00:00
Havoc Pennington
5c1a8e4490 2003-08-11 Havoc Pennington <hp@pobox.com>
* bus/test.c (client_disconnect_handler): change to return
	HANDLED (would have been REMOVE_MESSAGE)

	* dbus/dbus-object.h (enum DBusHandlerResult): rename to
	HANDLED/NOT_YET_HANDLED instead of
	REMOVE_MESSAGE/ALLOW_MORE_HANDLERS to make it clearer how it
	should be used.
2003-08-12 02:43:50 +00:00
Havoc Pennington
b29ea9115e 2003-08-10 Havoc Pennington <hp@pobox.com>
* tools/dbus-send.c (main): add --type argument, for now
	supporting only method_call and signal types.

	* tools/dbus-print-message.c: print message type

	* dbus/dbus-connection.c (_dbus_connection_new_for_transport):
	init connection->objects

	* doc/dbus-specification.sgml: fix sgml

	* bus/*.c: port over to object-instance API changes

	* test/test-service.c: ditto

	* dbus/dbus-message.c (dbus_message_create_header): allow #NULL
	name, we will have to fix up the rest of the code to also handle
	this
	(dbus_message_new): generic message-creation call
	(set_string_field): allow appending name field
2003-08-11 02:11:58 +00:00
Havoc Pennington
6843ad3176 2003-06-22 Havoc Pennington <hp@pobox.com>
* dbus/dbus-dataslot.c (_dbus_data_slot_allocator_unref)
	(_dbus_data_slot_allocator_alloc): rework these to keep a
	reference count on each slot and automatically manage a global
	slot ID variable passed in by address

	* bus/bus.c: convert to new dataslot API

	* dbus/dbus-bus.c: convert to new dataslot API

	* dbus/dbus-connection.c: convert to new dataslot API

	* dbus/dbus-server.c: convert to new dataslot API

	* glib/dbus-gmain.c: ditto

	* bus/test.c: ditto

	* bus/connection.c: ditto
2003-06-22 19:39:47 +00:00
Havoc Pennington
e8d396efef 2003-04-27 Havoc Pennington <hp@pobox.com>
Unbreak my code...

	* dbus/dbus-transport.c (_dbus_transport_get_dispatch_status):
	report correct status if we finish processing authentication
	inside this function.

	* bus/activation.c (try_send_activation_failure): use
	bus_transaction_send_error_reply

	* bus/connection.c (bus_connection_get_groups): return an error
	explaining the problem

	* bus/bus.c (bus_context_check_security_policy): implement
	restriction here that inactive connections can only send the
	hello message. Also, allow bus driver to send anything to
	any recipient.

	* bus/connection.c (bus_connection_complete): create the
	BusClientPolicy here instead of on-demand.
	(bus_connection_get_policy): don't return an error

	* dbus/dbus-message.c (dbus_message_new_error_reply): allow NULL
	sender field in message being replied to

	* bus/bus.c (bus_context_check_security_policy): fix silly typo
	causing it to return FALSE always

	* bus/policy.c (bus_client_policy_check_can_send): fix bug where
	we checked sender rather than destination
2003-04-27 06:25:42 +00:00
Havoc Pennington
1820f3bd0a 2003-04-24 Havoc Pennington <hp@redhat.com>
* bus/dispatch.c: somehow missed some name_is

	* dbus/dbus-timeout.c (_dbus_timeout_set_enabled)
	(_dbus_timeout_set_interval): new

	* bus/connection.c (bus_connections_setup_connection): record time
	when each connection is first set up, and expire them after the
	auth timeout passes.
2003-04-24 21:26:25 +00:00
Havoc Pennington
e8bf15b23a 2003-04-24 Havoc Pennington <hp@redhat.com>
* dbus/dbus-message.c (dbus_message_name_is): rename
	(dbus_message_service_is): rename
	(dbus_message_sender_is): rename
	(dbus_message_get_service): rename
2003-04-24 19:35:11 +00:00
Havoc Pennington
c9cd648f11 2003-04-24 Havoc Pennington <hp@redhat.com>
* configure.in: add --enable-checks

	* dbus/dbus-message.c (dbus_message_new): reverse name/service arguments

	* dbus/dbus-connection.c (dbus_connection_preallocate_send): fix
	to use thread locks.
	(_dbus_connection_handler_destroyed_locked): move some private
	functions into proper docs group

	* dbus/dbus-internals.h: add _dbus_return_if_fail,
	_dbus_return_val_if_fail

	Throughout: use dbus_return_if_fail
2003-04-24 19:18:23 +00:00
Havoc Pennington
983200f912 2003-04-19 Havoc Pennington <hp@pobox.com>
* bus/driver.c (bus_driver_handle_hello): check limits and
	return an error if they are exceeded.

	* bus/connection.c: maintain separate lists of active and inactive
	connections, and a count of each. Maintain count of completed
	connections per user. Implement code to check connection limits.

	* dbus/dbus-list.c (_dbus_list_unlink): export

	* bus/bus.c (bus_context_check_security_policy): enforce a maximum
	number of bytes in the message queue for a connection
2003-04-19 16:16:24 +00:00
Havoc Pennington
d3fb6f3571 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.
2003-04-18 17:45:34 +00:00
Havoc Pennington
e0b284c7e3 2003-04-18 Havoc Pennington <hp@pobox.com>
* dbus/dbus-mainloop.c (_dbus_loop_iterate): fix UMR in verbose
	debug spew

	* dbus/dbus-auth.c (handle_client_data_cookie_sha1_mech): fix OOM
	handling problem

	* dbus/dbus-keyring.c (_dbus_keyring_new_homedir): only whine
	about DBUS_TEST_HOMEDIR once

	* bus/Makefile.am (TESTS_ENVIRONMENT): put DBUS_TEST_HOMEDIR in
	the environment

	* bus/dispatch.c (bus_dispatch_sha1_test): actually load sha1
	config file so we test the right thing

	Throughout: assorted docs improvements
2003-04-18 05:52:11 +00:00
Havoc Pennington
4219b08bfa 2003-04-17 Havoc Pennington <hp@redhat.com>
* dbus/dbus-mainloop.c (_dbus_loop_iterate): fix logic so that if
	there was an OOM watch we skipped, we always return TRUE so we
	iterate again to have a look at it again. Fixes test suite hang.
	Code rearrangement also lets us lose some memset and only iterate
	over callbacks once.

	* bus/driver.c (bus_driver_handle_message): sense of test for
	reply was backward
2003-04-17 20:25:33 +00:00
Havoc Pennington
fe1cb3a9a1 2003-04-14 Havoc Pennington <hp@redhat.com>
* dbus/dbus-userdb.c: user database abstraction, mostly to get
	caching, but at some point we might want to be able to use a
	different database.

	* bus/dispatch.c (bus_dispatch_sha1_test): add a test that uses
	SHA1 conf file to test the sha1 auth mechanism, since the regular
	test always uses EXTERNAL when available.

	* configure.in,
	test/data/valid-config-files/debug-allow-all-sha1.conf.in:
	add conf file that requires use of sha1 auth
2003-04-14 23:52:40 +00:00
Havoc Pennington
777707ed8d 2003-04-13 Havoc Pennington <hp@pobox.com>
* dbus/dbus-mainloop.c: fix some reentrancy issues by refcounting
	callbacks

	* test/data/valid-config-files/debug-allow-all.conf.in: allow all
	users

	* dbus/dbus-transport.c (_dbus_transport_get_dispatch_status):
	fix to only recover unused bytes if we're already authenticated
	(_dbus_transport_get_is_authenticated): fix to still mark us
	authenticated if there are unused bytes.

	* bus/dispatch.c: implement security policy checking

	* bus/connection.c (bus_transaction_send_from_driver): new

	* bus/bus.c (bus_context_check_security_policy): new

	* bus/dispatch.c (send_service_nonexistent_error): delete this,
	now we just set the DBusError and it gets converted to an error
	reply.

	* bus/connection.c (allow_user_function): enable code using actual
	data from the config file

	* bus/policy.c (list_allows_user): handle wildcard rules for
	user/group connection perms
2003-04-14 02:29:21 +00:00
Havoc Pennington
a03e626728 2003-04-11 Havoc Pennington <hp@pobox.com>
* bus/dispatch.c (check_existent_service_activation): accept a no
	memory error in a place we didn't before

	* bus/test.c (bus_test_run_everything): remove hacky "do it twice
	in case the first one failed," since the test suite is less
	broken now.
2003-04-11 03:58:56 +00:00
Havoc Pennington
78e7902231 2003-04-10 Havoc Pennington <hp@pobox.com>
* bus/dispatch.c (check_segfault_service_activation): add test
	for launching an executable that just crashes.

	* test/test-segfault.c (main): try setting coredumpsize to 0 so we
	don't leave a million cores. We'll see how portable this is.
2003-04-11 03:45:40 +00:00
Havoc Pennington
6be547d32f 2003-04-10 Havoc Pennington <hp@redhat.com>
* dbus/dbus-connection.c (dbus_connection_flush): don't spin on
	the connection if it's disconnected

	* bus/activation.c (bus_activation_service_created): use new
	transaction features to roll back removal of pending activation if
	we don't successfully create the service after all. Don't remove
	pending activation if the function fails.

	* dbus/dbus-list.c (_dbus_list_insert_before_link)
	(_dbus_list_insert_after_link): new code to facilitate
	services.c fixes

	* dbus/dbus-hash.c (_dbus_hash_table_insert_string_preallocated):
	new functionality, so we can preallocate the ability to insert
	into a hash table.

	* bus/connection.c (bus_transaction_add_cancel_hook): new function
	allowing us to put custom hooks in a transaction to be used for
	cancelling said transaction

	* doc/dbus-specification.sgml: add some discussion of secondary
	service owners, and disallow zero-length service names

	* bus/services.c (bus_registry_acquire_service): new function,
	splits out part of bus_driver_handle_acquire_service() and fixes
	a bug where we didn't remove the service doing the acquiring
	from the secondary queue if we failed to remove the current owner
	from the front of the queue.
2003-04-11 00:03:06 +00:00
Havoc Pennington
51781f5410 2003-04-10 Havoc Pennington <hp@pobox.com>
* bus/dispatch.c: lots of fixes

	* dbus/dbus-mainloop.c (_dbus_loop_dispatch): export
	(_dbus_loop_iterate): remove old "quit if no callbacks" code,
	that was crack, broke the test service.

	* dbus/dbus-transport.c (_dbus_transport_open): fix error
	handling to avoid piling up errors if we get a failure on the
	first address.

	* dbus/dbus-internals.c (_dbus_real_assert_not_reached): include
	pid in assertion failures.

	* dbus/dbus-mainloop.c (_dbus_loop_iterate): use static arrays up
	to some fixed size of file descriptor array. Don't return TRUE
	anytime a timeout exists, that led to lots of busy loop silliness
	in the tests.
2003-04-10 05:12:19 +00:00
Havoc Pennington
231fc084cf - 2003-04-10 01:15:28 +00:00
Havoc Pennington
1708094c0e 2003-04-09 Havoc Pennington <hp@redhat.com>
* dbus/dbus-bus.c (dbus_bus_register): fix up error handling and
	a memory leak

	* bus/dispatch.c (check_service_activated): fix bug in test

	* dbus/dbus-mainloop.c (check_timeout): fix this up

	* dbus/dbus-internals.c (_dbus_verbose_real): include PID in
	verbose output so we can sort out output from different processes,
	e.g. in the activation case.
2003-04-09 20:31:21 +00:00
Havoc Pennington
fe22b2194d 2003-04-07 Havoc Pennington <hp@redhat.com>
* doc/dbus-specification.sgml: require that base service names
	start with ':' and that the base service is created/deleted
	as first and last things a connection does on the bus

	* bus/dispatch.c (check_existent_service_activation): lots more
	work on the activation test; it doesn't fully pass yet...

	* test/test-service.c (main): fix so we don't memleak the
	connection to the message bus
	(filter_func): accept a message asking us to exit
2003-04-07 23:28:16 +00:00
Havoc Pennington
df008ef97d 2003-04-06 Havoc Pennington <hp@pobox.com>
* dbus/Makefile.am: split lists of sources into stuff that goes in
	the library, util functions that go in the lib and are also used
	elsewhere, and util functions that are used in tests/daemon but
	don't go in the lib.

	* dbus/dbus-mainloop.h, dbus/dbus-mainloop.c: move bus/loop.[hc]
	here so it can be used in test binaries also
2003-04-06 23:53:27 +00:00
Havoc Pennington
c8991b0f95 2003-04-06 Havoc Pennington <hp@pobox.com>
* bus/bus.c (bus_context_new): print the address in here, rather
	than in main(), because we need to do it before forking the daemon

	* bus/dispatch.c (send_service_nonexistent_error): set the sender
	on the service nonexistent error

	* bus/driver.c (bus_driver_handle_acquire_service): set the
	sender on the AcquireService reply

	* test/data/valid-config-files/debug-allow-all.conf.in: Make test
	server also listen on a UNIX socket so services can connect to it.
2003-04-06 20:04:47 +00:00
Havoc Pennington
2250539aee 2003-04-05 Havoc Pennington <hp@pobox.com>
* bus/loop.c (bus_loop_iterate): fix the timeout code, using
	magic from GLib

	* dbus/dbus-spawn.c (_dbus_babysitter_unref): set sitter_pid
	to -1 once we've reaped the babysitter
	(_dbus_babysitter_handle_watch): do as much work as we can, not
	just one go of it

	* bus/activation.c: add code using DBusBabysitter so that we
	handle it when a service fails to start up properly.
	(bus_activation_service_created): don't remove the activation
	entries as we go, just let them get removed when we free the pending
	activation. Unref reply messages after sending them.
2003-04-05 19:03:40 +00:00
Havoc Pennington
1b08036103 2003-04-03 Havoc Pennington <hp@redhat.com>
* bus/loop.h, bus/loop.c: make the mainloop an object so we can
	have multiple ones

	* bus/*.[hc]: adapt to mainloop change
2003-04-04 00:39:22 +00:00
Havoc Pennington
e55fd2c670 2003-04-02 Havoc Pennington <hp@redhat.com>
* bus/connection.c (bus_transaction_send_error_reply): set sender
	service for the error, and unref the reply on success

	* bus/activation.c: convert to use BusTransaction so OOM can be
	handled correctly
	(bus_activation_service_created): set sender of the message
2003-04-02 20:14:52 +00:00
Havoc Pennington
fa05de9230 2003-03-31 Havoc Pennington <hp@redhat.com>
Fix some annoying DBusString API and fix all affected code.

	* dbus/dbus-string.c (_dbus_string_init): get rid of annoying
	max_length argument
	(_dbus_string_get_data): change to return string instead of using
	an out param
	(_dbus_string_get_const_data): ditto
	(_dbus_string_get_data_len): ditto
	(_dbus_string_get_const_data_len): ditto
2003-03-31 20:56:29 +00:00
Havoc Pennington
29c71168cd 2003-03-31 Havoc Pennington <hp@pobox.com>
* dbus/dbus-transport-unix.c (_dbus_transport_new_for_domain_socket)
	(_dbus_transport_new_for_tcp_socket): these didn't need the "server"
	argument since they are always client side

	* dbus/dbus-server.c (dbus_server_get_address): new function

	* bus/main.c (main): take the configuration file as an argument.

	* test/data/valid-config-files/debug-allow-all.conf: new file to
	use with dispatch.c tests for example

	* bus/test-main.c (main): require test data dir

	* bus/bus.c (bus_context_new): change this to take a
	configuration file name as argument

	* doc/config-file.txt (Elements): add <servicedir>

	* bus/system.conf, bus/session.conf: new files

	* dbus/dbus-bus.c (dbus_bus_get): look for system bus on
	well-known socket if none set

	* configure.in: create system.conf and session.conf
2003-03-31 08:19:50 +00:00
Havoc Pennington
bf99381351 2003-03-28 Havoc Pennington <hp@pobox.com>
* bus/test.c (bus_test_flush_bus): remove the sleep from here,
	I think it may have just been superstition. Not sure.

	* dbus/dbus-string.c (_dbus_string_base64_decode): catch some OOM
	failures that were not being handled.

	* dbus/dbus-auth.c (process_auth): fix a memleak in OOM handling

	* dbus/dbus-memory.c: add ability to set number of mallocs in a
	row that will fail on out-of-memory.

	* dbus/dbus-internals.c (_dbus_test_oom_handling): convenience
	function for testing out-of-memory handling.

	* bus/config-loader-expat.c (memsuite): don't wrap the dbus
	allocation functions, they do map exactly to the expat ones.
2003-03-28 05:42:19 +00:00
Havoc Pennington
90ed1d8458 2003-03-25 Havoc Pennington <hp@redhat.com>
* throughout - add more _DBUS_ASSERT_ERROR_IS_CLEAR

	* configure.in: add --with-xml option to specify XML library,
	right now only libxml is supported.

	* bus/config-loader-libxml.c, config-parser.c: sync some minor
	nonworking code between home and work, still just stubs
2003-03-26 03:58:11 +00:00
Havoc Pennington
ce4fd314c6 2003-03-24 Havoc Pennington <hp@redhat.com>
* dbus/dbus-sysdeps.c (_dbus_set_fd_nonblocking): move to this
	file

	* dbus/dbus-errors.c (dbus_set_error, dbus_set_error_const): allow
	NULL argument for "message" if the error is a well-known one,
	fill in a generic message in this case.

	* dbus/dbus-errors.h (DBusResultCode): Kill DBusResultCode in
	favor of DBusError

	* bus/test.c (bus_test_flush_bus): add

	* bus/policy.c (bus_policy_test): test code stub
2003-03-25 04:37:08 +00:00
Anders Carlsson
73d7ba1d13 2003-03-17 Anders Carlsson <andersca@codefactory.se>
* bus/dispatch.c: (bus_dispatch):
	Refetch the service name since it may have been reallocated
	when dbus_message_set_sender was called.

	* dbus/dbus-sysdeps.c: (_dbus_accept):
	Add address and address length variables and use them to stop
	valgrind from complaining.
2003-03-17 06:49:33 +00:00
Havoc Pennington
f7c24715b5 2003-03-17 Havoc Pennington <hp@pobox.com>
All tests pass, no memleaks, no valgrind complaints.

	* bus/test.c: refcount handler_slot

	* bus/connection.c (bus_connections_new): refcount
	connection_data_slot

	* dbus/dbus-auth-script.c (_dbus_auth_script_run): delete unused
	bytes so that auth scripts pass.

	* bus/dispatch.c: init message_handler_slot so it gets allocated
	properly

	* bus/dispatch.c (message_handler_slot_ref): fix memleak

	* dbus/dbus-server-debug-pipe.c (_dbus_server_debug_pipe_new):
	dealloc server_pipe_hash when no longer used for benefit of
	leak checking

	* dbus/dbus-auth.c (process_command): memleak fix

	* bus/dispatch.c (check_hello_message): memleak fix
2003-03-17 05:39:10 +00:00
Havoc Pennington
15f02e1071 2003-03-16 Havoc Pennington <hp@pobox.com>
* dbus/dbus-bus.c (ensure_bus_data): fix double-unref of the data slot
2003-03-17 03:09:31 +00:00
Havoc Pennington
23e4978e2f 2003-03-16 Havoc Pennington <hp@pobox.com>
* bus/dispatch.c (bus_dispatch_test): remove double-unrefs of
	connections

	* dbus/dbus-address.c (create_entry): fix OOM handling when
	failing to alloc entry->method
2003-03-17 02:20:18 +00:00
Havoc Pennington
b4a1100f4f 2003-03-16 Havoc Pennington <hp@pobox.com>
* dbus/dbus-watch.c (_dbus_watch_new): handle failure to malloc
	the watch

	* dbus/dbus-server-debug-pipe.c (_dbus_transport_debug_pipe_new):
	add some missing dbus_set_result

	* bus/dispatch.c (bus_dispatch_add_connection): handle failure to
	alloc the DBusMessageHandler

	* dbus/dbus-transport.c (_dbus_transport_disconnect): don't ref
	the transport here, since we call this from the finalizer; it
	resulted in a double-finalize.

	* dbus/dbus-transport.c (_dbus_transport_disconnect): fix a bug
	where we tried to use transport->connection that was NULL,
	happened when transport was disconnected early on due to OOM

	* bus/*.c: adapt to handle OOM for watches/timeouts

	* dbus/dbus-transport-unix.c: port to handle OOM during
	watch handling

	* dbus/dbus-auth.c (_dbus_auth_get_unused_bytes): return a
	reference to unused bytes instead of a copy

	* dbus/dbus-server.c (dbus_server_handle_watch): return FALSE for
	out of memory

	* dbus/dbus-connection.c (dbus_connection_handle_watch): return
	FALSE on OOM

	* dbus/dbus-timeout.c (dbus_timeout_handle): return FALSE for out
	of memory
2003-03-17 01:54:37 +00:00
Havoc Pennington
d1f65c6c4f 2003-03-16 Havoc Pennington <hp@pobox.com>
* dbus/dbus-bus.c (ensure_bus_data): handle failure to set
	connection data

	* dbus/dbus-memory.c (_dbus_initialize_malloc_debug): support
	DBUS_MALLOC_BACKTRACES to print trace when failing an alloc
2003-03-16 21:01:57 +00:00
Havoc Pennington
ebb57e719c 2003-03-16 Havoc Pennington <hp@pobox.com>
* dbus/dbus-string.c (_dbus_string_validate_utf8): oops, unbreak
	this. always run the test suite before commit...

	* bus/*: adapt to DBusConnection API changes

	* glib/dbus-gmain.c: adapt to DBusConnection API changes,
	requires renaming stuff to avoid dbus_connection_dispatch name
	conflict.

	* dbus/dbus-transport.c (_dbus_transport_queue_messages): new
	function

	* dbus/dbus-message.c (_dbus_message_loader_queue_messages):
	separate from _dbus_message_loader_return_buffer()

	* dbus/dbus-connection.c (dbus_connection_get_n_messages): remove
	this, because it's now always broken to use; the number of
	messages in queue vs. the number still buffered by the message
	loader is undefined/meaningless. Should use
	dbus_connection_get_dispatch_state().
	(dbus_connection_dispatch): rename from
	dbus_connection_dispatch_message
2003-03-16 20:16:47 +00:00
Havoc Pennington
ce173b29fc 2003-03-16 Havoc Pennington <hp@pobox.com>
Oops - test code was only testing failure of around 30 of the
	mallocs in the test path, but it turns out there are 500+
	mallocs. I believe this was due to misguided linking setup such
	that there was one copy of dbus_malloc etc. in the daemon and one
	in the shared lib, and only daemon mallocs were tested. In any
	case, the test case now tests all 500+ mallocs, and doesn't pass
	yet, though there are lots of fixes in this patch.

	* dbus/dbus-connection.c (dbus_connection_dispatch_message): fix
	this so that it doesn't need to allocate memory, since it
	has no way of indicating failure due to OOM (and would be
	annoying if it did).

	* dbus/dbus-list.c (_dbus_list_pop_first_link): new function

	* bus/Makefile.am: rearrange to create two self-contained
	libraries, to avoid having libraries with overlapping symbols.
	that was resulting in weirdness, e.g. I'm pretty sure there
	were two copies of global static variables.

	* dbus/dbus-internals.c: move the malloc debug stuff to
	dbus-memory.c

	* dbus/dbus-list.c (free_link): free list mempool if it becomes
	empty.

	* dbus/dbus-memory.c (_dbus_disable_mem_pools): new function

	* dbus/dbus-address.c (dbus_parse_address): free list nodes
	on failure.

	* bus/dispatch.c (bus_dispatch_add_connection): free
	message_handler_slot when no longer using it, so
	memory leak checkers are happy for the test suite.

	* dbus/dbus-server-debug-pipe.c (debug_finalize): free server name

	* bus/bus.c (new_connection_callback): disconnect in here if
	bus_connections_setup_connection fails.

	* bus/connection.c (bus_connections_unref): fix to free the
	connections
	(bus_connections_setup_connection): if this fails, don't
	disconnect the connection, just be sure there are no side
	effects.

	* dbus/dbus-string.c (undo_alignment): unbreak this

	* dbus/dbus-auth.c (_dbus_auth_unref): free some stuff we were
	leaking
	(_dbus_auth_new): fix the order in which we free strings
	on OOM failure

	* bus/connection.c (bus_connection_disconnected): fix to
	not send ServiceDeleted multiple times in case of memory
	allocation failure

	* dbus/dbus-bus.c (dbus_bus_get_base_service): new function to
	get the base service name
	(dbus_bus_register_client): don't return base service name,
	instead store it on the DBusConnection and have an accessor
	function for it.
	(dbus_bus_register_client): rename dbus_bus_register()

	* bus/dispatch.c (check_hello_message): verify that other
	connections on the bus also got the correct results, not
	just the one sending hello
2003-03-16 08:08:21 +00:00
Havoc Pennington
f587ce7845 2003-03-15 Havoc Pennington <hp@pobox.com>
Make it pass the Hello handling test including all OOM codepaths.
	Now to do other messages...

	* bus/services.c (bus_service_remove_owner): fix crash when
	removing owner from an empty list of owners
	(bus_registry_ensure): don't leave service in the list of
	a connection's owned services if we fail to put the service
	in the hash table.

	* bus/connection.c (bus_connection_preallocate_oom_error): set
	error flag on the OOM error.

	* dbus/dbus-connection.c (_dbus_connection_new_for_transport):
	handle _dbus_transport_set_connection failure

	* dbus/dbus-transport-unix.c (_dbus_transport_new_for_fd): modify
	to create watches up front and simply enable/disable them as
	needed.
	(unix_connection_set): this can now fail on OOM

	* dbus/dbus-timeout.c, dbus/dbus-watch.c: add concept
	of enabling/disabling a watch or timeout.

	* bus/loop.c (bus_loop_iterate): don't touch disabled
	watches/timeouts

	* glib/dbus-gmain.c: adapt to enable/disable watches and timeouts
2003-03-15 20:47:16 +00:00
Havoc Pennington
f05f87a825 2003-03-15 Havoc Pennington <hp@pobox.com>
* bus/dispatch.c (bus_dispatch_test): OK, now finally actually
	write useful test code, after all that futzing around ;-)

	Test does not yet pass because we can't handle OOM in
	_dbus_transport_messages_pending (basically,
	dbus_connection_preallocate_send() does not prealloc the write
	watch). To fix this, I think we need to add new stuff to
	set_watch_functions, namely a SetEnabled function so we can alloc
	the watch earlier, then enable it later.

	* dbus/Makefile.am (libdbus_convenience_la_SOURCES): move
	dbus-memory.c to the convenience lib

	* bus/test.c: rename some static functions to keep them clearly
	distinct from stuff in connection.c. Handle client disconnection.
2003-03-15 06:00:01 +00:00
Havoc Pennington
169238e99a 2003-03-14 Havoc Pennington <hp@pobox.com>
* bus/dispatch.c (bus_dispatch_test): do test using debug-pipe
	transport, tests more of the real codepath. Set up clients
	with bus_setup_debug_client.

	* bus/test.c (bus_setup_debug_client): function to set up debug
	"clients" on the main loop

	* dbus/dbus-transport.c (_dbus_transport_open): add debug-pipe
	support

	* dbus/dbus-server.c (dbus_server_listen): add debug-pipe
	server type

	* dbus/dbus-server-debug.c: support a debug server based on pipes

	* dbus/dbus-sysdeps.c (_dbus_full_duplex_pipe): new function
	(_dbus_close): new function

	* configure.in: check for socketpair
2003-03-15 04:25:09 +00:00
Havoc Pennington
4c95a9782c 2003-03-14 Havoc Pennington <hp@redhat.com>
* dbus/dbus-memory.c: add a "detect buffer overwrites on free"
	cheesy hack

	* dbus/dbus-transport-debug.c: rework this a good bit to be
	less complicated. hopefully still works.

	* dbus/dbus-server-debug.c (handle_new_client): remove timeout
	manually

	* glib/dbus-gmain.c (timeout_handler): don't remove timeout
	after running it

	* dbus/dbus-message.c (dbus_message_copy): rename from
	dbus_message_new_from_message, fix it up to copy
	all the message fields, add test case

	* bus/dispatch.c (bus_dispatch_test): add some more test code,
	not quite passing yet
2003-03-15 02:19:02 +00:00
Havoc Pennington
3bea935316 2003-03-13 Havoc Pennington <hp@redhat.com>
* dbus/dbus-timeout.c (_dbus_timeout_list_set_functions): handle
	out of memory

	* dbus/dbus-watch.c (_dbus_watch_list_set_functions): handle out
	of memory

	* dbus/dbus-connection.h: Make AddWatchFunction and
	AddTimeoutFunction return a bool so they can fail on out-of-memory

	* bus/bus.c (bus_context_new): set up timeout handlers

	* bus/connection.c (bus_connections_setup_connection): set up
	timeout handlers

	* glib/dbus-gmain.c: adapt to the fact that set_functions stuff
	can fail

	* bus/bus.c (bus_context_new): adapt to changes

	* bus/connection.c: adapt to changes

	* test/watch.c: adapt to DBusWatch changes

	* bus/dispatch.c (bus_dispatch_test): started adding this but
	didn't finish
2003-03-14 01:27:58 +00:00
Anders Carlsson
81c30364c2 2003-03-14 Anders Carlsson <andersca@codefactory.se>
* bus/dispatch.c (send_service_nonexistent_error): Fix typo.
2003-03-14 00:59:12 +00:00
Havoc Pennington
6ecc14ffab 2003-03-12 Havoc Pennington <hp@pobox.com>
Throughout: purge global variables, introduce BusActivation,
	BusConnections, BusRegistry, etc. objects instead.

	* bus/bus.h, bus/bus.c: introduce BusContext as a global
	message bus object

	* test/Makefile.am (TEST_BINARIES): disable bus-test for now,
	going to redo this a bit differently I think
2003-03-13 03:52:58 +00:00
Havoc Pennington
29560adcc7 2003-03-12 Havoc Pennington <hp@redhat.com>
Mega-patch that gets the message bus daemon initially handling
	out-of-memory. Work still needed. Also lots of random
	moving stuff to DBusError instead of ResultCode.

	* dbus/dbus-list.c (_dbus_list_length_is_one): new function

	* dbus/dbus-connection.c
	(dbus_connection_send_with_reply_and_block): use DBusError

	* dbus/dbus-bus.c: adapt to API changes, make it use DBusError not
	DBusResultCode

	* dbus/dbus-connection.c (dbus_connection_send): drop the result
	code here, as the only failure possible is OOM.

	* bus/connection.c (bus_connection_disconnect):
	rename bus_connection_disconnected as it's a notification only

	* bus/driver.c (bus_driver_handle_acquire_service): don't free
	"name" on get_args failure, should be done by get_args;
	don't disconnect client for bad args, just return an error.
	(bus_driver_handle_service_exists): ditto

	* bus/services.c (bus_services_list): NULL-terminate returned array

	* bus/driver.c (bus_driver_send_service_lost)
	(bus_driver_send_service_acquired): send messages from driver to a
	specific client to the client's unique name, not to the broadcast
	service.

	* dbus/dbus-message.c (decode_header_data): reject messages that
	contain no name field
	(_dbus_message_get_client_serial): rename to
	dbus_message_get_serial and make public
	(_dbus_message_set_serial): rename from set_client_serial
	(_dbus_message_set_reply_serial): make public
	(_dbus_message_get_reply_serial): make public

	* bus/connection.c (bus_connection_foreach): allow stopping
	iteration by returning FALSE from foreach function.

	* dbus/dbus-connection.c (dbus_connection_send_preallocated)
	(dbus_connection_free_preallocated_send)
	(dbus_connection_preallocate_send): new API for sending a message
	without possibility of malloc failure.
	(dbus_connection_send_message): rename to just
	dbus_connection_send (and same for whole function family)

	* dbus/dbus-errors.c (dbus_error_free): make this reinit the error

	* dbus/dbus-sysdeps.c (_dbus_exit): new function

	* bus/activation.c: handle/return errors

	* dbus/dbus-errors.h: add more DBUS_ERROR #define

	* dbus/dbus-sysdeps.c (_dbus_directory_open) (_dbus_file_get_contents)
	(_dbus_directory_get_next_file): use DBusError instead of DBusResultCode
	(_dbus_result_from_errno): move to this file
2003-03-13 00:56:43 +00:00
Anders Carlsson
6cf6f82faa 2003-02-16 Anders Carlsson <andersca@codefactory.se>
* bus/dispatch.c: (send_one_message):
	Only send broadcast messages to registered connections.

	* dbus/dbus-message.c: (dbus_message_name_is):
	* dbus/dbus-message.h:
	New convenience function.

	* dbus/dbus-transport-debug.c: (do_reading):
	Only dispatch one message per run.

	* test/Makefile.am:
	* test/bus-test.c: (new_connection_callback), (die),
	(test_hello_client1_handler), (test_hello_client2_handler),
	(test_hello_replies), (main):

	* test/bus-test-loop.[ch]:
	Add these.
2003-02-16 21:50:32 +00:00
Anders Carlsson
50137daea3 2003-02-16 Anders Carlsson <andersca@codefactory.se>
* bus/dispatch.c: (bus_dispatch_message_handler):
	* dbus/dbus-errors.h:
	Return an error if someone tries to send a message to a service
	that doesn't exist.
2003-02-16 10:20:04 +00:00
Alexander Larsson
fe40189411 2003-02-15 Alexander Larsson <alexl@redhat.com>
* dbus/dbus-threads.c:
	* dbus/dbus-threads.h:
	Add condvars. Remove static mutext from API.
	Implement static mutexes by initializing them from threads_init.

	* glib/dbus-gthread.c:
	* qt/dbus-qthread.cpp:
	Update with the thread api changes.


	* dbus/dbus-list.c:
	* dbus/dbus-list.h:
	Turn StaticMutex into normal mutex + init function.
	Export new functions _dbus_list_alloc_link, _dbus_list_free_link,
	_dbus_list_append_link, _dbus_list_prepend_link


	* dbus/dbus-sysdeps.c:
	* dbus/dbus-sysdeps.h:
	New type dbus_atomic_t, and new functions _dbus_atomic_inc,
	_dbus_atomic_dec. Only slow fallback implementation at the moment.

	* dbus/dbus-protocol.h:
	Add DBUS_MESSAGE_LOCAL_DISCONNECT define

	* dbus/dbus-message.c:
	Make ref/unref atomic.
	Fix some docs.

	* dbus/dbus-connection-internal.h:
	* dbus/dbus-connection.c:
	* dbus/dbus-connection.h:
	Make threadsafe.
	Change _peek to _borrow,_return & _steal_borrowed.
	Change disconnect callback to event.
	Make dbus_connection_dispatch_messages reentrant.

	* dbus/dbus-transport.c:
	Don't ref the connection on calls to the transport
	implementation.

	* dbus/dbus-message-handler.c:
	Make threadsafe.

	* glib/dbus-gmain.c:
	Don't use peek_message anymore

	* test/Makefile.am:
	* test/debug-thread.c:
	* test/debug-thread.h:
	Simple thread implementation that asserts() on deadlocks in
	single-threaded code.

	* test/bus-test.c:
	(main) Call debug_threads_init.

	* test/watch.c:
	Use disconnect message instead of disconnect callback.

	* bus/connection.c:
	* bus/connection.h:
	Don't call dbus_connection_set_disconnect_function. Instead export
	bus_connection_disconnect.

	* bus/dispatch.c:
	Call bus_connection_disconnect when we get a disconnected message.
2003-02-15 16:25:08 +00:00