Utilities and portability
[D-Bus internal implementation details]

Utility functions (_dbus_assert(), _dbus_warn(), etc. More...

Data Structures

struct  DBusBabysitter
 Babysitter implementation details. More...
struct  DBusDirIter
 Internals of directory iterator. More...

Defines

#define _dbus_assert(condition)
 Aborts with an error message if the condition is false.
#define _dbus_assert_not_reached(explanation)
 Aborts with an error message if called.
#define _DBUS_N_ELEMENTS(array)   ((int) (sizeof ((array)) / sizeof ((array)[0])))
 Computes the number of elements in a fixed-size array using sizeof().
#define _DBUS_POINTER_TO_INT(pointer)   ((long)(pointer))
 Safely casts a void* to an integer; should only be used on void* that actually contain integers, for example one created with _DBUS_INT_TO_POINTER.
#define _DBUS_INT_TO_POINTER(integer)   ((void*)((long)(integer)))
 Safely stuffs an integer into a pointer, to be extracted later with _DBUS_POINTER_TO_INT.
#define _DBUS_ZERO(object)   (memset (&(object), '\0', sizeof ((object))))
 Sets all bits in an object to zero.
#define _DBUS_INT16_MIN   ((dbus_int16_t) 0x8000)
 Minimum value of type "int16".
#define _DBUS_INT16_MAX   ((dbus_int16_t) 0x7fff)
 Maximum value of type "int16".
#define _DBUS_UINT16_MAX   ((dbus_uint16_t)0xffff)
 Maximum value of type "uint16".
#define _DBUS_INT32_MIN   ((dbus_int32_t) 0x80000000)
 Minimum value of type "int32".
#define _DBUS_INT32_MAX   ((dbus_int32_t) 0x7fffffff)
 Maximum value of type "int32".
#define _DBUS_UINT32_MAX   ((dbus_uint32_t)0xffffffff)
 Maximum value of type "uint32".
#define _DBUS_INT_MIN   _DBUS_INT32_MIN
 Minimum value of type "int".
#define _DBUS_INT_MAX   _DBUS_INT32_MAX
 Maximum value of type "int".
#define _DBUS_UINT_MAX   _DBUS_UINT32_MAX
 Maximum value of type "uint".
#define _DBUS_LOCK_NAME(name)   _dbus_lock_##name
 Expands to name of a global lock variable.
#define _DBUS_DEFINE_GLOBAL_LOCK(name)   DBusMutex *_dbus_lock_##name
 Defines a global lock variable with the given name.
#define _DBUS_DECLARE_GLOBAL_LOCK(name)   extern DBusMutex *_dbus_lock_##name
 Expands to declaration of a global lock defined with _DBUS_DEFINE_GLOBAL_LOCK.
#define _DBUS_LOCK(name)   _dbus_mutex_lock (_dbus_lock_##name)
 Locks a global lock.
#define _DBUS_UNLOCK(name)   _dbus_mutex_unlock (_dbus_lock_##name)
 Unlocks a global lock.
#define LIVE_CHILDREN(sitter)   ((sitter)->socket_to_babysitter >= 0 || (sitter)->error_pipe_from_child >= 0)
 Macro returns TRUE if the babysitter still has live sockets open to the babysitter child or the grandchild.
#define READ_END   0
 Helps remember which end of the pipe is which.
#define WRITE_END   1
 Helps remember which end of the pipe is which.
#define _DBUS_MAX_SUN_PATH_LENGTH   99
 Maximum length of the path to a UNIX domain socket, sockaddr_un::sun_path member.
#define NANOSECONDS_PER_SECOND   1000000000
 nanoseconds in a second
#define MICROSECONDS_PER_SECOND   1000000
 microseconds in a second
#define MILLISECONDS_PER_SECOND   1000
 milliseconds in a second
#define NANOSECONDS_PER_MILLISECOND   1000000
 nanoseconds in a millisecond
#define MICROSECONDS_PER_MILLISECOND   1000
 microseconds in a millisecond

Typedefs

typedef void(*) DBusForeachFunction (void *element, void *data)
 Used to iterate over each item in a collection, such as a DBusList.

Enumerations

enum  ReadStatus { READ_STATUS_OK, READ_STATUS_ERROR, READ_STATUS_EOF }
 Enumeration for status of a read(). More...
enum  { CHILD_EXITED, CHILD_FORK_FAILED, CHILD_EXEC_FAILED, CHILD_PID }

Functions

void _dbus_warn (const char *format,...)
 Prints a warning message to stderr.
char * _dbus_strdup (const char *str)
 Duplicates a string.
void * _dbus_memdup (const void *mem, size_t n_bytes)
 Duplicates a block of memory.
char ** _dbus_dup_string_array (const char **array)
 Duplicates a string array.
dbus_bool_t _dbus_string_array_contains (const char **array, const char *str)
 Checks whether a string array contains the given string.
DBusBabysitter_dbus_babysitter_ref (DBusBabysitter *sitter)
 Increment the reference count on the babysitter object.
void _dbus_babysitter_unref (DBusBabysitter *sitter)
 Decrement the reference count on the babysitter object.
void _dbus_babysitter_kill_child (DBusBabysitter *sitter)
 Blocks until the babysitter process gives us the PID of the spawned grandchild, then kills the spawned grandchild.
dbus_bool_t _dbus_babysitter_get_child_exited (DBusBabysitter *sitter)
 Checks whether the child has exited, without blocking.
void _dbus_babysitter_set_child_exit_error (DBusBabysitter *sitter, DBusError *error)
 Sets the DBusError with an explanation of why the spawned child process exited (on a signal, or whatever).
dbus_bool_t _dbus_babysitter_set_watch_functions (DBusBabysitter *sitter, DBusAddWatchFunction add_function, DBusRemoveWatchFunction remove_function, DBusWatchToggledFunction toggled_function, void *data, DBusFreeFunction free_data_function)
 Sets watch functions to notify us when the babysitter object needs to read/write file descriptors.
dbus_bool_t _dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p, char **argv, DBusSpawnChildSetupFunc child_setup, void *user_data, DBusError *error)
 Spawns a new process.
int _dbus_read (int fd, DBusString *buffer, int count)
 Thin wrapper around the read() system call that appends the data it reads to the DBusString buffer.
int _dbus_write (int fd, const DBusString *buffer, int start, int len)
 Thin wrapper around the write() system call that writes a part of a DBusString and handles EINTR for you.
int _dbus_write_two (int fd, const DBusString *buffer1, int start1, int len1, const DBusString *buffer2, int start2, int len2)
 Like _dbus_write() but will use writev() if possible to write both buffers in sequence.
int _dbus_connect_unix_socket (const char *path, dbus_bool_t abstract, DBusError *error)
 Creates a socket and connects it to the UNIX domain socket at the given path.
int _dbus_listen_unix_socket (const char *path, dbus_bool_t abstract, DBusError *error)
 Creates a socket and binds it to the given path, then listens on the socket.
int _dbus_connect_tcp_socket (const char *host, dbus_uint32_t port, DBusError *error)
 Creates a socket and connects to a socket at the given host and port.
int _dbus_listen_tcp_socket (const char *host, dbus_uint32_t port, DBusError *error)
 Creates a socket and binds it to the given path, then listens on the socket.
dbus_bool_t _dbus_read_credentials_unix_socket (int client_fd, DBusCredentials *credentials, DBusError *error)
 Reads a single byte which must be nul (an error occurs otherwise), and reads unix credentials if available.
dbus_bool_t _dbus_send_credentials_unix_socket (int server_fd, DBusError *error)
 Sends a single nul byte with our UNIX credentials as ancillary data.
int _dbus_accept (int listen_fd)
 Accepts a connection on a listening socket.
dbus_bool_t _dbus_check_dir_is_private_to_user (DBusString *dir, DBusError *error)
 Checks to make sure the given directory is private to the user.
dbus_bool_t _dbus_user_info_fill (DBusUserInfo *info, const DBusString *username, DBusError *error)
 Gets user info for the given username.
dbus_bool_t _dbus_user_info_fill_uid (DBusUserInfo *info, dbus_uid_t uid, DBusError *error)
 Gets user info for the given user ID.
void _dbus_credentials_from_current_process (DBusCredentials *credentials)
 Gets the credentials of the current process.
unsigned long _dbus_getpid (void)
 Gets our process ID.
dbus_uid_t _dbus_getuid (void)
 Gets our UID.
int _dbus_poll (DBusPollFD *fds, int n_fds, int timeout_milliseconds)
 Wrapper for poll().
void _dbus_get_current_time (long *tv_sec, long *tv_usec)
 Get current time, as in gettimeofday().
dbus_bool_t _dbus_file_get_contents (DBusString *str, const DBusString *filename, DBusError *error)
 Appends the contents of the given file to the string, returning error code.
dbus_bool_t _dbus_string_save_to_file (const DBusString *str, const DBusString *filename, DBusError *error)
 Writes a string out to a file.
dbus_bool_t _dbus_create_file_exclusively (const DBusString *filename, DBusError *error)
 Creates the given file, failing if the file already exists.
dbus_bool_t _dbus_delete_file (const DBusString *filename, DBusError *error)
 Deletes the given file.
dbus_bool_t _dbus_create_directory (const DBusString *filename, DBusError *error)
 Creates a directory; succeeds if the directory is created or already existed.
dbus_bool_t _dbus_concat_dir_and_file (DBusString *dir, const DBusString *next_component)
 Appends the given filename to the given directory.
void _dbus_sleep_milliseconds (int milliseconds)
 Sleeps the given number of milliseconds.
dbus_bool_t _dbus_generate_random_bytes (DBusString *str, int n_bytes)
 Generates the given number of random bytes, using the best mechanism we can come up with.
void _dbus_exit (int code)
 Exit the process, returning the given value.
const char * _dbus_strerror (int error_number)
 A wrapper around strerror() because some platforms may be lame and not have strerror().
void _dbus_disable_sigpipe (void)
 signal (SIGPIPE, SIG_IGN);
void _dbus_fd_set_close_on_exec (int fd)
 Sets the file descriptor to be close on exec.
dbus_bool_t _dbus_close (int fd, DBusError *error)
 Closes a file descriptor.
dbus_bool_t _dbus_set_fd_nonblocking (int fd, DBusError *error)
 Sets a file descriptor to be nonblocking.
dbus_bool_t _dbus_full_duplex_pipe (int *fd1, int *fd2, dbus_bool_t blocking, DBusError *error)
 Creates a full-duplex pipe (as in socketpair()).
int _dbus_printf_string_upper_bound (const char *format, va_list args)
 Measure the length of the given format string and arguments, not including the terminating nul.
const char * _dbus_get_tmpdir (void)
 Gets the temporary files directory by inspecting the environment variables TMPDIR, TMP, and TEMP in that order.
dbus_bool_t _dbus_become_daemon (const DBusString *pidfile, int print_pid_fd, DBusError *error)
 Does the chdir, fork, setsid, etc.
dbus_bool_t _dbus_write_pid_file (const DBusString *filename, unsigned long pid, DBusError *error)
 Creates a file containing the process ID.
dbus_bool_t _dbus_change_identity (dbus_uid_t uid, dbus_gid_t gid, DBusError *error)
 Changes the user and group the bus is running as.
void _dbus_set_signal_handler (int sig, DBusSignalHandler handler)
 Installs a UNIX signal handler.
dbus_bool_t _dbus_delete_directory (const DBusString *filename, DBusError *error)
 Removes a directory; Directory must be empty.
dbus_bool_t _dbus_file_exists (const char *file)
 Checks if a file exists.
dbus_bool_t _dbus_user_at_console (const char *username, DBusError *error)
 Checks if user is at the console.
dbus_bool_t _dbus_path_is_absolute (const DBusString *filename)
 Checks whether the filename is an absolute path.
dbus_bool_t _dbus_stat (const DBusString *filename, DBusStat *statbuf, DBusError *error)
 stat() wrapper.
DBusDirIter_dbus_directory_open (const DBusString *filename, DBusError *error)
 Open a directory to iterate over.
dbus_bool_t _dbus_directory_get_next_file (DBusDirIter *iter, DBusString *filename, DBusError *error)
 Get next file in the directory.
void _dbus_directory_close (DBusDirIter *iter)
 Closes a directory iteration.
dbus_bool_t _dbus_group_info_fill (DBusGroupInfo *info, const DBusString *groupname, DBusError *error)
 Initializes the given DBusGroupInfo struct with information about the given group name.
dbus_bool_t _dbus_group_info_fill_gid (DBusGroupInfo *info, dbus_gid_t gid, DBusError *error)
 Initializes the given DBusGroupInfo struct with information about the given group ID.
dbus_bool_t _dbus_setenv (const char *varname, const char *value)
 Wrapper for setenv().
const char * _dbus_getenv (const char *varname)
 Wrapper for getenv().
void _dbus_user_info_free (DBusUserInfo *info)
 Frees the members of info (but not info itself).
void _dbus_group_info_free (DBusGroupInfo *info)
 Frees the members of info (but not info itself).
void _dbus_credentials_clear (DBusCredentials *credentials)
 Sets fields in DBusCredentials to DBUS_PID_UNSET, DBUS_UID_UNSET, DBUS_GID_UNSET.
dbus_bool_t _dbus_credentials_match (const DBusCredentials *expected_credentials, const DBusCredentials *provided_credentials)
 Checks whether the provided_credentials are allowed to log in as the expected_credentials.
dbus_int32_t _dbus_atomic_inc (DBusAtomic *atomic)
 Atomically increments an integer.
dbus_int32_t _dbus_atomic_dec (DBusAtomic *atomic)
 Atomically decrement an integer.
void _dbus_generate_pseudorandom_bytes_buffer (char *buffer, int n_bytes)
void _dbus_generate_random_bytes_buffer (char *buffer, int n_bytes)
 Fills n_bytes of the given buffer with random bytes.
dbus_bool_t _dbus_generate_random_ascii (DBusString *str, int n_bytes)
 Generates the given number of random bytes, where the bytes are chosen from the alphanumeric ASCII subset.
dbus_bool_t _dbus_parse_uid (const DBusString *uid_str, dbus_uid_t *uid)
 Gets a UID from a UID string.
const char * _dbus_error_from_errno (int error_number)
 Converts a UNIX or Windows errno into a DBusError name.
dbus_bool_t _dbus_is_console_user (dbus_uid_t uid, DBusError *error)
 Checks to see if the UID sent in is the console user.
dbus_bool_t _dbus_credentials_from_uid (dbus_uid_t uid, DBusCredentials *credentials)
 Gets the credentials corresponding to the given UID.
dbus_bool_t _dbus_get_user_id (const DBusString *username, dbus_uid_t *uid)
 Gets user ID given username.
dbus_bool_t _dbus_get_group_id (const DBusString *groupname, dbus_gid_t *gid)
 Gets group ID given groupname.
DBusGroupInfo_dbus_user_database_lookup_group (DBusUserDatabase *db, dbus_gid_t gid, const DBusString *groupname, DBusError *error)
 Looks up a gid or group name in the user database.
dbus_bool_t _dbus_user_database_get_groupname (DBusUserDatabase *db, const DBusString *groupname, const DBusGroupInfo **info, DBusError *error)
 Gets the user information for the given group name, returned group info should not be freed.
dbus_bool_t _dbus_user_database_get_gid (DBusUserDatabase *db, dbus_gid_t gid, const DBusGroupInfo **info, DBusError *error)
 Gets the user information for the given GID, returned group info should not be freed.
dbus_bool_t _dbus_user_database_get_groups (DBusUserDatabase *db, dbus_uid_t uid, dbus_gid_t **group_ids, int *n_group_ids, DBusError *error)
 Gets all groups for a particular user.
void _dbus_user_info_free_allocated (DBusUserInfo *info)
 Frees the given DBusUserInfo's members with _dbus_user_info_free() and also calls dbus_free() on the block itself.
void _dbus_group_info_free_allocated (DBusGroupInfo *info)
 Frees the given DBusGroupInfo's members with _dbus_group_info_free() and also calls dbus_free() on the block itself.
dbus_bool_t _dbus_is_a_number (const DBusString *str, unsigned long *num)
 Checks if a given string is actually a number and converts it if it is.
DBusUserInfo_dbus_user_database_lookup (DBusUserDatabase *db, dbus_uid_t uid, const DBusString *username, DBusError *error)
 Looks up a uid or username in the user database.
void _dbus_user_database_lock_system (void)
 Locks global system user database.
void _dbus_user_database_unlock_system (void)
 Unlocks global system user database.
DBusUserDatabase * _dbus_user_database_get_system (void)
 Gets the system global user database; must be called with lock held (_dbus_user_database_lock_system()).
dbus_bool_t _dbus_username_from_current_process (const DBusString **username)
 Gets username of user owning current process.
dbus_bool_t _dbus_homedir_from_current_process (const DBusString **homedir)
 Gets homedir of user owning current process.
dbus_bool_t _dbus_homedir_from_username (const DBusString *username, DBusString *homedir)
 Gets the home directory for the given user.
dbus_bool_t _dbus_credentials_from_username (const DBusString *username, DBusCredentials *credentials)
 Gets the credentials corresponding to the given username.
DBusUserDatabase * _dbus_user_database_new (void)
 Creates a new user database object used to look up and cache user information.
void _dbus_user_database_flush (DBusUserDatabase *db)
 Flush all information out of the user database.
void _dbus_user_database_unref (DBusUserDatabase *db)
 Decrements refcount of user database.
dbus_bool_t _dbus_user_database_get_uid (DBusUserDatabase *db, dbus_uid_t uid, const DBusUserInfo **info, DBusError *error)
 Gets the user information for the given UID, returned user info should not be freed.
dbus_bool_t _dbus_user_database_get_username (DBusUserDatabase *db, const DBusString *username, const DBusUserInfo **info, DBusError *error)
 Gets the user information for the given username.

Variables

const char _dbus_no_memory_message [] = "Not enough memory"
 Fixed "out of memory" error message, just to avoid making up a different string every time and wasting space.
const char _dbus_return_if_fail_warning_format []
 String used in _dbus_return_if_fail macro.

Detailed Description

Utility functions (_dbus_assert(), _dbus_warn(), etc.

)


Define Documentation

#define _dbus_assert ( condition   ) 

Aborts with an error message if the condition is false.

Parameters:
condition condition which must be true.

Definition at line 103 of file dbus-internals.h.

Referenced by _dbus_auth_decode_data(), _dbus_auth_encode_data(), _dbus_auth_get_buffer(), _dbus_auth_get_bytes_to_send(), _dbus_auth_get_guid_from_server(), _dbus_auth_ref(), _dbus_auth_return_buffer(), _dbus_auth_unref(), _dbus_babysitter_ref(), _dbus_babysitter_unref(), _dbus_connection_block_pending_call(), _dbus_connection_close_internal(), _dbus_connection_message_sent(), _dbus_connection_queue_received_message_link(), _dbus_connection_ref_unlocked(), _dbus_connection_send_and_unlock(), _dbus_connection_toggle_watch_unlocked(), _dbus_connection_unref_unlocked(), _dbus_counter_ref(), _dbus_counter_unref(), _dbus_credentials_from_current_process(), _dbus_credentials_from_uid(), _dbus_data_slot_allocator_alloc(), _dbus_data_slot_allocator_free(), _dbus_data_slot_list_get(), _dbus_data_slot_list_set(), _dbus_decompose_path(), _dbus_generate_random_ascii(), _dbus_get_tmpdir(), _dbus_hash_iter_get_int_key(), _dbus_hash_iter_get_string_key(), _dbus_hash_iter_get_ulong_key(), _dbus_hash_iter_get_value(), _dbus_hash_iter_init(), _dbus_hash_iter_lookup(), _dbus_hash_iter_next(), _dbus_hash_iter_remove_entry(), _dbus_hash_iter_set_value(), _dbus_hash_table_free_preallocated_entry(), _dbus_hash_table_insert_int(), _dbus_hash_table_insert_string(), _dbus_hash_table_insert_string_preallocated(), _dbus_hash_table_insert_ulong(), _dbus_hash_table_lookup_int(), _dbus_hash_table_lookup_string(), _dbus_hash_table_lookup_ulong(), _dbus_hash_table_new(), _dbus_hash_table_remove_int(), _dbus_hash_table_remove_string(), _dbus_hash_table_remove_ulong(), _dbus_header_create(), _dbus_header_delete_field(), _dbus_header_get_field_basic(), _dbus_header_get_message_type(), _dbus_header_have_message_untrusted(), _dbus_header_load(), _dbus_header_set_field_basic(), _dbus_header_set_serial(), _dbus_keyring_new_homedir(), _dbus_list_copy(), _dbus_marshal_byteswap(), _dbus_marshal_read_basic(), _dbus_marshal_read_uint32(), _dbus_marshal_set_basic(), _dbus_marshal_skip_basic(), _dbus_marshal_write_basic(), _dbus_marshal_write_fixed_multi(), _dbus_mem_pool_alloc(), _dbus_mem_pool_dealloc(), _dbus_mem_pool_new(), _dbus_message_get_network_data(), _dbus_message_iter_get_args_valist(), _dbus_message_loader_get_buffer(), _dbus_message_loader_get_is_corrupted(), _dbus_message_loader_queue_messages(), _dbus_message_loader_return_buffer(), _dbus_message_lock(), _dbus_message_remove_size_counter(), _dbus_message_set_serial(), _dbus_mutex_new_at_location(), _dbus_object_tree_get_user_data_unlocked(), _dbus_object_tree_ref(), _dbus_object_tree_register(), _dbus_object_tree_unref(), _dbus_object_tree_unregister_and_unlock(), _dbus_pending_call_complete(), _dbus_pending_call_get_connection_and_lock(), _dbus_pending_call_get_connection_unlocked(), _dbus_pending_call_get_reply_serial_unlocked(), _dbus_pending_call_get_timeout_unlocked(), _dbus_pending_call_is_timeout_added_unlocked(), _dbus_pending_call_new_unlocked(), _dbus_pending_call_queue_timeout_error_unlocked(), _dbus_pending_call_set_reply_serial_unlocked(), _dbus_pending_call_set_reply_unlocked(), _dbus_pending_call_set_timeout_added_unlocked(), _dbus_pending_call_unref_and_unlock(), _dbus_read(), _dbus_read_credentials_unix_socket(), _dbus_server_finalize_base(), _dbus_server_ref_unlocked(), _dbus_server_toggle_watch(), _dbus_server_unref_unlocked(), _dbus_setenv(), _dbus_string_append(), _dbus_string_append_len(), _dbus_string_copy_data(), _dbus_string_copy_len(), _dbus_string_copy_to_buffer(), _dbus_string_delete(), _dbus_string_ends_with_c_str(), _dbus_string_equal_c_str(), _dbus_string_equal_substring(), _dbus_string_find_blank(), _dbus_string_find_byte_backward(), _dbus_string_find_to(), _dbus_string_get_data_len(), _dbus_string_get_dirname(), _dbus_string_hex_decode(), _dbus_string_hex_encode(), _dbus_string_init_const(), _dbus_string_init_const_len(), _dbus_string_init_preallocated(), _dbus_string_insert_8_aligned(), _dbus_string_insert_alignment(), _dbus_string_insert_byte(), _dbus_string_insert_bytes(), _dbus_string_lengthen(), _dbus_string_move(), _dbus_string_move_len(), _dbus_string_pop_line(), _dbus_string_replace_len(), _dbus_string_set_length(), _dbus_string_shorten(), _dbus_string_skip_blank(), _dbus_string_skip_white(), _dbus_string_steal_data(), _dbus_string_validate_ascii(), _dbus_string_validate_nul(), _dbus_string_validate_utf8(), _dbus_swap_array(), _dbus_timeout_set_interval(), _dbus_timeout_unref(), _dbus_transport_disconnect(), _dbus_transport_do_iteration(), _dbus_transport_get_is_authenticated(), _dbus_transport_handle_watch(), _dbus_transport_init_base(), _dbus_transport_open(), _dbus_transport_queue_messages(), _dbus_transport_ref(), _dbus_transport_set_connection(), _dbus_transport_unref(), _dbus_type_reader_delete(), _dbus_type_reader_get_array_length(), _dbus_type_reader_get_current_type(), _dbus_type_reader_get_element_type(), _dbus_type_reader_greater_than(), _dbus_type_reader_read_basic(), _dbus_type_reader_read_fixed_multi(), _dbus_type_reader_read_raw(), _dbus_type_reader_recurse(), _dbus_type_reader_set_basic(), _dbus_type_signature_next(), _dbus_type_writer_unrecurse(), _dbus_type_writer_write_fixed_multi(), _dbus_user_database_get_system(), _dbus_user_database_lookup(), _dbus_user_database_unref(), _dbus_validate_body_with_reason(), _dbus_validate_bus_name(), _dbus_validate_interface(), _dbus_validate_member(), _dbus_validate_path(), _dbus_validate_signature(), _dbus_validate_signature_with_reason(), _dbus_verbose_bytes(), _dbus_verbose_bytes_of_string(), _dbus_watch_new(), _dbus_watch_unref(), _dbus_write_two(), dbus_address_entry_get_value(), dbus_address_unescape_value(), dbus_bus_set_unique_name(), dbus_connection_borrow_message(), dbus_connection_ref(), dbus_connection_return_message(), dbus_connection_send_with_reply_and_block(), dbus_connection_steal_borrowed_message(), dbus_connection_unref(), dbus_error_has_name(), dbus_error_init(), dbus_error_is_set(), dbus_free(), dbus_message_ref(), dbus_message_unref(), dbus_parse_address(), dbus_pending_call_ref(), dbus_pending_call_unref(), dbus_server_disconnect(), dbus_server_ref(), dbus_server_unref(), dbus_set_error(), dbus_set_error_const(), dbus_threads_init(), dbus_watch_get_enabled(), and dbus_watch_get_flags().

#define _dbus_assert_not_reached ( explanation   ) 

Aborts with an error message if called.

The given explanation will be printed.

Parameters:
explanation explanation of what happened if the code was reached.

Definition at line 115 of file dbus-internals.h.

Referenced by _dbus_become_daemon(), _dbus_data_slot_allocator_alloc(), _dbus_hash_table_new(), _dbus_header_set_field_basic(), _dbus_marshal_read_basic(), _dbus_marshal_set_basic(), _dbus_marshal_skip_basic(), _dbus_marshal_write_basic(), _dbus_marshal_write_fixed_multi(), _dbus_mem_pool_dealloc(), _dbus_spawn_async_with_babysitter(), _dbus_timeout_list_remove_timeout(), _dbus_type_get_alignment(), _dbus_type_reader_recurse(), _dbus_type_writer_write_basic(), _dbus_type_writer_write_fixed_multi(), _dbus_watch_list_remove_watch(), dbus_connection_dispatch(), and dbus_threads_init().

#define _DBUS_DECLARE_GLOBAL_LOCK ( name   )     extern DBusMutex *_dbus_lock_##name

Expands to declaration of a global lock defined with _DBUS_DEFINE_GLOBAL_LOCK.

The lock must be added to the list to initialize in dbus_threads_init().

Definition at line 271 of file dbus-internals.h.

#define _DBUS_DEFINE_GLOBAL_LOCK ( name   )     DBusMutex *_dbus_lock_##name

Defines a global lock variable with the given name.

The lock must be added to the list to initialize in dbus_threads_init().

Definition at line 272 of file dbus-internals.h.

#define _DBUS_INT_TO_POINTER ( integer   )     ((void*)((long)(integer)))

Safely stuffs an integer into a pointer, to be extracted later with _DBUS_POINTER_TO_INT.

Only guaranteed to preserve 32 bits.

Parameters:
integer the integer to stuff into a pointer.

Definition at line 151 of file dbus-internals.h.

Referenced by _dbus_hash_table_insert_int(), _dbus_hash_table_lookup_int(), _dbus_hash_table_remove_int(), and _dbus_validate_signature_with_reason().

#define _DBUS_MAX_SUN_PATH_LENGTH   99

Maximum length of the path to a UNIX domain socket, sockaddr_un::sun_path member.

POSIX requires that all systems support at least 100 bytes here, including the nul termination. We use 99 for the max value to allow for the nul.

We could probably also do sizeof (addr.sun_path) but this way we are the same on all platforms which is probably a good idea.

Referenced by _dbus_connect_unix_socket(), and _dbus_listen_unix_socket().

#define _DBUS_N_ELEMENTS ( array   )     ((int) (sizeof ((array)) / sizeof ((array)[0])))

Computes the number of elements in a fixed-size array using sizeof().

Parameters:
array the array to count elements in.

Definition at line 148 of file dbus-internals.h.

Referenced by _dbus_hash_table_new().

#define _DBUS_POINTER_TO_INT ( pointer   )     ((long)(pointer))

Safely casts a void* to an integer; should only be used on void* that actually contain integers, for example one created with _DBUS_INT_TO_POINTER.

Only guaranteed to preserve 32 bits. (i.e. it's used to store 32-bit ints in pointers, but can't be used to store 64-bit pointers in ints.)

Parameters:
pointer pointer to extract an integer from.

Definition at line 150 of file dbus-internals.h.

Referenced by _dbus_hash_iter_get_int_key(), and _dbus_validate_signature_with_reason().

#define _DBUS_ZERO ( object   )     (memset (&(object), '\0', sizeof ((object))))

Sets all bits in an object to zero.

Parameters:
object the object to be zeroed.

Definition at line 153 of file dbus-internals.h.

Referenced by _dbus_connect_tcp_socket(), _dbus_connect_unix_socket(), _dbus_listen_tcp_socket(), and _dbus_listen_unix_socket().


Enumeration Type Documentation

enum ReadStatus

Enumeration for status of a read().

Enumerator:
READ_STATUS_OK  Read succeeded.
READ_STATUS_ERROR  Some kind of error.
READ_STATUS_EOF  EOF returned.

Definition at line 50 of file dbus-spawn.c.


Function Documentation

int _dbus_accept ( int  listen_fd  ) 

Accepts a connection on a listening socket.

Handles EINTR for you.

Parameters:
listen_fd the listen file descriptor
Returns:
the connection fd of the client, or -1 on error

Definition at line 989 of file dbus-sysdeps-unix.c.

dbus_int32_t _dbus_atomic_dec ( DBusAtomic atomic  ) 

Atomically decrement an integer.

Parameters:
atomic pointer to the integer to decrement
Returns:
the value before decrementing
Todo:
implement arch-specific faster atomic ops

Definition at line 683 of file dbus-sysdeps.c.

References _DBUS_LOCK, _DBUS_UNLOCK, and DBusAtomic::value.

Referenced by _dbus_connection_unref_unlocked(), _dbus_server_unref_unlocked(), dbus_connection_unref(), dbus_message_unref(), dbus_pending_call_unref(), and dbus_server_unref().

dbus_int32_t _dbus_atomic_inc ( DBusAtomic atomic  ) 

Atomically increments an integer.

Parameters:
atomic pointer to the integer to increment
Returns:
the value before incrementing
Todo:
implement arch-specific faster atomic ops

Definition at line 660 of file dbus-sysdeps.c.

References _DBUS_LOCK, _DBUS_UNLOCK, and DBusAtomic::value.

Referenced by _dbus_connection_ref_unlocked(), _dbus_server_ref_unlocked(), dbus_connection_ref(), dbus_message_ref(), dbus_pending_call_ref(), and dbus_server_ref().

dbus_bool_t _dbus_babysitter_get_child_exited ( DBusBabysitter sitter  ) 

Checks whether the child has exited, without blocking.

Parameters:
sitter the babysitter

Definition at line 611 of file dbus-spawn.c.

References FALSE, and LIVE_CHILDREN.

Referenced by _dbus_babysitter_set_child_exit_error().

void _dbus_babysitter_kill_child ( DBusBabysitter sitter  ) 

Blocks until the babysitter process gives us the PID of the spawned grandchild, then kills the spawned grandchild.

Parameters:
sitter the babysitter object

Definition at line 589 of file dbus-spawn.c.

References LIVE_CHILDREN, and TRUE.

DBusBabysitter* _dbus_babysitter_ref ( DBusBabysitter sitter  ) 

Increment the reference count on the babysitter object.

Parameters:
sitter the babysitter
Returns:
the babysitter

Definition at line 243 of file dbus-spawn.c.

References _dbus_assert, NULL, and DBusBabysitter::refcount.

void _dbus_babysitter_set_child_exit_error ( DBusBabysitter sitter,
DBusError error 
)

Sets the DBusError with an explanation of why the spawned child process exited (on a signal, or whatever).

If the child process has not exited, does nothing (error will remain unset).

Parameters:
sitter the babysitter
error an error to fill in

Definition at line 633 of file dbus-spawn.c.

References _dbus_babysitter_get_child_exited(), _dbus_strerror(), DBUS_ERROR_FAILED, DBUS_ERROR_NO_MEMORY, DBUS_ERROR_SPAWN_CHILD_EXITED, DBUS_ERROR_SPAWN_CHILD_SIGNALED, DBUS_ERROR_SPAWN_EXEC_FAILED, and dbus_set_error().

dbus_bool_t _dbus_babysitter_set_watch_functions ( DBusBabysitter sitter,
DBusAddWatchFunction  add_function,
DBusRemoveWatchFunction  remove_function,
DBusWatchToggledFunction  toggled_function,
void *  data,
DBusFreeFunction  free_data_function 
)

Sets watch functions to notify us when the babysitter object needs to read/write file descriptors.

Parameters:
sitter the babysitter
add_function function to begin monitoring a new descriptor.
remove_function function to stop monitoring a descriptor.
toggled_function function to notify when the watch is enabled/disabled
data data to pass to add_function and remove_function.
free_data_function function to be called to free the data.
Returns:
FALSE on failure (no memory)

Definition at line 691 of file dbus-spawn.c.

References _dbus_watch_list_set_functions(), and DBusBabysitter::watches.

void _dbus_babysitter_unref ( DBusBabysitter sitter  ) 

Decrement the reference count on the babysitter object.

When the reference count of the babysitter object reaches zero, the babysitter is killed and the child that was being babysat gets emancipated.

Parameters:
sitter the babysitter

Definition at line 262 of file dbus-spawn.c.

References _dbus_assert, _dbus_close(), _dbus_strerror(), _dbus_warn(), _dbus_watch_invalidate(), _dbus_watch_list_free(), _dbus_watch_unref(), dbus_free(), DBusBabysitter::error_pipe_from_child, DBusBabysitter::error_watch, DBusBabysitter::executable, NULL, DBusBabysitter::refcount, DBusBabysitter::sitter_pid, DBusBabysitter::sitter_watch, DBusBabysitter::socket_to_babysitter, DBusBabysitter::status, and DBusBabysitter::watches.

Referenced by _dbus_spawn_async_with_babysitter().

dbus_bool_t _dbus_become_daemon ( const DBusString pidfile,
int  print_pid_fd,
DBusError error 
)

Does the chdir, fork, setsid, etc.

to become a daemon process.

Parameters:
pidfile NULL, or pidfile to create
print_pid_fd file descriptor to print daemon's pid to, or -1 for none
error return location for errors
Returns:
FALSE on failure

Definition at line 65 of file dbus-sysdeps-util-unix.c.

References _dbus_assert_not_reached, _dbus_error_from_errno(), _dbus_getenv(), _dbus_strerror(), _dbus_string_append(), _dbus_string_append_int(), _dbus_string_free(), _dbus_string_init(), _dbus_write(), _dbus_write_pid_file(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, NULL, and TRUE.

dbus_bool_t _dbus_change_identity ( dbus_uid_t  uid,
dbus_gid_t  gid,
DBusError error 
)

Changes the user and group the bus is running as.

Parameters:
uid the new user ID
gid the new group ID
error return location for errors
Returns:
FALSE on failure

Definition at line 249 of file dbus-sysdeps-util-unix.c.

References _dbus_error_from_errno(), _dbus_strerror(), _dbus_warn(), dbus_set_error(), FALSE, NULL, and TRUE.

dbus_bool_t _dbus_check_dir_is_private_to_user ( DBusString dir,
DBusError error 
)

Checks to make sure the given directory is private to the user.

Parameters:
dir the name of the directory
error error return
Returns:
FALSE on failure

Definition at line 1018 of file dbus-sysdeps-unix.c.

References _dbus_error_from_errno(), _dbus_strerror(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, and TRUE.

dbus_bool_t _dbus_close ( int  fd,
DBusError error 
)

Closes a file descriptor.

Parameters:
fd the file descriptor
error error object
Returns:
FALSE if error set

Definition at line 2007 of file dbus-sysdeps-unix.c.

References _dbus_error_from_errno(), dbus_set_error(), FALSE, and TRUE.

Referenced by _dbus_babysitter_unref(), _dbus_connect_tcp_socket(), _dbus_connect_unix_socket(), _dbus_create_file_exclusively(), _dbus_file_get_contents(), _dbus_full_duplex_pipe(), _dbus_generate_random_bytes(), _dbus_listen_tcp_socket(), _dbus_listen_unix_socket(), _dbus_server_new_for_domain_socket(), _dbus_server_new_for_tcp_socket(), _dbus_string_save_to_file(), _dbus_transport_new_for_domain_socket(), _dbus_transport_new_for_tcp_socket(), and _dbus_write_pid_file().

dbus_bool_t _dbus_concat_dir_and_file ( DBusString dir,
const DBusString next_component 
)

Appends the given filename to the given directory.

Todo:
it might be cute to collapse multiple '/' such as "foo//" concat "//bar"
Parameters:
dir the directory name
next_component the filename
Returns:
TRUE on success

Definition at line 1810 of file dbus-sysdeps-unix.c.

References _dbus_string_append_byte(), _dbus_string_copy(), _dbus_string_shorten(), FALSE, and TRUE.

Referenced by _dbus_keyring_new_homedir(), and dbus_server_listen().

int _dbus_connect_tcp_socket ( const char *  host,
dbus_uint32_t  port,
DBusError error 
)

Creates a socket and connects to a socket at the given host and port.

The connection fd is returned, and is set up as nonblocking.

Parameters:
host the host name to connect to
port the prot to connect to
error return location for error code
Returns:
connection file descriptor or -1 on error

Definition at line 571 of file dbus-sysdeps-unix.c.

References _dbus_close(), _dbus_error_from_errno(), _dbus_set_fd_nonblocking(), _dbus_strerror(), _DBUS_ZERO, dbus_set_error(), and NULL.

Referenced by _dbus_transport_new_for_tcp_socket().

int _dbus_connect_unix_socket ( const char *  path,
dbus_bool_t  abstract,
DBusError error 
)

Creates a socket and connects it to the UNIX domain socket at the given path.

The connection fd is returned, and is set up as nonblocking.

Uses abstract sockets instead of filesystem-linked sockets if requested (it's possible only on Linux; see "man 7 unix" on Linux). On non-Linux abstract socket usage always fails.

Parameters:
path the path to UNIX domain socket
abstract TRUE to use abstract namespace
error return location for error code
Returns:
connection file descriptor or -1 on error

Definition at line 296 of file dbus-sysdeps-unix.c.

References _dbus_close(), _dbus_error_from_errno(), _DBUS_MAX_SUN_PATH_LENGTH, _dbus_set_fd_nonblocking(), _dbus_strerror(), _DBUS_ZERO, DBUS_ERROR_BAD_ADDRESS, DBUS_ERROR_NOT_SUPPORTED, dbus_set_error(), and NULL.

Referenced by _dbus_transport_new_for_domain_socket().

dbus_bool_t _dbus_create_directory ( const DBusString filename,
DBusError error 
)

Creates a directory; succeeds if the directory is created or already existed.

Parameters:
filename directory filename
error initialized error object
Returns:
TRUE on success

Definition at line 1776 of file dbus-sysdeps-unix.c.

References _dbus_strerror(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, and TRUE.

Referenced by _dbus_keyring_new_homedir().

dbus_bool_t _dbus_create_file_exclusively ( const DBusString filename,
DBusError error 
)

Creates the given file, failing if the file already exists.

Parameters:
filename the filename
error error location
Returns:
TRUE if we created the file and it didn't exist

Definition at line 1703 of file dbus-sysdeps-unix.c.

References _dbus_close(), _dbus_strerror(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, NULL, and TRUE.

void _dbus_credentials_clear ( DBusCredentials credentials  ) 

Sets fields in DBusCredentials to DBUS_PID_UNSET, DBUS_UID_UNSET, DBUS_GID_UNSET.

Parameters:
credentials the credentials object to fill in

Definition at line 602 of file dbus-sysdeps.c.

References DBusCredentials::gid, DBusCredentials::pid, and DBusCredentials::uid.

Referenced by _dbus_auth_get_identity(), and _dbus_read_credentials_unix_socket().

void _dbus_credentials_from_current_process ( DBusCredentials credentials  ) 

Gets the credentials of the current process.

Parameters:
credentials credentials to fill in.

Definition at line 1285 of file dbus-sysdeps-unix.c.

References _dbus_assert, DBusCredentials::gid, DBusCredentials::pid, and DBusCredentials::uid.

Referenced by _dbus_transport_get_is_authenticated().

dbus_bool_t _dbus_credentials_from_uid ( dbus_uid_t  uid,
DBusCredentials credentials 
)

Gets the credentials corresponding to the given UID.

Parameters:
uid the UID
credentials credentials to fill in
Returns:
TRUE if the UID existed and we got some credentials

Definition at line 113 of file dbus-userdb-util.c.

References _dbus_assert, _dbus_user_database_get_system(), _dbus_user_database_get_uid(), _dbus_user_database_lock_system(), _dbus_user_database_unlock_system(), DBusTransport::credentials, FALSE, DBusCredentials::gid, NULL, DBusCredentials::pid, DBusUserInfo::primary_gid, TRUE, DBusUserInfo::uid, and DBusCredentials::uid.

dbus_bool_t _dbus_credentials_from_username ( const DBusString username,
DBusCredentials credentials 
)

Gets the credentials corresponding to the given username.

Parameters:
username the username
credentials credentials to fill in
Returns:
TRUE if the username existed and we got some credentials

Definition at line 405 of file dbus-userdb.c.

References _dbus_user_database_get_system(), _dbus_user_database_get_username(), _dbus_user_database_lock_system(), _dbus_user_database_unlock_system(), DBusTransport::credentials, FALSE, DBusCredentials::gid, NULL, DBusCredentials::pid, DBusUserInfo::primary_gid, TRUE, DBusCredentials::uid, and DBusUserInfo::uid.

Referenced by _dbus_get_user_id().

dbus_bool_t _dbus_credentials_match ( const DBusCredentials expected_credentials,
const DBusCredentials provided_credentials 
)

Checks whether the provided_credentials are allowed to log in as the expected_credentials.

Parameters:
expected_credentials credentials we're trying to log in as
provided_credentials credentials we have
Returns:
TRUE if we can log in

Definition at line 618 of file dbus-sysdeps.c.

References FALSE, TRUE, and DBusCredentials::uid.

Referenced by _dbus_transport_get_is_authenticated().

dbus_bool_t _dbus_delete_directory ( const DBusString filename,
DBusError error 
)

Removes a directory; Directory must be empty.

Parameters:
filename directory filename
error initialized error object
Returns:
TRUE on success

Definition at line 314 of file dbus-sysdeps-util-unix.c.

References _dbus_strerror(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, and TRUE.

dbus_bool_t _dbus_delete_file ( const DBusString filename,
DBusError error 
)

Deletes the given file.

Parameters:
filename the filename
error error location
Returns:
TRUE if unlink() succeeded

Definition at line 1747 of file dbus-sysdeps-unix.c.

References _dbus_strerror(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, and TRUE.

dbus_bool_t _dbus_directory_get_next_file ( DBusDirIter iter,
DBusString filename,
DBusError error 
)

Get next file in the directory.

Will not return "." or ".." on UNIX. If an error occurs, the contents of "filename" are undefined. The error is never set if the function succeeds.

Parameters:
iter the iterator
filename string to be set to the next file in the dir
error return location for error
Returns:
TRUE if filename was filled in with a new filename

Definition at line 586 of file dbus-sysdeps-util-unix.c.

References _dbus_error_from_errno(), _dbus_strerror(), _dbus_string_append(), _dbus_string_set_length(), DBusDirIter::d, DBUS_ERROR_FAILED, DBUS_ERROR_NO_MEMORY, dbus_free(), dbus_malloc(), dbus_set_error(), FALSE, and TRUE.

DBusDirIter* _dbus_directory_open ( const DBusString filename,
DBusError error 
)

Open a directory to iterate over.

Parameters:
filename the directory name
error exception return object or NULL
Returns:
new iterator, or NULL on error

Definition at line 505 of file dbus-sysdeps-util-unix.c.

References _dbus_error_from_errno(), _dbus_strerror(), DBusDirIter::d, DBUS_ERROR_NO_MEMORY, dbus_new0, dbus_set_error(), and NULL.

char** _dbus_dup_string_array ( const char **  array  ) 

Duplicates a string array.

Result may be freed with dbus_free_string_array(). Returns NULL if memory allocation fails. If the array to be duplicated is NULL, returns NULL.

Parameters:
array array to duplicate.
Returns:
newly-allocated copy.

Definition at line 363 of file dbus-internals.c.

References _dbus_strdup(), dbus_free_string_array(), dbus_new0, and NULL.

Referenced by _dbus_auth_set_mechanisms(), and dbus_server_set_auth_mechanisms().

const char* _dbus_error_from_errno ( int  error_number  ) 

Converts a UNIX or Windows errno into a DBusError name.

Todo:
should cover more errnos, specifically those from open().
Parameters:
error_number the errno.
Returns:
an error name

Definition at line 845 of file dbus-sysdeps.c.

References DBUS_ERROR_ACCESS_DENIED, DBUS_ERROR_ADDRESS_IN_USE, DBUS_ERROR_FAILED, DBUS_ERROR_FILE_NOT_FOUND, DBUS_ERROR_LIMITS_EXCEEDED, DBUS_ERROR_NO_MEMORY, DBUS_ERROR_NO_NETWORK, DBUS_ERROR_NO_SERVER, DBUS_ERROR_NOT_SUPPORTED, and DBUS_ERROR_TIMEOUT.

Referenced by _dbus_become_daemon(), _dbus_change_identity(), _dbus_check_dir_is_private_to_user(), _dbus_close(), _dbus_connect_tcp_socket(), _dbus_connect_unix_socket(), _dbus_directory_get_next_file(), _dbus_directory_open(), _dbus_file_get_contents(), _dbus_full_duplex_pipe(), _dbus_listen_tcp_socket(), _dbus_listen_unix_socket(), _dbus_read_credentials_unix_socket(), _dbus_set_fd_nonblocking(), _dbus_stat(), _dbus_string_save_to_file(), and _dbus_write_pid_file().

void _dbus_exit ( int  code  ) 

Exit the process, returning the given value.

Parameters:
code the exit code

Definition at line 1944 of file dbus-sysdeps-unix.c.

Referenced by dbus_connection_dispatch().

void _dbus_fd_set_close_on_exec ( int  fd  ) 

Sets the file descriptor to be close on exec.

Should be called for all file descriptors in D-Bus code.

Parameters:
fd the file descriptor

Definition at line 1985 of file dbus-sysdeps-unix.c.

Referenced by _dbus_server_new_for_domain_socket(), _dbus_server_new_for_tcp_socket(), _dbus_spawn_async_with_babysitter(), _dbus_transport_new_for_domain_socket(), and _dbus_transport_new_for_tcp_socket().

dbus_bool_t _dbus_file_exists ( const char *  file  ) 

Checks if a file exists.

Parameters:
file full path to the file
Returns:
TRUE if file exists

Definition at line 340 of file dbus-sysdeps-util-unix.c.

Referenced by _dbus_user_at_console().

dbus_bool_t _dbus_file_get_contents ( DBusString str,
const DBusString filename,
DBusError error 
)

Appends the contents of the given file to the string, returning error code.

At the moment, won't open a file more than a megabyte in size.

Parameters:
str the string to append to
filename filename to load
error place to set an error
Returns:
FALSE if error was set

Definition at line 1461 of file dbus-sysdeps-unix.c.

References _dbus_close(), _dbus_error_from_errno(), _dbus_read(), _dbus_strerror(), _dbus_string_set_length(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, NULL, and TRUE.

dbus_bool_t _dbus_full_duplex_pipe ( int *  fd1,
int *  fd2,
dbus_bool_t  blocking,
DBusError error 
)

Creates a full-duplex pipe (as in socketpair()).

Sets both ends of the pipe nonblocking.

Todo:
libdbus only uses this for the debug-pipe server, so in principle it could be in dbus-sysdeps-util.c, except that dbus-sysdeps-util.c isn't in libdbus when tests are enabled and the debug-pipe server is used.
Parameters:
fd1 return location for one end
fd2 return location for the other end
blocking TRUE if pipe should be blocking
error error return
Returns:
FALSE on failure (if error is set)

Definition at line 2115 of file dbus-sysdeps-unix.c.

References _dbus_close(), _dbus_error_from_errno(), _dbus_set_fd_nonblocking(), _dbus_warn(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, NULL, and TRUE.

Referenced by _dbus_spawn_async_with_babysitter().

dbus_bool_t _dbus_generate_random_ascii ( DBusString str,
int  n_bytes 
)

Generates the given number of random bytes, where the bytes are chosen from the alphanumeric ASCII subset.

Parameters:
str the string
n_bytes the number of random ASCII bytes to append to string
Returns:
TRUE on success, FALSE if no memory or other failure

Definition at line 766 of file dbus-sysdeps.c.

References _dbus_assert, _dbus_generate_random_bytes(), _dbus_string_validate_ascii(), FALSE, and TRUE.

Referenced by _dbus_string_save_to_file(), and dbus_server_listen().

dbus_bool_t _dbus_generate_random_bytes ( DBusString str,
int  n_bytes 
)

Generates the given number of random bytes, using the best mechanism we can come up with.

Parameters:
str the string
n_bytes the number of random bytes to append to string
Returns:
TRUE on success, FALSE if no memory

Definition at line 1903 of file dbus-sysdeps-unix.c.

References _dbus_close(), _dbus_read(), _dbus_string_set_length(), NULL, and TRUE.

Referenced by _dbus_generate_random_ascii(), and _dbus_generate_random_bytes_buffer().

void _dbus_generate_random_bytes_buffer ( char *  buffer,
int  n_bytes 
)

Fills n_bytes of the given buffer with random bytes.

Parameters:
buffer an allocated buffer
n_bytes the number of bytes in buffer to write to

Definition at line 734 of file dbus-sysdeps.c.

References _dbus_generate_pseudorandom_bytes_buffer(), _dbus_generate_random_bytes(), _dbus_string_copy_to_buffer(), _dbus_string_free(), and _dbus_string_init().

void _dbus_get_current_time ( long *  tv_sec,
long *  tv_usec 
)

Get current time, as in gettimeofday().

Parameters:
tv_sec return location for number of seconds
tv_usec return location for number of microseconds (thousandths)

Definition at line 1437 of file dbus-sysdeps-unix.c.

References NULL.

Referenced by _dbus_connection_block_pending_call(), and _dbus_generate_pseudorandom_bytes_buffer().

dbus_bool_t _dbus_get_group_id ( const DBusString groupname,
dbus_gid_t *  gid 
)

Gets group ID given groupname.

Parameters:
groupname the groupname
gid return location for GID
Returns:
TRUE if group name existed and we got the GID

Definition at line 177 of file dbus-userdb-util.c.

References _dbus_user_database_get_groupname(), _dbus_user_database_get_system(), _dbus_user_database_lock_system(), _dbus_user_database_unlock_system(), FALSE, DBusGroupInfo::gid, NULL, and TRUE.

const char* _dbus_get_tmpdir ( void   ) 

Gets the temporary files directory by inspecting the environment variables TMPDIR, TMP, and TEMP in that order.

If none of those are set "/tmp" is returned

Returns:
location of temp directory

Definition at line 2184 of file dbus-sysdeps-unix.c.

References _dbus_assert, and NULL.

dbus_bool_t _dbus_get_user_id ( const DBusString username,
dbus_uid_t *  uid 
)

Gets user ID given username.

Parameters:
username the username
uid return location for UID
Returns:
TRUE if username existed and we got the UID

Definition at line 153 of file dbus-userdb-util.c.

References _dbus_credentials_from_username(), FALSE, TRUE, and DBusCredentials::uid.

const char* _dbus_getenv ( const char *  varname  ) 

Wrapper for getenv().

Parameters:
varname name of environment variable
Returns:
value of environment variable or NULL if unset

Definition at line 156 of file dbus-sysdeps.c.

Referenced by _dbus_become_daemon(), and _dbus_keyring_new_homedir().

unsigned long _dbus_getpid ( void   ) 

Gets our process ID.

Returns:
process ID

Definition at line 1305 of file dbus-sysdeps-unix.c.

dbus_uid_t _dbus_getuid ( void   ) 

Gets our UID.

Returns:
process UID

Definition at line 1314 of file dbus-sysdeps-unix.c.

dbus_bool_t _dbus_group_info_fill ( DBusGroupInfo info,
const DBusString groupname,
DBusError error 
)

Initializes the given DBusGroupInfo struct with information about the given group name.

Parameters:
info the group info struct
groupname name of group
error the error return
Returns:
FALSE if error is set

Definition at line 761 of file dbus-sysdeps-util-unix.c.

Referenced by _dbus_user_database_lookup_group().

dbus_bool_t _dbus_group_info_fill_gid ( DBusGroupInfo info,
dbus_gid_t  gid,
DBusError error 
)

Initializes the given DBusGroupInfo struct with information about the given group ID.

Parameters:
info the group info struct
gid group ID
error the error return
Returns:
FALSE if error is set

Definition at line 780 of file dbus-sysdeps-util-unix.c.

References NULL.

Referenced by _dbus_user_database_lookup_group().

void _dbus_group_info_free ( DBusGroupInfo info  ) 

Frees the members of info (but not info itself).

Parameters:
info the group info

Definition at line 590 of file dbus-sysdeps.c.

References dbus_free(), and DBusGroupInfo::groupname.

Referenced by _dbus_group_info_free_allocated().

void _dbus_group_info_free_allocated ( DBusGroupInfo info  ) 

Frees the given DBusGroupInfo's members with _dbus_group_info_free() and also calls dbus_free() on the block itself.

Parameters:
info the info

Definition at line 59 of file dbus-userdb.c.

References _dbus_group_info_free(), dbus_free(), and NULL.

Referenced by _dbus_user_database_lookup_group(), and _dbus_user_database_new().

dbus_bool_t _dbus_homedir_from_current_process ( const DBusString **  homedir  ) 

Gets homedir of user owning current process.

The returned string is valid until dbus_shutdown() is called.

Parameters:
homedir place to store pointer to homedir
Returns:
FALSE if no memory

Definition at line 344 of file dbus-userdb.c.

References _dbus_user_database_lock_system(), _dbus_user_database_unlock_system(), FALSE, and TRUE.

Referenced by _dbus_keyring_new_homedir().

dbus_bool_t _dbus_homedir_from_username ( const DBusString username,
DBusString homedir 
)

Gets the home directory for the given user.

Parameters:
username the username
homedir string to append home directory to
Returns:
TRUE if user existed and we appended their homedir

Definition at line 366 of file dbus-userdb.c.

References _dbus_string_append(), _dbus_user_database_get_system(), _dbus_user_database_get_username(), _dbus_user_database_lock_system(), _dbus_user_database_unlock_system(), FALSE, DBusUserInfo::homedir, NULL, and TRUE.

Referenced by _dbus_keyring_new_homedir().

dbus_bool_t _dbus_is_a_number ( const DBusString str,
unsigned long *  num 
)

Checks if a given string is actually a number and converts it if it is.

Parameters:
str the string to check
num the memory location of the unsigned long to fill in
Returns:
TRUE if str is a number and num is filled in

Definition at line 77 of file dbus-userdb.c.

References _dbus_string_parse_int(), FALSE, and TRUE.

Referenced by _dbus_user_database_lookup(), and _dbus_user_database_lookup_group().

dbus_bool_t _dbus_is_console_user ( dbus_uid_t  uid,
DBusError error 
)

Checks to see if the UID sent in is the console user.

Parameters:
uid UID of person to check
error return location for errors
Returns:
TRUE if the UID is the same as the console user and there are no errors

Definition at line 43 of file dbus-userdb-util.c.

References _dbus_stat(), _dbus_string_append(), _dbus_string_free(), _dbus_string_init(), _dbus_user_at_console(), _dbus_user_database_get_system(), _dbus_user_database_lock_system(), _dbus_user_database_lookup(), _dbus_user_database_unlock_system(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, NULL, TRUE, DBusStat::uid, and DBusUserInfo::username.

int _dbus_listen_tcp_socket ( const char *  host,
dbus_uint32_t  port,
DBusError error 
)

Creates a socket and binds it to the given path, then listens on the socket.

The socket is set to be nonblocking.

Parameters:
host the host name to listen on
port the prot to listen on
error return location for errors
Returns:
the listening file descriptor or -1 on error

Definition at line 650 of file dbus-sysdeps-unix.c.

References _dbus_close(), _dbus_error_from_errno(), _dbus_set_fd_nonblocking(), _dbus_strerror(), _DBUS_ZERO, dbus_set_error(), and NULL.

Referenced by _dbus_server_new_for_tcp_socket().

int _dbus_listen_unix_socket ( const char *  path,
dbus_bool_t  abstract,
DBusError error 
)

Creates a socket and binds it to the given path, then listens on the socket.

The socket is set to be nonblocking.

Uses abstract sockets instead of filesystem-linked sockets if requested (it's possible only on Linux; see "man 7 unix" on Linux). On non-Linux abstract socket usage always fails.

Parameters:
path the socket name
abstract TRUE to use abstract namespace
error return location for errors
Returns:
the listening file descriptor or -1 on error

Definition at line 432 of file dbus-sysdeps-unix.c.

References _dbus_close(), _dbus_error_from_errno(), _DBUS_MAX_SUN_PATH_LENGTH, _dbus_set_fd_nonblocking(), _dbus_strerror(), _dbus_warn(), _DBUS_ZERO, DBUS_ERROR_BAD_ADDRESS, DBUS_ERROR_NOT_SUPPORTED, dbus_set_error(), NULL, and TRUE.

Referenced by _dbus_server_new_for_domain_socket().

void* _dbus_memdup ( const void *  mem,
size_t  n_bytes 
)

Duplicates a block of memory.

Returns NULL on failure.

Parameters:
mem memory to copy
n_bytes number of bytes to copy
Returns:
the copy

Definition at line 340 of file dbus-internals.c.

References dbus_malloc(), and NULL.

Referenced by _dbus_decompose_path().

dbus_bool_t _dbus_parse_uid ( const DBusString uid_str,
dbus_uid_t *  uid 
)

Gets a UID from a UID string.

Parameters:
uid_str the UID in string form
uid UID to fill in
Returns:
TRUE if successfully filled in UID

Definition at line 802 of file dbus-sysdeps.c.

References _dbus_string_parse_int(), FALSE, and TRUE.

dbus_bool_t _dbus_path_is_absolute ( const DBusString filename  ) 

Checks whether the filename is an absolute path.

Parameters:
filename the filename
Returns:
TRUE if an absolute path

Definition at line 440 of file dbus-sysdeps-util-unix.c.

References FALSE.

int _dbus_poll ( DBusPollFD fds,
int  n_fds,
int  timeout_milliseconds 
)

Wrapper for poll().

Parameters:
fds the file descriptors to poll
n_fds number of descriptors in the array
timeout_milliseconds timeout or -1 for infinite
Returns:
numbers of fds with revents, or <0 on error

Definition at line 1339 of file dbus-sysdeps-unix.c.

References _dbus_warn(), NULL, and DBusPollFD::revents.

int _dbus_printf_string_upper_bound ( const char *  format,
va_list  args 
)

Measure the length of the given format string and arguments, not including the terminating nul.

Parameters:
format a printf-style format string
args arguments for the format string
Returns:
length of the given format string and args

Definition at line 2170 of file dbus-sysdeps-unix.c.

Referenced by _dbus_string_append_printf_valist().

int _dbus_read ( int  fd,
DBusString buffer,
int  count 
)

Thin wrapper around the read() system call that appends the data it reads to the DBusString buffer.

It appends up to the given count, and returns the same value and same errno as read(). The only exception is that _dbus_read() handles EINTR for you. _dbus_read() can return ENOMEM, even though regular UNIX read doesn't.

Parameters:
fd the file descriptor to read from
buffer the buffer to append data to
count the amount of data to read
Returns:
the number of bytes read or -1

Definition at line 93 of file dbus-sysdeps-unix.c.

References _dbus_assert, _dbus_string_get_data_len(), _dbus_string_lengthen(), _dbus_string_set_length(), and _dbus_verbose_bytes_of_string().

Referenced by _dbus_file_get_contents(), and _dbus_generate_random_bytes().

dbus_bool_t _dbus_read_credentials_unix_socket ( int  client_fd,
DBusCredentials credentials,
DBusError error 
)

Reads a single byte which must be nul (an error occurs otherwise), and reads unix credentials if available.

Fills in pid/uid/gid with -1 if no credentials are available. Return value indicates whether a byte was read, not whether we got valid credentials. On some systems, such as Linux, reading/writing the byte isn't actually required, but we do it anyway just to avoid multiple codepaths.

Fails if no byte is available, so you must select() first.

The point of the byte is that on some systems we have to use sendmsg()/recvmsg() to transmit credentials.

Parameters:
client_fd the client file descriptor
credentials struct to fill with credentials of client
error location to store error code
Returns:
TRUE on success

Definition at line 800 of file dbus-sysdeps-unix.c.

References _dbus_assert, _dbus_credentials_clear(), _dbus_error_from_errno(), _dbus_strerror(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, DBusCredentials::gid, NULL, DBusCredentials::pid, TRUE, and DBusCredentials::uid.

dbus_bool_t _dbus_send_credentials_unix_socket ( int  server_fd,
DBusError error 
)

Sends a single nul byte with our UNIX credentials as ancillary data.

Returns TRUE if the data was successfully written. On systems that don't support sending credentials, just writes a byte, doesn't send any credentials. On some systems, such as Linux, reading/writing the byte isn't actually required, but we do it anyway just to avoid multiple codepaths.

Fails if no byte can be written, so you must select() first.

The point of the byte is that on some systems we have to use sendmsg()/recvmsg() to transmit credentials.

Parameters:
server_fd file descriptor for connection to server
error return location for error code
Returns:
TRUE if the byte was sent

Definition at line 970 of file dbus-sysdeps-unix.c.

References FALSE, and TRUE.

dbus_bool_t _dbus_set_fd_nonblocking ( int  fd,
DBusError error 
)

Sets a file descriptor to be nonblocking.

Parameters:
fd the file descriptor.
error address of error location.
Returns:
TRUE on success.

Definition at line 2034 of file dbus-sysdeps-unix.c.

References _dbus_error_from_errno(), _dbus_strerror(), dbus_set_error(), FALSE, and TRUE.

Referenced by _dbus_connect_tcp_socket(), _dbus_connect_unix_socket(), _dbus_full_duplex_pipe(), _dbus_listen_tcp_socket(), and _dbus_listen_unix_socket().

void _dbus_set_signal_handler ( int  sig,
DBusSignalHandler  handler 
)

Installs a UNIX signal handler.

Parameters:
sig the signal to handle
handler the handler

Definition at line 292 of file dbus-sysdeps-util-unix.c.

References NULL.

dbus_bool_t _dbus_setenv ( const char *  varname,
const char *  value 
)

Wrapper for setenv().

If the value is NULL, unsets the environment variable.

There is an unfixable memleak in that it is unsafe to free memory malloced for use with setenv. This is because we can not rely on internal implementation details of the underlying libc library.

Parameters:
varname name of environment variable
value value of environment variable
Returns:
TRUE on success.

Definition at line 88 of file dbus-sysdeps.c.

References _dbus_assert, FALSE, NULL, and TRUE.

void _dbus_sleep_milliseconds ( int  milliseconds  ) 

Sleeps the given number of milliseconds.

Parameters:
milliseconds number of milliseconds

Definition at line 1855 of file dbus-sysdeps-unix.c.

References MICROSECONDS_PER_MILLISECOND, MILLISECONDS_PER_SECOND, and NANOSECONDS_PER_MILLISECOND.

dbus_bool_t _dbus_spawn_async_with_babysitter ( DBusBabysitter **  sitter_p,
char **  argv,
DBusSpawnChildSetupFunc  child_setup,
void *  user_data,
DBusError error 
)

Spawns a new process.

The executable name and argv[0] are the same, both are provided in argv[0]. The child_setup function is passed the given user_data and is run in the child just before calling exec().

Also creates a "babysitter" which tracks the status of the child process, advising the parent if the child exits. If the spawn fails, no babysitter is created. If sitter_p is NULL, no babysitter is kept.

Parameters:
sitter_p return location for babysitter or NULL
argv the executable and arguments
child_setup function to call in child pre-exec()
user_data user data for setup function
error error object to be filled in if function fails
Returns:
TRUE on success, FALSE if error is filled in

Definition at line 1030 of file dbus-spawn.c.

References _dbus_assert_not_reached, _dbus_babysitter_unref(), _dbus_fd_set_close_on_exec(), _dbus_full_duplex_pipe(), _dbus_strdup(), _dbus_strerror(), _dbus_watch_list_add_watch(), _dbus_watch_new(), DBUS_ERROR_NO_MEMORY, DBUS_ERROR_SPAWN_FORK_FAILED, dbus_set_error(), DBusBabysitter::error_pipe_from_child, DBusBabysitter::error_watch, DBusBabysitter::executable, FALSE, NULL, READ_END, DBusBabysitter::sitter_pid, DBusBabysitter::sitter_watch, DBusBabysitter::socket_to_babysitter, TRUE, DBusBabysitter::watches, and WRITE_END.

dbus_bool_t _dbus_stat ( const DBusString filename,
DBusStat statbuf,
DBusError error 
)

stat() wrapper.

Parameters:
filename the filename to stat
statbuf the stat info to fill in
error return location for error
Returns:
FALSE if error was set

Definition at line 457 of file dbus-sysdeps-util-unix.c.

References _dbus_error_from_errno(), _dbus_strerror(), DBusStat::atime, DBusStat::ctime, dbus_set_error(), FALSE, DBusStat::gid, DBusStat::mode, DBusStat::mtime, DBusStat::nlink, DBusStat::size, TRUE, and DBusStat::uid.

Referenced by _dbus_is_console_user().

char* _dbus_strdup ( const char *  str  ) 

Duplicates a string.

Result must be freed with dbus_free(). Returns NULL if memory allocation fails. If the string to be duplicated is NULL, returns NULL.

Parameters:
str string to duplicate.
Returns:
newly-allocated copy.

Definition at line 312 of file dbus-internals.c.

References dbus_malloc(), and NULL.

Referenced by _dbus_dup_string_array(), _dbus_message_iter_get_args_valist(), _dbus_server_new_for_domain_socket(), _dbus_spawn_async_with_babysitter(), _dbus_transport_get_is_authenticated(), _dbus_transport_open(), dbus_bus_register(), dbus_bus_set_unique_name(), dbus_server_get_address(), and dbus_set_error().

const char* _dbus_strerror ( int  error_number  ) 

A wrapper around strerror() because some platforms may be lame and not have strerror().

Parameters:
error_number errno.
Returns:
error description.

Definition at line 1957 of file dbus-sysdeps-unix.c.

References NULL.

Referenced by _dbus_babysitter_set_child_exit_error(), _dbus_babysitter_unref(), _dbus_become_daemon(), _dbus_change_identity(), _dbus_check_dir_is_private_to_user(), _dbus_connect_tcp_socket(), _dbus_connect_unix_socket(), _dbus_create_directory(), _dbus_create_file_exclusively(), _dbus_delete_directory(), _dbus_delete_file(), _dbus_directory_get_next_file(), _dbus_directory_open(), _dbus_file_get_contents(), _dbus_listen_tcp_socket(), _dbus_listen_unix_socket(), _dbus_read_credentials_unix_socket(), _dbus_set_fd_nonblocking(), _dbus_spawn_async_with_babysitter(), _dbus_stat(), _dbus_string_save_to_file(), _dbus_user_at_console(), and _dbus_write_pid_file().

dbus_bool_t _dbus_string_array_contains ( const char **  array,
const char *  str 
)

Checks whether a string array contains the given string.

Parameters:
array array to search.
str string to look for
Returns:
TRUE if array contains string

Definition at line 403 of file dbus-internals.c.

References FALSE, NULL, and TRUE.

dbus_bool_t _dbus_string_save_to_file ( const DBusString str,
const DBusString filename,
DBusError error 
)

Writes a string out to a file.

If the file exists, it will be atomically overwritten by the new data.

Parameters:
str the string to write out
filename the file to save string to
error error to be filled in on failure
Returns:
FALSE on failure

Definition at line 1567 of file dbus-sysdeps-unix.c.

References _dbus_close(), _dbus_error_from_errno(), _dbus_generate_random_ascii(), _dbus_strerror(), _dbus_string_append(), _dbus_string_copy(), _dbus_string_free(), _dbus_string_init(), _dbus_write(), DBUS_ERROR_NO_MEMORY, dbus_set_error(), FALSE, NULL, and TRUE.

dbus_bool_t _dbus_user_at_console ( const char *  username,
DBusError error 
)

Checks if user is at the console.

Parameters:
username user to check
error return location for errors
Returns:
TRUE is the user is at the consolei and there are no errors

Definition at line 352 of file dbus-sysdeps-util-unix.c.

References _dbus_file_exists(), _dbus_strerror(), _dbus_string_append(), _dbus_string_append_int(), _dbus_string_free(), _dbus_string_init(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, and NULL.

Referenced by _dbus_is_console_user().

dbus_bool_t _dbus_user_database_get_gid ( DBusUserDatabase *  db,
dbus_gid_t  gid,
const DBusGroupInfo **  info,
DBusError error 
)

Gets the user information for the given GID, returned group info should not be freed.

Parameters:
db user database
gid the group ID
info return location for const ref to group info
error error location
Returns:
FALSE if error is set

Definition at line 339 of file dbus-userdb-util.c.

References _dbus_user_database_lookup_group(), and NULL.

dbus_bool_t _dbus_user_database_get_groupname ( DBusUserDatabase *  db,
const DBusString groupname,
const DBusGroupInfo **  info,
DBusError error 
)

Gets the user information for the given group name, returned group info should not be freed.

Parameters:
db user database
groupname the group name
info return location for const ref to group info
error error location
Returns:
FALSE if error is set

Definition at line 319 of file dbus-userdb-util.c.

References _dbus_user_database_lookup_group(), and NULL.

Referenced by _dbus_get_group_id().

dbus_bool_t _dbus_user_database_get_groups ( DBusUserDatabase *  db,
dbus_uid_t  uid,
dbus_gid_t **  group_ids,
int *  n_group_ids,
DBusError error 
)

Gets all groups for a particular user.

Returns FALSE if no memory, or user isn't known, but always initializes group_ids to a NULL array. Sets error to the reason for returning FALSE.

Parameters:
db the user database object
uid the user ID
group_ids return location for array of group IDs
n_group_ids return location for length of returned array
error return location for error
Returns:
TRUE on success

Definition at line 363 of file dbus-userdb-util.c.

References _dbus_user_database_lookup(), DBUS_ERROR_NO_MEMORY, dbus_new, dbus_set_error(), FALSE, DBusUserInfo::group_ids, DBusUserInfo::n_group_ids, NULL, and TRUE.

DBusUserDatabase* _dbus_user_database_get_system ( void   ) 

Gets the system global user database; must be called with lock held (_dbus_user_database_lock_system()).

Returns:
the database or NULL if no memory

Definition at line 305 of file dbus-userdb.c.

References _dbus_assert.

Referenced by _dbus_credentials_from_uid(), _dbus_credentials_from_username(), _dbus_get_group_id(), _dbus_homedir_from_username(), and _dbus_is_console_user().

dbus_bool_t _dbus_user_database_get_uid ( DBusUserDatabase *  db,
dbus_uid_t  uid,
const DBusUserInfo **  info,
DBusError error 
)

Gets the user information for the given UID, returned user info should not be freed.

Parameters:
db user database
uid the user ID
info return location for const ref to user info
error error location
Returns:
FALSE if error is set

Definition at line 547 of file dbus-userdb.c.

References _dbus_user_database_lookup(), and NULL.

Referenced by _dbus_credentials_from_uid().

dbus_bool_t _dbus_user_database_get_username ( DBusUserDatabase *  db,
const DBusString username,
const DBusUserInfo **  info,
DBusError error 
)

Gets the user information for the given username.

Parameters:
db user database
username the user name
info return location for const ref to user info
error error location
Returns:
FALSE if error is set

Definition at line 566 of file dbus-userdb.c.

References _dbus_user_database_lookup(), and NULL.

Referenced by _dbus_credentials_from_username(), and _dbus_homedir_from_username().

DBusUserInfo* _dbus_user_database_lookup ( DBusUserDatabase *  db,
dbus_uid_t  uid,
const DBusString username,
DBusError error 
)

Looks up a uid or username in the user database.

Only one of name or UID can be provided. There are wrapper functions for this that are better to use, this one does no locking or anything on the database and otherwise sort of sucks.

Parameters:
db the database
uid the user ID or DBUS_UID_UNSET
username username or NULL
error error to fill in
Returns:
the entry in the database

Definition at line 102 of file dbus-userdb.c.

References _dbus_assert, _dbus_hash_table_insert_string(), _dbus_hash_table_insert_ulong(), _dbus_hash_table_lookup_string(), _dbus_hash_table_lookup_ulong(), _dbus_hash_table_remove_ulong(), _dbus_is_a_number(), _dbus_user_info_fill(), _dbus_user_info_fill_uid(), _dbus_user_info_free_allocated(), DBUS_ERROR_NO_MEMORY, dbus_new0, dbus_set_error(), NULL, DBusUserInfo::uid, and DBusUserInfo::username.

Referenced by _dbus_is_console_user(), _dbus_user_database_get_groups(), _dbus_user_database_get_uid(), and _dbus_user_database_get_username().

DBusGroupInfo* _dbus_user_database_lookup_group ( DBusUserDatabase *  db,
dbus_gid_t  gid,
const DBusString groupname,
DBusError error 
)

Looks up a gid or group name in the user database.

Only one of name or GID can be provided. There are wrapper functions for this that are better to use, this one does no locking or anything on the database and otherwise sort of sucks.

Parameters:
db the database
gid the group ID or DBUS_GID_UNSET
groupname group name or NULL
error error to fill in
Returns:
the entry in the database

Definition at line 217 of file dbus-userdb-util.c.

References _dbus_group_info_fill(), _dbus_group_info_fill_gid(), _dbus_group_info_free_allocated(), _dbus_hash_table_insert_string(), _dbus_hash_table_insert_ulong(), _dbus_hash_table_lookup_string(), _dbus_hash_table_lookup_ulong(), _dbus_hash_table_remove_ulong(), _dbus_is_a_number(), DBUS_ERROR_NO_MEMORY, dbus_new0, dbus_set_error(), DBusGroupInfo::gid, DBusGroupInfo::groupname, and NULL.

Referenced by _dbus_user_database_get_gid(), and _dbus_user_database_get_groupname().

DBusUserDatabase* _dbus_user_database_new ( void   ) 

Creates a new user database object used to look up and cache user information.

Returns:
new database, or NULL on out of memory

Definition at line 440 of file dbus-userdb.c.

References _dbus_group_info_free_allocated(), _dbus_hash_table_new(), _dbus_user_database_unref(), _dbus_user_info_free_allocated(), dbus_new0, and NULL.

void _dbus_user_database_unref ( DBusUserDatabase *  db  ) 

Decrements refcount of user database.

Parameters:
db the database

Definition at line 513 of file dbus-userdb.c.

References _dbus_assert, _dbus_hash_table_unref(), and dbus_free().

Referenced by _dbus_user_database_new().

dbus_bool_t _dbus_user_info_fill ( DBusUserInfo info,
const DBusString username,
DBusError error 
)

Gets user info for the given username.

Parameters:
info user info object to initialize
username the username
error error return
Returns:
TRUE on success

Definition at line 1254 of file dbus-sysdeps-unix.c.

Referenced by _dbus_user_database_lookup().

dbus_bool_t _dbus_user_info_fill_uid ( DBusUserInfo info,
dbus_uid_t  uid,
DBusError error 
)

Gets user info for the given user ID.

Parameters:
info user info object to initialize
uid the user ID
error error return
Returns:
TRUE on success

Definition at line 1271 of file dbus-sysdeps-unix.c.

References NULL.

Referenced by _dbus_user_database_lookup().

void _dbus_user_info_free ( DBusUserInfo info  ) 

Frees the members of info (but not info itself).

Parameters:
info the user info struct

Definition at line 577 of file dbus-sysdeps.c.

References dbus_free(), DBusUserInfo::group_ids, DBusUserInfo::homedir, and DBusUserInfo::username.

Referenced by _dbus_user_info_free_allocated().

void _dbus_user_info_free_allocated ( DBusUserInfo info  ) 

Frees the given DBusUserInfo's members with _dbus_user_info_free() and also calls dbus_free() on the block itself.

Parameters:
info the info

Definition at line 43 of file dbus-userdb.c.

References _dbus_user_info_free(), dbus_free(), and NULL.

Referenced by _dbus_user_database_lookup(), and _dbus_user_database_new().

dbus_bool_t _dbus_username_from_current_process ( const DBusString **  username  ) 

Gets username of user owning current process.

The returned string is valid until dbus_shutdown() is called.

Parameters:
username place to store pointer to username
Returns:
FALSE if no memory

Definition at line 322 of file dbus-userdb.c.

References _dbus_user_database_lock_system(), _dbus_user_database_unlock_system(), FALSE, and TRUE.

Referenced by _dbus_keyring_new_homedir().

void _dbus_warn ( const char *  format,
  ... 
)

Prints a warning message to stderr.

Parameters:
format printf-style format string.

Definition at line 202 of file dbus-internals.c.

Referenced by _dbus_babysitter_unref(), _dbus_change_identity(), _dbus_data_slot_allocator_alloc(), _dbus_full_duplex_pipe(), _dbus_keyring_new_homedir(), _dbus_listen_unix_socket(), _dbus_marshal_read_basic(), _dbus_marshal_skip_basic(), _dbus_message_iter_get_args_valist(), _dbus_object_tree_register(), _dbus_object_tree_unregister_and_unlock(), _dbus_poll(), _dbus_transport_handle_watch(), _dbus_type_reader_recurse(), dbus_bus_register(), dbus_connection_close(), dbus_connection_remove_filter(), dbus_connection_set_timeout_functions(), dbus_connection_set_watch_functions(), dbus_message_append_args_valist(), dbus_server_set_timeout_functions(), dbus_server_set_watch_functions(), and dbus_watch_handle().

int _dbus_write ( int  fd,
const DBusString buffer,
int  start,
int  len 
)

Thin wrapper around the write() system call that writes a part of a DBusString and handles EINTR for you.

Parameters:
fd the file descriptor to write
buffer the buffer to write data from
start the first byte in the buffer to write
len the number of bytes to try to write
Returns:
the number of bytes written or -1 on error

Definition at line 153 of file dbus-sysdeps-unix.c.

References _dbus_verbose_bytes_of_string().

Referenced by _dbus_become_daemon(), _dbus_string_save_to_file(), and _dbus_write_two().

dbus_bool_t _dbus_write_pid_file ( const DBusString filename,
unsigned long  pid,
DBusError error 
)

Creates a file containing the process ID.

Parameters:
filename the filename to write to
pid our process ID
error return location for errors
Returns:
FALSE on failure

Definition at line 190 of file dbus-sysdeps-util-unix.c.

References _dbus_close(), _dbus_error_from_errno(), _dbus_strerror(), dbus_set_error(), FALSE, NULL, and TRUE.

Referenced by _dbus_become_daemon().

int _dbus_write_two ( int  fd,
const DBusString buffer1,
int  start1,
int  len1,
const DBusString buffer2,
int  start2,
int  len2 
)

Like _dbus_write() but will use writev() if possible to write both buffers in sequence.

The return value is the number of bytes written in the first buffer, plus the number written in the second. If the first buffer is written successfully and an error occurs writing the second, the number of bytes in the first is returned (i.e. the error is ignored), on systems that don't have writev. Handles EINTR for you. The second buffer may be NULL.

Parameters:
fd the file descriptor
buffer1 first buffer
start1 first byte to write in first buffer
len1 number of bytes to write from first buffer
buffer2 second buffer, or NULL
start2 first byte to write in second buffer
len2 number of bytes to write in second buffer
Returns:
total bytes written from both buffers, or -1 on error

Definition at line 199 of file dbus-sysdeps-unix.c.

References _dbus_assert, _dbus_write(), and NULL.


Variable Documentation

const char _dbus_return_if_fail_warning_format[]

Initial value:

"%lu: arguments to %s() were incorrect, assertion \"%s\" failed in file %s line %d.\n"
"This is normally a bug in some application using the D-Bus library.\n"
String used in _dbus_return_if_fail macro.

Definition at line 457 of file dbus-internals.c.


Generated on Wed Jan 3 04:58:29 2007 for D-Bus by  doxygen 1.4.7