Internal system-dependent API
D-Bus secret internal implementation details

Internal system-dependent API available on UNIX and Windows. More...

## Data Structures

struct | DBusSocket
| Socket interface. More...
struct | DBusAtomic
| An atomic integer safe to increment or decrement from multiple threads. More...
struct | DBusPollFD
struct | DBusStat
| Portable struct with stat() results. More...

## Macros

#define | DBUS_PID_UNSET ((dbus_pid_t) -1)
| an invalid PID used to represent an uninitialized dbus_pid_t field
#define | DBUS_UID_UNSET ((dbus_uid_t) -1)
| an invalid UID used to represent an uninitialized dbus_uid_t field
#define | DBUS_GID_UNSET ((dbus_gid_t) -1)
| an invalid GID used to represent an uninitialized dbus_gid_t field
#define | DBUS_PID_FORMAT "%lu"
| an appropriate printf format for dbus_pid_t
#define | DBUS_UID_FORMAT "%lu"
| an appropriate printf format for dbus_uid_t
#define | DBUS_GID_FORMAT "%lu"
| an appropriate printf format for dbus_gid_t
#define | DBUS_SOCKET_FORMAT "d"
#define | DBUS_SOCKET_INIT { -1 }
#define | DBUS_POLLABLE_FORMAT "d"
#define | _DBUS_POLLIN 0x0001
| There is data to read.
#define | _DBUS_POLLPRI 0x0002
| There is urgent data to read.
#define | _DBUS_POLLOUT 0x0004
| Writing now will not block.
#define | _DBUS_POLLERR 0x0008
| Error condition.
#define | _DBUS_POLLHUP 0x0010
| Hung up.
#define | _DBUS_POLLNVAL 0x0020
| Invalid request: fd not open.
#define | _DBUS_DOUBLES_BITWISE_EQUAL(a, b)
| On x86 there is an 80-bit FPU, and if you do "a == b" it may have a or b in an 80-bit register, thus failing to compare the two 64-bit doubles for bitwise equality.
#define | DBUS_DEFAULT_MESSAGE_UNIX_FDS 16
#define | _DBUS_MAX_SUN_PATH_LENGTH 99
| Maximum length of the path to a UNIX domain socket, sockaddr_un::sun_path member.

## Typedefs

typedef unsigned long | dbus_pid_t
| A process ID.
typedef unsigned long | dbus_uid_t
| A user ID.
typedef unsigned long | dbus_gid_t
| A group ID.
typedef struct DBusAtomic | DBusAtomic
| Opaque type representing an atomically-modifiable integer that can be used from multiple threads.
typedef int | DBusPollable
typedef struct DBusDirIter | DBusDirIter
| Opaque type for reading a directory listing.
typedef union DBusGUID | DBusGUID
| Type representing a universally unique ID.
typedef struct DBusRLimit | DBusRLimit

## Enumerations

enum | DBusCredentialsAddFlags { DBUS_CREDENTIALS_ADD_FLAGS_USER_DATABASE = (1 << 0) , DBUS_CREDENTIALS_ADD_FLAGS_NONE = 0 }
enum | DBusLogFlags { DBUS_LOG_FLAGS_STDERR = (1 << 0) , DBUS_LOG_FLAGS_SYSTEM_LOG = (1 << 1) }
enum | DBusSystemLogSeverity { DBUS_SYSTEM_LOG_INFO , DBUS_SYSTEM_LOG_WARNING , DBUS_SYSTEM_LOG_SECURITY , DBUS_SYSTEM_LOG_ERROR }

## Functions

void | _dbus_abort (void)
| Aborts the program with SIGABRT (dumping core).
const char * | _dbus_getenv (const char *varname)
| Wrapper for getenv().
dbus_bool_t | _dbus_clearenv (void)
| Wrapper for clearenv().
dbus_bool_t | _dbus_split_paths_and_append (DBusString *dirs, const char *suffix, DBusList **dir_list)
| Split paths into a list of char strings.
dbus_bool_t | _dbus_check_setuid (void)
| NOTE: If you modify this function, please also consider making the corresponding change in GLib.
char ** | _dbus_get_environment (void)
| Gets a NULL-terminated list of key=value pairs from the environment.
dbus_bool_t | _dbus_set_socket_nonblocking (DBusSocket fd, DBusError *error)
| Sets a file descriptor to be nonblocking.
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_close_socket (DBusSocket *fd, DBusError *error)
| Closes a socket and invalidates it.
DBUS_PRIVATE_EXPORT int | _dbus_read_socket (DBusSocket fd, DBusString *buffer, int count)
| Like _dbus_read(), but only works on sockets so is available on Windows.
DBUS_PRIVATE_EXPORT int | _dbus_write_socket (DBusSocket fd, const DBusString *buffer, int start, int len)
| Like _dbus_write(), but only supports sockets and is thus available on Windows.
int | _dbus_write_socket_two (DBusSocket fd, const DBusString *buffer1, int start1, int len1, const DBusString *buffer2, int start2, int len2)
| Like _dbus_write_two() but only works on sockets and is thus available on Windows.
int | _dbus_read_socket_with_unix_fds (DBusSocket fd, DBusString *buffer, int count, int *fds, unsigned int *n_fds)
| Like _dbus_read_socket() but also tries to read unix fds from the socket.
DBUS_PRIVATE_EXPORT int | _dbus_write_socket_with_unix_fds (DBusSocket fd, const DBusString *buffer, int start, int len, const int *fds, int n_fds)
int | _dbus_write_socket_with_unix_fds_two (DBusSocket fd, const DBusString *buffer1, int start1, int len1, const DBusString *buffer2, int start2, int len2, const int *fds, int n_fds)
DBusSocket | _dbus_connect_tcp_socket (const char *host, const char *port, const char *family, DBusError *error)
| Creates a socket and connects to a socket at the given host and port.
DBusSocket | _dbus_connect_tcp_socket_with_nonce (const char *host, const char *port, const char *family, const char *noncefile, DBusError *error)
int | _dbus_listen_tcp_socket (const char *host, const char *port, const char *family, DBusString *retport, const char **retfamily, DBusSocket **fds_p, DBusError *error)
| Creates a socket and binds it to the given path, then listens on the socket.
DBusSocket | _dbus_accept (DBusSocket listen_fd)
| Accepts a connection on a listening socket.
dbus_bool_t | _dbus_read_credentials_socket (DBusSocket 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_socket (DBusSocket server_fd, DBusError *error)
| Sends a single nul byte with our UNIX credentials as ancillary data.
dbus_bool_t | _dbus_credentials_add_from_user (DBusCredentials *credentials, const DBusString *username, DBusCredentialsAddFlags flags, DBusError *error)
| Adds the credentials corresponding to the given username.
dbus_bool_t | _dbus_credentials_add_from_current_process (DBusCredentials *credentials)
| Adds the most important credentials of the current process (the uid and pid) to the passed-in credentials object.
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_append_user_from_current_process (DBusString *str)
| Append to the string the identity we would like to have when we authenticate, on UNIX this is the current process UID and on Windows something else, probably a Windows SID string.
dbus_bool_t | _dbus_parse_unix_user_from_config (const DBusString *username, dbus_uid_t *uid_p)
| Parse a UNIX user from the bus config file.
dbus_bool_t | _dbus_parse_unix_group_from_config (const DBusString *groupname, dbus_gid_t *gid_p)
| Parse a UNIX group from the bus config file.
dbus_bool_t | _dbus_unix_groups_from_uid (dbus_uid_t uid, dbus_gid_t **group_ids, int *n_group_ids, DBusError *error)
| Gets all groups corresponding to the given UNIX user ID.
dbus_bool_t | _dbus_unix_user_is_at_console (dbus_uid_t uid, DBusError *error)
| Checks to see if the UNIX user ID is at the console.
dbus_bool_t | _dbus_unix_user_is_process_owner (dbus_uid_t uid)
| Checks to see if the UNIX user ID matches the UID of the process.
dbus_bool_t | _dbus_windows_user_is_process_owner (const char *windows_sid)
| Checks to see if the Windows user SID matches the owner of the process.
dbus_bool_t | _dbus_append_keyring_directory_for_credentials (DBusString *directory, DBusCredentials *credentials)
| Appends the directory in which a keyring for the given credentials should be stored.
dbus_bool_t | _dbus_daemon_unpublish_session_bus_address (void)
| Clear the platform-specific centralized location where the session bus address is published.
dbus_bool_t | _dbus_socket_can_pass_unix_fd (DBusSocket fd)
| Checks whether file descriptors may be passed via the socket.
DBUS_PRIVATE_EXPORT dbus_pid_t | _dbus_resolve_pid_fd (int pid_fd)
| Resolve the PID from the PID FD, if any.
DBUS_PRIVATE_EXPORT dbus_int32_t | _dbus_atomic_inc (DBusAtomic *atomic)
| Atomically increments an integer.
DBUS_PRIVATE_EXPORT dbus_int32_t | _dbus_atomic_dec (DBusAtomic *atomic)
| Atomically decrement an integer.
DBUS_PRIVATE_EXPORT dbus_int32_t | _dbus_atomic_get (DBusAtomic *atomic)
| Atomically get the value of an integer.
DBUS_PRIVATE_EXPORT void | _dbus_atomic_set_zero (DBusAtomic *atomic)
| Atomically set the value of an integer to 0.
DBUS_PRIVATE_EXPORT void | _dbus_atomic_set_nonzero (DBusAtomic *atomic)
| Atomically set the value of an integer to something nonzero.
DBUS_PRIVATE_EXPORT int | _dbus_poll (DBusPollFD *fds, int n_fds, int timeout_milliseconds)
| Wrapper for poll().
DBUS_PRIVATE_EXPORT void | _dbus_sleep_milliseconds (int milliseconds)
| Sleeps the given number of milliseconds.
DBUS_PRIVATE_EXPORT void | _dbus_get_monotonic_time (dbus_int64_t *tv_sec, long *tv_usec)
| Get current time, as in gettimeofday().
DBUS_PRIVATE_EXPORT void | _dbus_get_real_time (dbus_int64_t *tv_sec, long *tv_usec)
| Get current time, as in gettimeofday().
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_create_directory (const DBusString *filename, DBusError *error)
| directory interface
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_ensure_directory (const DBusString *filename, DBusError *error)
| Creates a directory; succeeds if the directory is created or already existed.
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_delete_directory (const DBusString *filename, DBusError *error)
| Removes a directory; Directory must be empty.
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_concat_dir_and_file (DBusString *dir, const DBusString *next_component)
| Appends the given filename to the given directory.
dbus_bool_t | _dbus_string_get_dirname (const DBusString *filename, DBusString *dirname)
| Get the directory name from a complete filename.
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_path_is_absolute (const DBusString *filename)
| Checks whether the filename is an absolute path.
dbus_bool_t | _dbus_get_standard_session_servicedirs (DBusList **dirs)
| Returns the standard directories for a session bus to look for service activation files.
dbus_bool_t | _dbus_get_standard_system_servicedirs (DBusList **dirs)
| Returns the standard directories for a system bus to look for service activation files.
dbus_bool_t | _dbus_get_local_system_servicedirs (DBusList **dirs)
| Returns the local admin directories for a system bus to look for service activation files.
dbus_bool_t | _dbus_set_up_transient_session_servicedirs (DBusList **dirs, DBusError *error)
| Returns the standard directories for a session bus to look for transient service activation files.
dbus_bool_t | _dbus_get_system_config_file (DBusString *str)
| Get the absolute path of the system.conf file (there is no system bus on Windows so this can just return FALSE and print a warning or something).
dbus_bool_t | _dbus_get_session_config_file (DBusString *str)
| Get the absolute path of the session.conf file.
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_check_dir_is_private_to_user (DBusString *dir, DBusError *error)
| Checks to make sure the given directory is private to the user.
DBUS_PRIVATE_EXPORT const char * | _dbus_get_tmpdir (void)
| Gets the temporary files directory by inspecting the environment variables TMPDIR, TMP, and TEMP in that order.
_DBUS_WARN_UNUSED_RESULT dbus_bool_t | _dbus_generate_random_bytes_buffer (char *buffer, int n_bytes, DBusError *error)
| Random numbers.
dbus_bool_t | _dbus_generate_random_bytes (DBusString *str, int n_bytes, DBusError *error)
| Generates the given number of securely random bytes, using the best mechanism we can come up with.
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_generate_random_ascii (DBusString *str, int n_bytes, DBusError *error)
| Generates the given number of random bytes, where the bytes are chosen from the alphanumeric ASCII subset.
DBUS_PRIVATE_EXPORT const char * | _dbus_error_from_errno (int error_number)
| Converts a UNIX errno, or Windows errno or WinSock error value into a DBusError name.
DBUS_PRIVATE_EXPORT const char * | _dbus_error_from_system_errno (void)
| Converts the current system errno value into a DBusError name.
int | _dbus_get_low_level_socket_errno (void)
int | _dbus_save_socket_errno (void)
void | _dbus_restore_socket_errno (int saved_errno)
void | _dbus_set_errno_to_zero (void)
| Assign 0 to the global errno variable.
dbus_bool_t | _dbus_get_is_errno_eagain_or_ewouldblock (int e)
| See if errno is EAGAIN or EWOULDBLOCK (this has to be done differently for Winsock so is abstracted).
dbus_bool_t | _dbus_get_is_errno_enomem (int e)
| See if errno is ENOMEM.
dbus_bool_t | _dbus_get_is_errno_eintr (int e)
| See if errno is EINTR.
dbus_bool_t | _dbus_get_is_errno_epipe (int e)
| See if errno is EPIPE.
dbus_bool_t | _dbus_get_is_errno_etoomanyrefs (int e)
| See if errno is ETOOMANYREFS.
DBUS_PRIVATE_EXPORT const char * | _dbus_strerror_from_errno (void)
| Get error message from errno.
void | _dbus_disable_sigpipe (void)
| signal (SIGPIPE, SIG_IGN);
DBUS_PRIVATE_EXPORT void | _dbus_exit (int code) _DBUS_GNUC_NORETURN
| Exit the process, returning the given value.
DBUS_PRIVATE_EXPORT 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.
dbus_bool_t | _dbus_stat (const DBusString *filename, DBusStat *statbuf, DBusError *error)
| stat() wrapper.
DBusSocket | _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.
DBusSocket | _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.
DBusSocket | _dbus_connect_exec (const char *path, char *const argv[], DBusError *error)
| Creates a UNIX domain socket and connects it to the specified process to execute.
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_socketpair (DBusSocket *fd1, DBusSocket *fd2, dbus_bool_t blocking, DBusError *error)
| Creates pair of connect sockets (as in socketpair()).
DBUS_PRIVATE_EXPORT void | _dbus_print_backtrace (void)
| On GNU libc systems, print a crude backtrace to stderr.
dbus_bool_t | _dbus_become_daemon (const DBusString *pidfile, DBusPipe *print_pid_pipe, DBusError *error, dbus_bool_t keep_umask)
| Does the chdir, fork, setsid, etc.
dbus_bool_t | _dbus_verify_daemon_user (const char *user)
| Verify that after the fork we can successfully change to this user.
dbus_bool_t | _dbus_change_to_daemon_user (const char *user, DBusError *error)
| Changes the user and group the bus is running as.
dbus_bool_t | _dbus_write_pid_to_file_and_pipe (const DBusString *pidfile, DBusPipe *print_pid_pipe, dbus_pid_t pid_to_write, DBusError *error)
| Writes the given pid_to_write to a pidfile (if non-NULL) and/or to a pipe (if non-NULL).
dbus_bool_t | _dbus_command_for_pid (unsigned long pid, DBusString *str, int max_len, DBusError *error)
| Get a printable string describing the command used to execute the process with pid.
DBUS_PRIVATE_EXPORT void | _dbus_init_system_log (const char *tag, DBusLogFlags flags)
| Initialize the system log.
DBUS_PRIVATE_EXPORT void | _dbus_log (DBusSystemLogSeverity severity, const char *msg,...)
| Log a message to the system log file (e.g.
DBUS_PRIVATE_EXPORT void | _dbus_logv (DBusSystemLogSeverity severity, const char *msg, va_list args)
| Log a message to the system log file (e.g.
dbus_bool_t | _dbus_get_autolaunch_address (const char *scope, DBusString *address, DBusError *error)
| Returns the address of a new session bus.
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_lookup_session_address (dbus_bool_t *supported, DBusString *address, DBusError *error)
| Determines the address of the session bus by querying a platform-specific method.
DBUS_PRIVATE_EXPORT dbus_bool_t | _dbus_read_local_machine_uuid (DBusGUID *machine_id, dbus_bool_t create_if_not_found, DBusError *error)
| Reads the uuid of the machine we're running on from the dbus configuration.
dbus_bool_t | _dbus_threads_init_platform_specific (void)
| Initialize threads as in dbus_threads_init_default(), appropriately for the platform.
void | _dbus_threads_lock_platform_specific (void)
| Lock a static mutex used to protect _dbus_threads_init_platform_specific().
void | _dbus_threads_unlock_platform_specific (void)
| Undo _dbus_threads_lock_platform_specific().
unsigned long | _dbus_pid_for_log (void)
| The only reason this is separate from _dbus_getpid() is to allow it on Windows for logging but not for other purposes.
DBUS_PRIVATE_EXPORT dbus_pid_t | _dbus_getpid (void)
| Gets our process ID.
DBUS_PRIVATE_EXPORT dbus_uid_t | _dbus_getuid (void)
| Gets our UID.
DBUS_PRIVATE_EXPORT void | _dbus_flush_caches (void)
| Called when the bus daemon is signaled to reload its configuration; any caches should be nuked.
dbus_bool_t | _dbus_replace_install_prefix (DBusString *path)
| Replace the DBUS_PREFIX in the given path, in-place, by the current D-Bus installation directory.
DBusRLimit * | _dbus_rlimit_save_fd_limit (DBusError *error)
dbus_bool_t | _dbus_rlimit_raise_fd_limit (DBusError *error)
dbus_bool_t | _dbus_rlimit_restore_fd_limit (DBusRLimit *saved, DBusError *error)
void | _dbus_rlimit_free (DBusRLimit *lim)
void | _dbus_daemon_report_ready (void)
| Report to a service manager that the daemon calling this function is ready for use.
void | _dbus_daemon_report_reloading (void)
| Report to a service manager that the daemon calling this function is reloading configuration.
void | _dbus_daemon_report_reloaded (void)
| Report to a service manager that the daemon calling this function is reloading configuration.
void | _dbus_daemon_report_stopping (void)
| Report to a service manager that the daemon calling this function is shutting down.
dbus_bool_t | _dbus_inet_sockaddr_to_string (const void *sockaddr_pointer, size_t len, char *string, size_t string_len, const char **family_name, dbus_uint16_t *port, DBusError *error)
void | _dbus_set_error_with_inet_sockaddr (DBusError *error, const void *sockaddr_pointer, size_t len, const char *description, int saved_errno)
void | _dbus_combine_tcp_errors (DBusList **sources, const char *summary, const char *host, const char *port, DBusError *dest)

## Detailed Description

Internal system-dependent API available on UNIX and Windows.

The system-dependent API has a dual purpose. First, it encapsulates all usage of operating system APIs for ease of auditing and to avoid cluttering the rest of the code with bizarre OS quirks and headers. Second, it abstracts different operating system APIs for portability.

## Macro Definition Documentation

## _DBUS_DOUBLES_BITWISE_EQUAL

#define _DBUS_DOUBLES_BITWISE_EQUAL | ( |  | a,
|  |  | b )

Value:
(memcmp (&(a), &(b), sizeof (double)) == 0)

On x86 there is an 80-bit FPU, and if you do "a == b" it may have a or b in an 80-bit register, thus failing to compare the two 64-bit doubles for bitwise equality.

So this macro compares the two doubles bitwise.

Definition at line 654 of file dbus-sysdeps.h.

## _DBUS_MAX_SUN_PATH_LENGTH

#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.

Definition at line 765 of file dbus-sysdeps.h.

Referenced by _dbus_connect_unix_socket(), and _dbus_listen_unix_socket().

## _DBUS_POLLERR

#define _DBUS_POLLERR 0x0008

Error condition.

Definition at line 450 of file dbus-sysdeps.h.

Referenced by _dbus_poll().

## _DBUS_POLLHUP

#define _DBUS_POLLHUP 0x0010

Hung up.

Definition at line 452 of file dbus-sysdeps.h.

## _DBUS_POLLIN

#define _DBUS_POLLIN 0x0001

There is data to read.

Definition at line 444 of file dbus-sysdeps.h.

Referenced by _dbus_poll().

## _DBUS_POLLNVAL

#define _DBUS_POLLNVAL 0x0020

Invalid request: fd not open.

Definition at line 454 of file dbus-sysdeps.h.

## _DBUS_POLLOUT

#define _DBUS_POLLOUT 0x0004

Writing now will not block.

Definition at line 448 of file dbus-sysdeps.h.

Referenced by _dbus_poll().

## _DBUS_POLLPRI

#define _DBUS_POLLPRI 0x0002

There is urgent data to read.

Definition at line 446 of file dbus-sysdeps.h.

## DBUS_DEFAULT_MESSAGE_UNIX_FDS

#define DBUS_DEFAULT_MESSAGE_UNIX_FDS 16

Definition at line 720 of file dbus-sysdeps.h.

## DBUS_GID_FORMAT

#define DBUS_GID_FORMAT "%lu"

an appropriate printf format for dbus_gid_t

Definition at line 157 of file dbus-sysdeps.h.

Referenced by _dbus_credentials_to_string_append(), and _dbus_user_database_lookup_group().

## DBUS_GID_UNSET

#define DBUS_GID_UNSET ((dbus_gid_t) -1)

an invalid GID used to represent an uninitialized dbus_gid_t field

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

Referenced by _dbus_get_group_id(), _dbus_group_info_fill(), _dbus_read_credentials_socket(), _dbus_stat(), and _dbus_user_database_lookup_group().

## DBUS_PID_FORMAT

#define DBUS_PID_FORMAT "%lu"

an appropriate printf format for dbus_pid_t

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

Referenced by _dbus_credentials_to_string_append(), _dbus_logv(), _dbus_read_credentials_socket(), and _dbus_write_pid_to_file_and_pipe().

## DBUS_PID_UNSET

#define DBUS_PID_UNSET ((dbus_pid_t) -1)

an invalid PID used to represent an uninitialized dbus_pid_t field

Definition at line 146 of file dbus-sysdeps.h.

Referenced by _dbus_credentials_add_credential(), _dbus_credentials_are_empty(), _dbus_credentials_are_superset(), _dbus_credentials_clear(), _dbus_credentials_include(), _dbus_credentials_new(), _dbus_credentials_to_string_append(), _dbus_read_credentials_socket(), _dbus_resolve_pid_fd(), and _dbus_transport_get_unix_process_id().

## DBUS_POLLABLE_FORMAT

#define DBUS_POLLABLE_FORMAT "d"

Definition at line 393 of file dbus-sysdeps.h.

## DBUS_SOCKET_FORMAT

#define DBUS_SOCKET_FORMAT "d"

Definition at line 186 of file dbus-sysdeps.h.

## DBUS_SOCKET_INIT

#define DBUS_SOCKET_INIT { -1 }

Definition at line 187 of file dbus-sysdeps.h.

## DBUS_UID_FORMAT

#define DBUS_UID_FORMAT "%lu"

an appropriate printf format for dbus_uid_t

Definition at line 155 of file dbus-sysdeps.h.

Referenced by _dbus_append_user_from_current_process(), _dbus_credentials_to_string_append(), _dbus_is_console_user(), _dbus_read_credentials_socket(), and _dbus_user_database_lookup().

## DBUS_UID_UNSET

#define DBUS_UID_UNSET ((dbus_uid_t) -1)

an invalid UID used to represent an uninitialized dbus_uid_t field

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

Referenced by _dbus_append_keyring_directory_for_credentials(), _dbus_credentials_add_credential(), _dbus_credentials_add_from_user(), _dbus_credentials_are_anonymous(), _dbus_credentials_are_empty(), _dbus_credentials_are_superset(), _dbus_credentials_clear(), _dbus_credentials_include(), _dbus_credentials_new(), _dbus_credentials_to_string_append(), _dbus_getuid(), _dbus_read_credentials_socket(), _dbus_stat(), _dbus_user_database_get_username(), _dbus_user_database_lookup(), _dbus_user_database_lookup_group(), _dbus_user_info_fill(), and dbus_bus_get_unix_user().

## Typedef Documentation

## dbus_gid_t

typedef unsigned long dbus_gid_t

A group ID.

Definition at line 143 of file dbus-sysdeps.h.

## dbus_pid_t

typedef unsigned long dbus_pid_t

A process ID.

Definition at line 139 of file dbus-sysdeps.h.

## dbus_uid_t

typedef unsigned long dbus_uid_t

A user ID.

Definition at line 141 of file dbus-sysdeps.h.

## DBusAtomic

typedef struct DBusAtomic DBusAtomic

Opaque type representing an atomically-modifiable integer that can be used from multiple threads.

Definition at line 334 of file dbus-sysdeps.h.

## DBusDirIter

typedef struct DBusDirIter DBusDirIter

Opaque type for reading a directory listing.

Definition at line 504 of file dbus-sysdeps.h.

## DBusGUID

typedef union DBusGUID DBusGUID

Type representing a universally unique ID.

Definition at line 668 of file dbus-sysdeps.h.

## DBusPollable

typedef int DBusPollable

Definition at line 392 of file dbus-sysdeps.h.

## DBusRLimit

typedef struct DBusRLimit DBusRLimit

Definition at line 722 of file dbus-sysdeps.h.

## Enumeration Type Documentation

## DBusCredentialsAddFlags

enum DBusCredentialsAddFlags

Definition at line 284 of file dbus-sysdeps.h.

## DBusLogFlags

enum DBusLogFlags

Definition at line 624 of file dbus-sysdeps.h.

## DBusSystemLogSeverity

enum DBusSystemLogSeverity

Definition at line 633 of file dbus-sysdeps.h.

## Function Documentation

## _dbus_abort()

DBUS_PRIVATE_EXPORT void _dbus_abort | ( | void |  | ) |

Aborts the program with SIGABRT (dumping core).

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

References _dbus_exit(), _dbus_getenv(), _dbus_pid_for_log(), _dbus_print_backtrace(), and _dbus_sleep_milliseconds().

Referenced by _dbus_get_tmpdir(), _dbus_real_assert(), _dbus_real_assert_not_reached(), _dbus_warn(), _dbus_warn_check_failed(), dbus_malloc(), dbus_malloc0(), and dbus_realloc().

## _dbus_accept()

DBusSocket _dbus_accept | ( | DBusSocket | listen_fd | ) |

Accepts a connection on a listening socket.

Handles EINTR for you.

This will enable FD_CLOEXEC for the returned socket.

Parameters

  listen_fd | the listen file descriptor

Returns
  the connection fd of the client, or -1 on error

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 2589 of file dbus-sysdeps-unix.c.

References _dbus_fd_set_close_on_exec(), and NULL.

## _dbus_append_keyring_directory_for_credentials()

dbus_bool_t _dbus_append_keyring_directory_for_credentials | ( | DBusString * | directory,
|  | DBusCredentials * | credentials )

Appends the directory in which a keyring for the given credentials should be stored.

The credentials should have either a Windows or UNIX user in them. The directory should be an absolute path.

On UNIX the directory is ~/.dbus-keyrings while on Windows it should probably be something else, since the dotfile convention is not normal on Windows.

Parameters

  directory | string to append directory to
  credentials | credentials the directory should be for

Returns
  FALSE on no memory

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

References _dbus_assert, _dbus_concat_dir_and_file(), _dbus_credentials_are_anonymous(), _dbus_credentials_get_unix_uid(), _dbus_getenv(), _dbus_homedir_from_uid(), _dbus_string_append(), _dbus_string_copy(), _dbus_string_free(), _dbus_string_init(), _dbus_string_init_const(), _dbus_string_set_length(), _dbus_warn(), DBUS_UID_UNSET, FALSE, NULL, and TRUE.

Referenced by _dbus_keyring_new_for_credentials().

## _dbus_append_user_from_current_process()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_append_user_from_current_process | ( | DBusString * | str | ) |

Append to the string the identity we would like to have when we authenticate, on UNIX this is the current process UID and on Windows something else, probably a Windows SID string.

No escaping is required, that is done in dbus-auth.c. The username here need not be anything human-readable, it can be the machine-readable form i.e. a user id.

Parameters

  str | the string to append to

Returns
  FALSE on no memory

No escaping is required, that is done in dbus-auth.c. The username here need not be anything human-readable, it can be the machine-readable form i.e. a user id.

Parameters

  str | the string to append to

Returns
  FALSE on no memory

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

References _dbus_geteuid(), _dbus_getpid(), _dbus_string_append(), _dbus_string_append_printf(), DBUS_UID_FORMAT, FALSE, and NULL.

## _dbus_atomic_dec()

DBUS_PRIVATE_EXPORT 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

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

References DBusAtomic::value.

Referenced by _dbus_babysitter_unref(), _dbus_connection_unref_unlocked(), _dbus_pending_call_unref_and_unlock(), _dbus_server_unref_unlocked(), dbus_connection_unref(), dbus_free(), dbus_message_unref(), dbus_pending_call_unref(), dbus_server_ref(), and dbus_server_unref().

## _dbus_atomic_get()

DBUS_PRIVATE_EXPORT dbus_int32_t _dbus_atomic_get | ( | DBusAtomic * | atomic | ) |

Atomically get the value of an integer.

It may change at any time thereafter, so this is mostly only useful for assertions.

Parameters

  atomic | pointer to the integer to get

Returns
  the value at this moment

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

References DBusAtomic::value.

Referenced by _dbus_connection_close_if_only_one_ref(), and _dbus_connection_new_for_transport().

## _dbus_atomic_inc()

DBUS_PRIVATE_EXPORT 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

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

References DBusAtomic::value.

Referenced by _dbus_babysitter_ref(), _dbus_connection_new_for_transport(), _dbus_connection_ref_unlocked(), _dbus_pending_call_new_unlocked(), _dbus_pending_call_ref_unlocked(), _dbus_server_init_base(), _dbus_server_ref_unlocked(), dbus_connection_add_filter(), dbus_connection_ref(), dbus_malloc(), dbus_malloc0(), dbus_message_copy(), dbus_message_ref(), dbus_pending_call_ref(), dbus_realloc(), dbus_server_ref(), and dbus_server_unref().

## _dbus_atomic_set_nonzero()

DBUS_PRIVATE_EXPORT void _dbus_atomic_set_nonzero | ( | DBusAtomic * | atomic | ) |

Atomically set the value of an integer to something nonzero.

Parameters

  atomic | pointer to the integer to set

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

References DBusAtomic::value.

Referenced by dbus_connection_set_change_sigpipe().

## _dbus_atomic_set_zero()

DBUS_PRIVATE_EXPORT void _dbus_atomic_set_zero | ( | DBusAtomic * | atomic | ) |

Atomically set the value of an integer to 0.

Parameters

  atomic | pointer to the integer to set

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

References DBusAtomic::value.

Referenced by dbus_connection_set_change_sigpipe().

## _dbus_become_daemon()

dbus_bool_t _dbus_become_daemon | ( | const DBusString * | pidfile,
|  | DBusPipe * | print_pid_pipe,
|  | DBusError * | error,
|  | dbus_bool_t | keep_umask )

Does the chdir, fork, setsid, etc.

to become a daemon process.

Parameters

  pidfile | NULL, or pidfile to create
  print_pid_pipe | pipe to print daemon's pid to, or -1 for none
  error | return location for errors
  keep_umask | TRUE to keep the original umask

Returns
  FALSE on failure

to become a daemon process.

Parameters

  pidfile | NULL, or pidfile to create
  print_pid_pipe | file descriptor to print daemon's pid to, or -1 for none
  error | return location for errors
  keep_umask | TRUE to keep the original umask

Returns
  FALSE on failure

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

References _dbus_assert_not_reached, _dbus_ensure_standard_fds(), _dbus_error_from_errno(), _dbus_getenv(), _dbus_warn(), _dbus_write_pid_to_file_and_pipe(), DBUS_ERROR_FAILED, DBUS_ERROR_NOT_SUPPORTED, dbus_set_error(), FALSE, DBusError::message, NULL, and TRUE.

## _dbus_change_to_daemon_user()

dbus_bool_t _dbus_change_to_daemon_user | ( | const char * | user,
|  | DBusError * | error )

Changes the user and group the bus is running as.

Parameters

  user | the user to become
  error | return location for errors

Returns
  FALSE on failure

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

References _dbus_error_from_errno(), _dbus_get_user_id_and_primary_group(), _dbus_string_init_const(), _dbus_warn(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, NULL, and TRUE.

## _dbus_check_dir_is_private_to_user()

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 2644 of file dbus-sysdeps-unix.c.

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

## _dbus_check_setuid()

dbus_bool_t _dbus_check_setuid | ( | void |  | ) |

NOTE: If you modify this function, please also consider making the corresponding change in GLib.

See glib/gutils.c:g_check_setuid().

Returns TRUE if the current process was executed as setuid (or an equivalent __libc_enable_secure is available). See: http://osdir.com/ml/linux.lfs.hardened/2007-04/msg00032.html

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

References FALSE, and TRUE.

Referenced by _dbus_get_autolaunch_address(), _dbus_getenv(), _dbus_keyring_new_for_credentials(), _dbus_lookup_launchd_socket(), and _dbus_threads_init_platform_specific().

## _dbus_clearenv()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_clearenv | ( | void |  | ) |

Wrapper for clearenv().

Returns
  TRUE on success.

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

References FALSE, NULL, and TRUE.

## _dbus_close_socket()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_close_socket | ( | DBusSocket * | fd,
|  | DBusError * | error )

Closes a socket and invalidates it.

Should not be used on non-socket file descriptors or handles.

If an error is detected, this function returns FALSE and sets the error, but the socket is still closed and invalidated. Callers can use the error in a diagnostic message, but should not retry closing the socket.

Parameters

  fd | the socket
  error | return location for an error

Returns
  FALSE if error is set

Parameters

  fd | the file descriptor
  error | error object

Returns
  FALSE if error set

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

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

Referenced by _dbus_babysitter_unref(), _dbus_connect_unix_socket(), _dbus_listen_unix_socket(), _dbus_server_listen_platform_specific(), _dbus_server_new_for_domain_socket(), _dbus_server_new_for_tcp_socket(), _dbus_transport_new_for_domain_socket(), and _dbus_transport_new_for_tcp_socket().

## _dbus_combine_tcp_errors()

void _dbus_combine_tcp_errors | ( | DBusList ** | sources,
|  | const char * | summary,
|  | const char * | host,
|  | const char * | port,
|  | DBusError * | dest )

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

## _dbus_command_for_pid()

dbus_bool_t _dbus_command_for_pid | ( | unsigned long | pid,
|  | DBusString * | str,
|  | int | max_len,
|  | DBusError * | error )

Get a printable string describing the command used to execute the process with pid.

This string should only be used for informative purposes such as logging; it may not be trusted.

The command is guaranteed to be printable ASCII and no longer than max_len.

Parameters

  pid | Process id
  str | Append command to this string
  max_len | Maximum length of returned command
  error | return location for errors

Returns
  FALSE on error

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

References _dbus_close(), _dbus_error_from_errno(), _dbus_read(), _dbus_string_append_printf(), _dbus_string_copy(), _dbus_string_free(), _dbus_string_init(), DBUS_ERROR_NOT_SUPPORTED, dbus_set_error(), FALSE, NULL, and TRUE.

## _dbus_concat_dir_and_file()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_concat_dir_and_file | ( | DBusString * | dir,
|  | const DBusString * | next_component )

Appends the given filename to the given directory.

Parameters

  dir | the directory name
  next_component | the filename

Returns
  TRUE on success

Parameters

  dir | the directory name
  next_component | the filename

Returns
  TRUE on success

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

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

Referenced by _dbus_append_keyring_directory_for_credentials(), _dbus_get_standard_session_servicedirs(), _dbus_keyring_new_for_credentials(), _dbus_server_listen_unix_socket(), and _dbus_split_paths_and_append().

## _dbus_connect_exec()

DBusSocket _dbus_connect_exec | ( | const char * | path,
|  | char *const | argv[],
|  | DBusError * | error )

Creates a UNIX domain socket and connects it to the specified process to execute.

This will set FD_CLOEXEC for the socket returned.

Parameters

  path | the path to the executable
  argv | the argument list for the process to execute. argv[0] typically is identical to the path of the executable
  error | return location for error code

Returns
  a valid socket on success or an invalid socket on error

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

References _dbus_assert, _dbus_close_all(), _dbus_error_from_errno(), _dbus_fd_set_close_on_exec(), and dbus_set_error().

## _dbus_connect_tcp_socket()

DBusSocket _dbus_connect_tcp_socket | ( | const char * | host,
|  | const char * | port,
|  | const char * | family,
|  | 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.

This will set FD_CLOEXEC for the socket returned

Parameters

  host | the host name to connect to
  port | the port to connect to
  family | the address family to listen on, NULL for all
  error | return location for error code

Returns
  connection file descriptor or -1 on error

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

Parameters

  host | the host name to connect to
  port | the port to connect to
  family | the address family to listen on, NULL for all
  error | return location for error code

Returns
  connection file descriptor or -1 on error

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

References NULL.

## _dbus_connect_tcp_socket_with_nonce()

DBusSocket _dbus_connect_tcp_socket_with_nonce | ( | const char * | host,
|  | const char * | port,
|  | const char * | family,
|  | const char * | noncefile,
|  | DBusError * | error )

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

## _dbus_connect_unix_socket()

DBusSocket _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.

This will set FD_CLOEXEC for the socket returned.

Parameters

  path | the path to UNIX domain socket
  abstract | TRUE to use abstract namespace
  error | return location for error code

Returns
  a valid socket on success or an invalid socket on error

The socket is returned, and is set up as nonblocking.

Abstract socket usage always fails.

This will set FD_CLOEXEC for the socket returned.

Parameters

  path | the path to UNIX domain socket
  abstract | TRUE to use abstract namespace
  error | return location for error code

Returns
  a valid socket on success or an invalid socket on error

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

References _dbus_close_socket(), _dbus_error_from_errno(), _DBUS_MAX_SUN_PATH_LENGTH, _dbus_set_socket_nonblocking(), _DBUS_ZERO, DBUS_ERROR_BAD_ADDRESS, DBUS_ERROR_NOT_SUPPORTED, dbus_set_error(), and NULL.

Referenced by _dbus_transport_new_for_domain_socket().

## _dbus_create_directory()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_create_directory | ( | const DBusString * | filename,
|  | DBusError * | error )

directory interface

directory interface

Unlike _dbus_ensure_directory(), this only succeeds if the directory is genuinely newly-created.

Parameters

  filename | directory filename
  error | initialized error object

Returns
  TRUE on success

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

References _dbus_strerror_from_errno(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, NULL, and TRUE.

## _dbus_credentials_add_from_current_process()

dbus_bool_t _dbus_credentials_add_from_current_process | ( | DBusCredentials * | credentials | ) |

Adds the most important credentials of the current process (the uid and pid) to the passed-in credentials object.

The group vector is not included because it is rarely needed. The Linux security label is not included because it is rarely needed, it requires reading /proc, and the LSM API doesn't actually guarantee that the string seen in /proc is comparable to the strings found in SO_PEERSEC results.

Parameters

  credentials | credentials to add to

Returns
  FALSE if no memory; does not properly roll back on failure, so only some credentials may have been added

Adds the most important credentials of the current process (the uid and pid) to the passed-in credentials object.

Parameters

  credentials | credentials to add to

Returns
  FALSE if no memory; does not properly roll back on failure, so only some credentials may have been added

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

References _dbus_credentials_add_pid(), _dbus_credentials_add_unix_uid(), _dbus_credentials_add_windows_sid(), _dbus_credentials_take_pid_fd(), _dbus_geteuid(), _dbus_getpid(), FALSE, NULL, and TRUE.

Referenced by _dbus_credentials_new_from_current_process(), and _dbus_keyring_new_for_credentials().

## _dbus_credentials_add_from_user()

dbus_bool_t _dbus_credentials_add_from_user | ( | DBusCredentials * | credentials,
|  | const DBusString * | username,
|  | DBusCredentialsAddFlags | flags,
|  | DBusError * | error )

Adds the credentials corresponding to the given username.

Parameters

  credentials | credentials to fill in
  username | the username

Returns
  TRUE if the username existed and we got some credentials

Used among other purposes to parses a desired identity provided from a client in the auth protocol. On UNIX this means parsing a UID, on Windows probably parsing an SID string.

Parameters

  credentials | credentials to fill in
  username | the username

Returns
  TRUE if the username existed and we got some credentials

Definition at line 2314 of file dbus-sysdeps-win.c.

References _dbus_credentials_add_unix_uid(), _dbus_credentials_add_windows_sid(), _dbus_is_a_number(), _dbus_user_database_get_system(), _dbus_user_database_get_username(), _dbus_user_database_lock_system(), _dbus_user_database_unlock_system(), DBUS_ERROR_INVALID_ARGS, dbus_set_error(), DBUS_UID_UNSET, FALSE, NULL, TRUE, and DBusUserInfo::uid.

## _dbus_daemon_report_ready()

void _dbus_daemon_report_ready | ( | void |  | ) |

Report to a service manager that the daemon calling this function is ready for use.

This is currently only implemented for systemd.

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

Referenced by _dbus_daemon_report_reloaded().

## _dbus_daemon_report_reloaded()

void _dbus_daemon_report_reloaded | ( | void |  | ) |

Report to a service manager that the daemon calling this function is reloading configuration.

This is currently only implemented for systemd.

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

References _dbus_daemon_report_ready().

## _dbus_daemon_report_reloading()

void _dbus_daemon_report_reloading | ( | void |  | ) |

Report to a service manager that the daemon calling this function is reloading configuration.

This is currently only implemented for systemd.

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

## _dbus_daemon_report_stopping()

void _dbus_daemon_report_stopping | ( | void |  | ) |

Report to a service manager that the daemon calling this function is shutting down.

This is currently only implemented for systemd.

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

## _dbus_daemon_unpublish_session_bus_address()

dbus_bool_t _dbus_daemon_unpublish_session_bus_address | ( | void |  | ) |

Clear the platform-specific centralized location where the session bus address is published.

This must only be called if DBusServer::published_address is TRUE, which is be the case if and only if platform-specific code has published the address centrally.

On Windows, this is implemented by closing a global shared memory segment.

On Unix, the session bus address is not published in a centralized location by libdbus, so this function does nothing. The closest equivalent on Unix is that the session bus address is published by the dbus-launch tool, and unpublished automatically when the dbus-launch tool exits.

Returns
  NULL in case of error

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

References FALSE, NULL, and TRUE.

Referenced by _dbus_server_listen_platform_specific().

## _dbus_delete_directory()

DBUS_PRIVATE_EXPORT 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 4822 of file dbus-sysdeps-unix.c.

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

## _dbus_directory_close()

void _dbus_directory_close | ( | DBusDirIter * | iter | ) |

Closes a directory iteration.

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

References DBusDirIter::d, and dbus_free().

## _dbus_directory_get_next_file()

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.

This function is not re-entrant, and not necessarily thread-safe. Only use it for test code or single-threaded utilities.

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

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 689 of file dbus-sysdeps-util-unix.c.

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

## _dbus_directory_open()

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 641 of file dbus-sysdeps-util-unix.c.

References _dbus_error_from_errno(), _dbus_string_append(), _dbus_string_ends_with_c_str(), _dbus_string_free(), _dbus_string_init_from_string(), DBusDirIter::d, DBUS_ERROR_NO_MEMORY, dbus_free(), dbus_new0, dbus_set_error(), FALSE, NULL, and TRUE.

## _dbus_disable_sigpipe()

void _dbus_disable_sigpipe | ( | void |  | ) |

signal (SIGPIPE, SIG_IGN);

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

Referenced by _dbus_connection_new_for_transport().

## _dbus_ensure_directory()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_ensure_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 3434 of file dbus-sysdeps-unix.c.

References _dbus_strerror_from_errno(), DBUS_ERROR_FAILED, dbus_set_error(), FALSE, NULL, and TRUE.

Referenced by _dbus_keyring_new_for_credentials().

## _dbus_error_from_errno()

DBUS_PRIVATE_EXPORT const char * _dbus_error_from_errno | ( | int | error_number | ) |

Converts a UNIX errno, or Windows errno or WinSock error value into a DBusError name.

Parameters

  error_number | the errno.

Returns
  an error name

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

References DBUS_ERROR_ACCESS_DENIED, DBUS_ERROR_ADDRESS_IN_USE, DBUS_ERROR_FAILED, DBUS_ERROR_FILE_EXISTS, 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_append_address_from_socket(), _dbus_become_daemon(), _dbus_change_to_daemon_user(), _dbus_check_dir_is_private_to_user(), _dbus_close(), _dbus_close_socket(), _dbus_command_for_pid(), _dbus_connect_exec(), _dbus_connect_unix_socket(), _dbus_directory_get_next_file(), _dbus_directory_open(), _dbus_dup(), _dbus_error_from_system_errno(), _dbus_file_get_contents(), _dbus_generate_random_bytes(), _dbus_is_console_user(), _dbus_listen_systemd_sockets(), _dbus_listen_tcp_socket(), _dbus_listen_unix_socket(), _dbus_read_credentials_socket(), _dbus_send_credentials_socket(), _dbus_set_socket_nonblocking(), _dbus_socketpair(), _dbus_spawn_async_with_babysitter(), _dbus_stat(), and _dbus_string_save_to_file().

## _dbus_error_from_system_errno()

DBUS_PRIVATE_EXPORT const char * _dbus_error_from_system_errno | ( | void |  | ) |

Converts the current system errno value into a DBusError name.

Returns
  an error name

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

References _dbus_error_from_errno().

## _dbus_exit()

DBUS_PRIVATE_EXPORT void _dbus_exit | ( | int | code | ) |

Exit the process, returning the given value.

Parameters

  code | the exit code

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

Referenced by _dbus_abort().

## _dbus_flush_caches()

DBUS_PRIVATE_EXPORT void _dbus_flush_caches | ( | void |  | ) |

Called when the bus daemon is signaled to reload its configuration; any caches should be nuked.

Of course any caches that need explicit reload are probably broken, but c'est la vie.

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

References _dbus_user_database_flush_system().

## _dbus_generate_random_ascii()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_generate_random_ascii | ( | DBusString * | str,
|  | int | n_bytes,
|  | DBusError * | error )

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
  error | location to store reason for failure

Returns
  TRUE on success, FALSE if no memory or other failure

Definition at line 525 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().

## _dbus_generate_random_bytes()

dbus_bool_t _dbus_generate_random_bytes | ( | DBusString * | str,
|  | int | n_bytes,
|  | DBusError * | error )

Generates the given number of securely 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
  error | location to store reason for failure

Returns
  TRUE on success, FALSE on error

Generates the given number of securely 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
  error | location to store reason for failure

Returns
  TRUE on success

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

References _dbus_close(), _dbus_error_from_errno(), _dbus_read(), _dbus_string_get_data_len(), _dbus_string_lengthen(), _dbus_string_set_length(), DBUS_ERROR_IO_ERROR, dbus_set_error(), FALSE, NULL, and TRUE.

Referenced by _dbus_generate_random_ascii(), and _dbus_generate_random_bytes_buffer().

## _dbus_generate_random_bytes_buffer()

_DBUS_WARN_UNUSED_RESULT dbus_bool_t _dbus_generate_random_bytes_buffer | ( | char * | buffer,
|  | int | n_bytes,
|  | DBusError * | error )

Random numbers.

Random numbers.

Parameters

  buffer | an allocated buffer
  n_bytes | the number of bytes in buffer to write to
  error | location to store reason for failure

Returns
  TRUE on success

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

References _dbus_generate_random_bytes(), _dbus_string_copy_to_buffer(), _dbus_string_free(), _dbus_string_init(), FALSE, and TRUE.

Referenced by _dbus_generate_uuid().

## _dbus_get_autolaunch_address()

dbus_bool_t _dbus_get_autolaunch_address | ( | const char * | scope,
|  | DBusString * | address,
|  | DBusError * | error )

Returns the address of a new session bus.

If successful, returns TRUE and appends the address to `address`. If a failure happens, returns FALSE and sets an error in `error`.

Parameters

  scope | scope of autolaunch (Windows only)
  address | a DBusString where the address can be stored
  error | a DBusError to store the error in case of failure

Returns
  TRUE on success, FALSE if an error happened

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

References _dbus_assert, _dbus_check_setuid(), _dbus_get_local_machine_uuid_encoded(), _dbus_getenv(), _DBUS_N_ELEMENTS, _dbus_string_append_printf(), _dbus_string_free(), _dbus_string_init(), DBUS_ERROR_FAILED, DBUS_ERROR_NO_MEMORY, DBUS_ERROR_NOT_SUPPORTED, DBUS_ERROR_SPAWN_CHILD_EXITED, DBUS_ERROR_TIMEOUT, dbus_set_error(), dbus_set_error_const(), FALSE, NULL, and TRUE.

## _dbus_get_environment()

char ** _dbus_get_environment | ( | void |  | ) |

Gets a NULL-terminated list of key=value pairs from the environment.

Use dbus_free_string_array to free it.

Returns
  the environment or NULL on OOM

Definition at line 55 of file dbus-sysdeps-util.c.

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

## _dbus_get_is_errno_eagain_or_ewouldblock()

dbus_bool_t _dbus_get_is_errno_eagain_or_ewouldblock | ( | int | e | ) |

See if errno is EAGAIN or EWOULDBLOCK (this has to be done differently for Winsock so is abstracted).

Returns
  TRUE if e == EAGAIN or e == EWOULDBLOCK

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

## _dbus_get_is_errno_eintr()

dbus_bool_t _dbus_get_is_errno_eintr | ( | int | e | ) |

See if errno is EINTR.

Returns
  TRUE if e == EINTR

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

## _dbus_get_is_errno_enomem()

dbus_bool_t _dbus_get_is_errno_enomem | ( | int | e | ) |

See if errno is ENOMEM.

Returns
  TRUE if e == ENOMEM

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

## _dbus_get_is_errno_epipe()

dbus_bool_t _dbus_get_is_errno_epipe | ( | int | e | ) |

See if errno is EPIPE.

Returns
  TRUE if errno == EPIPE

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

## _dbus_get_is_errno_etoomanyrefs()

dbus_bool_t _dbus_get_is_errno_etoomanyrefs | ( | int | e | ) |

See if errno is ETOOMANYREFS.

Returns
  TRUE if errno == ETOOMANYREFS

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

References FALSE.

## _dbus_get_local_system_servicedirs()

dbus_bool_t _dbus_get_local_system_servicedirs | ( | DBusList ** | dirs | ) |

Returns the local admin directories for a system bus to look for service activation files.

On UNIX this should be the /etc/ and /run/ directories.

On Windows there is no system bus and this function can return nothing.

Parameters

  dirs | the directory list we are returning

Returns
  FALSE on OOM

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

References _dbus_split_paths_and_append(), _dbus_string_init_const(), NULL, and TRUE.

## _dbus_get_low_level_socket_errno()

int _dbus_get_low_level_socket_errno | ( | void |  | ) |

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

## _dbus_get_monotonic_time()

DBUS_PRIVATE_EXPORT void _dbus_get_monotonic_time | ( | dbus_int64_t * | tv_sec,
|  | long * | tv_usec )

Get current time, as in gettimeofday().

Use the monotonic clock if available, to avoid problems when the system time changes.

Parameters

  tv_sec | return location for number of seconds
  tv_usec | return location for number of microseconds

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

References _dbus_get_real_time(), dbus_int64_t, and NULL.

Referenced by _dbus_connection_block_pending_call().

## _dbus_get_real_time()

DBUS_PRIVATE_EXPORT void _dbus_get_real_time | ( | dbus_int64_t * | tv_sec,
|  | long * | tv_usec )

Get current time, as in gettimeofday().

Never uses the monotonic clock.

Parameters

  tv_sec | return location for number of seconds
  tv_usec | return location for number of microseconds

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

References DBUS_INT64_CONSTANT, dbus_int64_t, dbus_uint64_t, and NULL.

Referenced by _dbus_generate_uuid(), and _dbus_get_monotonic_time().

## _dbus_get_session_config_file()

dbus_bool_t _dbus_get_session_config_file | ( | DBusString * | str | ) |

Get the absolute path of the session.conf file.

Parameters

  str | the string to append to, which must be empty on entry

Returns
  FALSE if no memory

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

References _dbus_assert, and _dbus_string_append().

## _dbus_get_standard_session_servicedirs()

dbus_bool_t _dbus_get_standard_session_servicedirs | ( | DBusList ** | dirs | ) |

Returns the standard directories for a session bus to look for service activation files.

On UNIX this should be the standard xdg freedesktop.org data directories:

XDG_DATA_HOME=${XDG_DATA_HOME-$HOME/.local/share} XDG_DATA_DIRS=${XDG_DATA_DIRS-/usr/local/share:/usr/share}

and

DBUS_DATADIR

Parameters

  dirs | the directory list we are returning

Returns
  FALSE on OOM

On Windows this should be data directories:

CommonProgramFiles%/dbus

and

relocated DBUS_DATADIR

Parameters

  dirs | the directory list we are returning

Returns
  FALSE on OOM

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

References _dbus_concat_dir_and_file(), _dbus_getenv(), _dbus_homedir_from_current_process(), _dbus_replace_install_prefix(), _dbus_split_paths_and_append(), _dbus_string_append(), _dbus_string_free(), _dbus_string_init(), _dbus_string_init_const(), FALSE, NULL, and TRUE.

## _dbus_get_standard_system_servicedirs()

dbus_bool_t _dbus_get_standard_system_servicedirs | ( | DBusList ** | dirs | ) |

Returns the standard directories for a system bus to look for service activation files.

On UNIX this should be the standard xdg freedesktop.org data directories:

XDG_DATA_DIRS=${XDG_DATA_DIRS-/usr/local/share:/usr/share}

and

DBUS_DATADIR

On Windows there is no system bus and this function can return nothing.

Parameters

  dirs | the directory list we are returning

Returns
  FALSE on OOM

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

References _dbus_split_paths_and_append(), _dbus_string_init_const(), NULL, and TRUE.

## _dbus_get_system_config_file()

dbus_bool_t _dbus_get_system_config_file | ( | DBusString * | str | ) |

Get the absolute path of the system.conf file (there is no system bus on Windows so this can just return FALSE and print a warning or something).

Parameters

  str | the string to append to, which must be empty on entry

Returns
  FALSE if no memory

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

References _dbus_assert, and _dbus_string_append().

## _dbus_get_tmpdir()

DBUS_PRIVATE_EXPORT 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, or NULL if no memory for locking

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

Returns
  location of temp directory, or NULL if no memory for locking

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

References _dbus_abort(), _dbus_assert, _DBUS_LOCK, _DBUS_UNLOCK, _dbus_warn(), and NULL.

## _dbus_getenv()

DBUS_PRIVATE_EXPORT 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 197 of file dbus-sysdeps.c.

References _dbus_check_setuid(), and NULL.

Referenced by _dbus_abort(), _dbus_append_keyring_directory_for_credentials(), _dbus_become_daemon(), _dbus_get_autolaunch_address(), _dbus_get_standard_session_servicedirs(), _dbus_homedir_from_uid(), _dbus_server_listen_unix_socket(), _dbus_server_new_for_launchd(), and _dbus_set_up_transient_session_servicedirs().

## _dbus_getpid()

DBUS_PRIVATE_EXPORT dbus_pid_t _dbus_getpid | ( | void |  | ) |

Gets our process ID.

Returns
  process ID

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

Referenced by _dbus_append_user_from_current_process(), _dbus_credentials_add_from_current_process(), _dbus_logv(), and _dbus_pid_for_log().

## _dbus_getuid()

DBUS_PRIVATE_EXPORT dbus_uid_t _dbus_getuid | ( | void |  | ) |

Gets our UID.

Returns
  process UID

Gets our UID.

Returns
  on Windows, just DBUS_UID_UNSET

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

References DBUS_UID_UNSET.

Referenced by _dbus_homedir_from_uid().

## _dbus_inet_sockaddr_to_string()

dbus_bool_t _dbus_inet_sockaddr_to_string | ( | const void * | sockaddr_pointer,
|  | size_t | len,
|  | char * | string,
|  | size_t | string_len,
|  | const char ** | family_name,
|  | dbus_uint16_t * | port,
|  | DBusError * | error )

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

## _dbus_init_system_log()

DBUS_PRIVATE_EXPORT void _dbus_init_system_log | ( | const char * | tag,
|  | DBusLogFlags | flags )

Initialize the system log.

The "tag" is not copied, and must remain valid for the entire lifetime of the process or until _dbus_init_system_log() is called again. In practice it will normally be a constant.

On platforms that do not support a system log, the #DBUS_LOG_FLAGS_SYSTEM_LOG flag is treated as equivalent to #DBUS_LOG_FLAGS_STDERR.

Parameters

  tag | the name of the executable (syslog tag)
  mode | whether to log to stderr, the system log or both

The "tag" is not copied, and must remain valid for the entire lifetime of the process or until _dbus_init_system_log() is called again. In practice it will normally be a constant.

Parameters

  tag | the name of the executable (syslog tag)
  mode | whether to log to stderr, the system log or both

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

References _dbus_assert.

## _dbus_listen_tcp_socket()

int _dbus_listen_tcp_socket | ( | const char * | host,
|  | const char * | port,
|  | const char * | family,
|  | DBusString * | retport,
|  | const char ** | retfamily,
|  | DBusSocket ** | fds_p,
|  | DBusError * | error )

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

The socket is set to be nonblocking. In case of port=0 a random free port is used and returned in the port parameter. If inaddr_any is specified, the hostname is ignored.

This will set FD_CLOEXEC for the socket returned

Parameters

  host | the host name to listen on
  port | the port to listen on, if zero a free port will be used
  family | the address family to listen on, NULL for all
  retport | string to return the actual port listened on
  retfamily | string to return the actual family listened on
  fds_p | location to store returned file descriptors
  error | return location for errors

Returns
  the number of listening file descriptors or -1 on error

The socket is set to be nonblocking. In case of port=0 a random free port is used and returned in the port parameter. If inaddr_any is specified, the hostname is ignored.

Parameters

  host | the host name to listen on
  port | the port to listen on, if zero a free port will be used
  family | the address family to listen on, NULL for all
  retport | string to return the actual port listened on
  retfamily | string to return the actual family listened on
  fds_p | location to store returned file descriptors
  error | return location for errors

Returns
  the number of listening file descriptors or -1 on error

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

References _dbus_assert, _dbus_close(), _dbus_error_from_errno(), _dbus_list_append(), _dbus_list_pop_first(), _dbus_set_socket_nonblocking(), _dbus_string_append(), _dbus_warn(), _DBUS_ZERO, DBUS_ERROR_BAD_ADDRESS, dbus_error_free(), dbus_error_init(), DBUS_ERROR_INVALID_ARGS, DBUS_ERROR_NO_MEMORY, dbus_free(), dbus_new0, dbus_realloc(), dbus_set_error(), FALSE, NULL, and TRUE.

Referenced by _dbus_server_new_for_tcp_socket().

## _dbus_listen_unix_socket()

DBusSocket _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.

This will set FD_CLOEXEC for the socket returned

Parameters

  path | the socket name
  abstract | TRUE to use abstract namespace
  error | return location for errors

Returns
  a valid socket on success or an invalid socket on error

The socket is set to be nonblocking.

Abstract socket usage always fails.

This will set CLOEXEC for the socket returned

Parameters

  path | the socket name
  abstract | TRUE to use abstract namespace
  error | return location for errors

Returns
  a valid socket on success or an invalid socket on error

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

References _dbus_close(), _dbus_close_socket(), _dbus_error_from_errno(), _DBUS_MAX_SUN_PATH_LENGTH, _dbus_set_socket_nonblocking(), _dbus_warn(), _DBUS_ZERO, DBUS_ERROR_BAD_ADDRESS, DBUS_ERROR_NOT_SUPPORTED, dbus_set_error(), and NULL.

Referenced by _dbus_server_new_for_domain_socket().

## _dbus_log()

DBUS_PRIVATE_EXPORT void _dbus_log | ( | DBusSystemLogSeverity | severity,
|  | const char * | msg,
|  |  | ... )

Log a message to the system log file (e.g.

syslog on Unix) and/or stderr.

Parameters

  severity | a severity value
  msg | a printf-style format string

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

References _dbus_logv().

## _dbus_logv()

DBUS_PRIVATE_EXPORT void _dbus_logv | ( | DBusSystemLogSeverity | severity,
|  | const char * | msg,
|  | va_list | args )

Log a message to the system log file (e.g.

syslog on Unix) and/or stderr.

Parameters

  severity | a severity value
  msg | a printf-style format string
  args | arguments for the format string

syslog on Unix).

Parameters

  severity | a severity value
  msg | a printf-style format string
  args | arguments for the format string

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

References _dbus_assert_not_reached, _dbus_getpid(), _dbus_pid_for_log(), _dbus_string_append_printf(), _dbus_string_append_printf_valist(), _dbus_string_free(), _dbus_string_init(), DBUS_PID_FORMAT, and NULL.

Referenced by _dbus_log(), _dbus_warn(), and _dbus_warn_check_failed().

## _dbus_lookup_session_address()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_lookup_session_address | ( | dbus_bool_t * | supported,
|  | DBusString * | address,
|  | DBusError * | error )

Determines the address of the session bus by querying a platform-specific method.

The first parameter will be a boolean specifying whether or not a dynamic session lookup is supported on this platform.

If supported is TRUE and the return value is TRUE, the address will be appended to `address`. If a failure happens, returns FALSE and sets an error in `error`.

If supported is FALSE, ignore the return value.

Parameters

  supported | returns whether this method is supported
  address | a DBusString where the address can be stored
  error | a DBusError to store the error in case of failure

Returns
  TRUE on success, FALSE if an error happened

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

References FALSE, and TRUE.

## _dbus_parse_unix_group_from_config()

dbus_bool_t _dbus_parse_unix_group_from_config | ( | const DBusString * | groupname,
|  | dbus_gid_t * | gid_p )

Parse a UNIX group from the bus config file.

On Windows, this should simply always fail (just return FALSE).

Parameters

  groupname | the groupname text
  gid_p | place to return the gid

Returns
  TRUE on success

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

References _dbus_get_group_id(), and FALSE.

## _dbus_parse_unix_user_from_config()

dbus_bool_t _dbus_parse_unix_user_from_config | ( | const DBusString * | username,
|  | dbus_uid_t * | uid_p )

Parse a UNIX user from the bus config file.

On Windows, this should simply always fail (just return FALSE).

Parameters

  username | the username text
  uid_p | place to return the uid

Returns
  TRUE on success

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

References _dbus_get_user_id(), and FALSE.

## _dbus_path_is_absolute()

DBUS_PRIVATE_EXPORT 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 576 of file dbus-sysdeps-util-unix.c.

References FALSE.

## _dbus_pid_for_log()

unsigned long _dbus_pid_for_log | ( | void |  | ) |

The only reason this is separate from _dbus_getpid() is to allow it on Windows for logging but not for other purposes.

Returns
  process ID to put in log messages

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

References _dbus_getpid().

Referenced by _dbus_abort(), and _dbus_logv().

## _dbus_poll()

DBUS_PRIVATE_EXPORT 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 3303 of file dbus-sysdeps-unix.c.

References _DBUS_POLLERR, _DBUS_POLLIN, _DBUS_POLLOUT, DBusPollFD::events, DBusPollFD::fd, NULL, and DBusPollFD::revents.

## _dbus_print_backtrace()

DBUS_PRIVATE_EXPORT void _dbus_print_backtrace | ( | void |  | ) |

On GNU libc systems, print a crude backtrace to stderr.

On other systems, print "no backtrace support" and block for possible gdb attachment if an appropriate environment variable is set.

Definition at line 204 of file dbus-backtrace-win.c.

Referenced by _dbus_abort().

## _dbus_printf_string_upper_bound()

DBUS_PRIVATE_EXPORT 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, or -1 if no memory

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

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

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

Referenced by _dbus_string_append_printf_valist().

## _dbus_read_credentials_socket()

dbus_bool_t _dbus_read_credentials_socket | ( | DBusSocket | handle,
|  | DBusCredentials * | credentials,
|  | DBusError * | error )

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

Clears the credentials object, then adds pid/uid if available, so any previous credentials stored in the object are lost.

DBusServer makes the security assumption that the credentials returned by this method are the credentials that were active at the time the socket was opened. Do not add APIs to this method that would break that assumption.

In particular, it is incorrect to use any API of the form "get the process ID at the other end of the connection, then determine its uid, gid, or other credentials from the pid" (e.g. looking in /proc on Linux). If we did that, we would be vulnerable to several attacks. A malicious process could queue up the rest of the authentication handshake and a malicious message that it should not be allowed to send, then race with the DBusServer to exec() a more privileged (e.g. setuid) binary that would have been allowed to send that message; or it could exit, and arrange for enough setuid processes to be started that its pid would be recycled for one of those processes with high probability; or it could fd-pass the connection to a more privileged process.

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 | object to add client credentials to
  error | location to store error code

Returns
  TRUE on success

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

  handle | 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 2209 of file dbus-sysdeps-unix.c.

References _dbus_credentials_add_adt_audit_data(), _dbus_credentials_add_pid(), _dbus_credentials_add_unix_uid(), _dbus_credentials_add_windows_sid(), _dbus_credentials_clear(), _dbus_credentials_take_pid_fd(), _dbus_error_from_errno(), _dbus_read_socket(), _dbus_string_free(), _dbus_string_init(), _DBUS_ZERO, DBUS_ERROR_FAILED, dbus_error_is_set(), DBUS_GID_UNSET, DBUS_PID_FORMAT, DBUS_PID_UNSET, dbus_set_error(), DBUS_UID_FORMAT, DBUS_UID_UNSET, FALSE, NULL, and TRUE.

## _dbus_read_local_machine_uuid()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_read_local_machine_uuid | ( | DBusGUID * | machine_id,
|  | dbus_bool_t | create_if_not_found,
|  | DBusError * | error )

Reads the uuid of the machine we're running on from the dbus configuration.

Optionally try to create it (only root can do this usually).

On UNIX, reads a file that gets created by dbus-uuidgen in a post-install script. On Windows, if there's a standard machine uuid we could just use that, but I can't find one with the right properties (the hardware profile guid can change without rebooting I believe). If there's no standard one we might want to use the registry instead of a file for this, and I'm not sure how we'd ensure the uuid gets created.

Parameters

  machine_id | guid to init with the machine's uuid
  create_if_not_found | try to create the uuid if it doesn't exist
  error | the error return

Returns
  FALSE if the error is set

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

References _dbus_generate_uuid(), _dbus_read_uuid_file(), _dbus_string_init_const(), _dbus_write_uuid_file(), DBusGUID::as_uint32s, dbus_error_free(), DBUS_ERROR_INIT, DBUS_ERROR_NO_MEMORY, dbus_set_error(), FALSE, DBusError::message, DBusError::name, NULL, and TRUE.

Referenced by _dbus_get_local_machine_uuid_encoded(), and _dbus_get_uuid().

## _dbus_read_socket()

DBUS_PRIVATE_EXPORT int _dbus_read_socket | ( | DBusSocket | fd,
|  | DBusString * | buffer,
|  | int | count )

Like _dbus_read(), but only works on sockets so is available on Windows.

Parameters

  fd | the socket
  buffer | string to append data to
  count | max amount of data to read

Returns
  number of bytes appended to the string

Like _dbus_read(), but only works on sockets so is available on Windows.

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_socket() handles EINTR for you. _dbus_read_socket() 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 338 of file dbus-sysdeps-unix.c.

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

Referenced by _dbus_read_credentials_socket(), and _dbus_read_socket_with_unix_fds().

## _dbus_read_socket_with_unix_fds()

int _dbus_read_socket_with_unix_fds | ( | DBusSocket | fd,
|  | DBusString * | buffer,
|  | int | count,
|  | int * | fds,
|  | unsigned int * | n_fds )

Like _dbus_read_socket() but also tries to read unix fds from the socket.

When there are more fds to read than space in the array passed this function will fail with ENOSPC.

Parameters

  fd | the socket
  buffer | string to append data to
  count | max amount of data to read
  fds | array to place read file descriptors in
  n_fds | on input space in fds array, on output how many fds actually got read

Returns
  number of bytes appended to string

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

References _dbus_assert, _dbus_fd_set_close_on_exec(), _dbus_read_socket(), _dbus_string_get_data_len(), _dbus_string_lengthen(), _dbus_string_set_length(), _dbus_verbose_bytes_of_string(), _DBUS_ZERO, DBUS_MAXIMUM_MESSAGE_UNIX_FDS, FALSE, NULL, and TRUE.

## _dbus_replace_install_prefix()

dbus_bool_t _dbus_replace_install_prefix | ( | DBusString * | path | ) |

Replace the DBUS_PREFIX in the given path, in-place, by the current D-Bus installation directory.

On Unix this function does nothing, successfully.

Parameters

  path | path to edit

Returns
  FALSE on OOM

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

References _dbus_string_free(), _dbus_string_init(), _dbus_string_replace_len(), _dbus_string_starts_with_c_str(), FALSE, and TRUE.

Referenced by _dbus_get_standard_session_servicedirs().

## _dbus_resolve_pid_fd()

DBUS_PRIVATE_EXPORT dbus_pid_t _dbus_resolve_pid_fd | ( | int | pid_fd | ) |

Resolve the PID from the PID FD, if any.

This allows us to avoid PID reuse attacks. Returns DBUS_PID_UNSET if the PID could not be resolved. Note that this requires being able to read /proc/self/fdinfo/<FD>, which is created as 600 and owned by the original UID that the process started as. So it cannot work when the start as root and drop privileges mechanism is in use (the systemd unit no longer does this, but third-party init-scripts might).

Parameters

  pid_fd | the PID FD

Returns
  the resolved PID if found, DBUS_PID_UNSET otherwise

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

References _dbus_file_get_contents(), _dbus_string_append_printf(), _dbus_string_find(), _dbus_string_free(), _dbus_string_init(), _dbus_string_parse_uint(), dbus_error_free(), DBUS_ERROR_INIT, DBUS_PID_UNSET, DBusError::message, DBusError::name, and NULL.

Referenced by _dbus_credentials_get_pid().

## _dbus_restore_socket_errno()

void _dbus_restore_socket_errno | ( | int | saved_errno | ) |

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

## _dbus_rlimit_free()

void _dbus_rlimit_free | ( | DBusRLimit * | lim | ) |

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

## _dbus_rlimit_raise_fd_limit()

dbus_bool_t _dbus_rlimit_raise_fd_limit | ( | DBusError * | error | ) |

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

## _dbus_rlimit_restore_fd_limit()

dbus_bool_t _dbus_rlimit_restore_fd_limit | ( | DBusRLimit * | saved,
|  | DBusError * | error )

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

## _dbus_rlimit_save_fd_limit()

DBusRLimit * _dbus_rlimit_save_fd_limit | ( | DBusError * | error | ) |

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

## _dbus_save_socket_errno()

int _dbus_save_socket_errno | ( | void |  | ) |

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

## _dbus_send_credentials_socket()

dbus_bool_t _dbus_send_credentials_socket | ( | DBusSocket | 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 2568 of file dbus-sysdeps-unix.c.

References _dbus_assert, _dbus_error_from_errno(), _dbus_strerror_from_errno(), _dbus_string_init_const_len(), _dbus_write_socket(), DBUS_ERROR_IO_ERROR, dbus_set_error(), FALSE, and TRUE.

## _dbus_set_errno_to_zero()

void _dbus_set_errno_to_zero | ( | void |  | ) |

Assign 0 to the global errno variable.

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

Referenced by _dbus_string_parse_int(), _dbus_string_parse_int64(), and _dbus_string_parse_uint().

## _dbus_set_error_with_inet_sockaddr()

void _dbus_set_error_with_inet_sockaddr | ( | DBusError * | error,
|  | const void * | sockaddr_pointer,
|  | size_t | len,
|  | const char * | description,
|  | int | saved_errno )

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

## _dbus_set_socket_nonblocking()

dbus_bool_t _dbus_set_socket_nonblocking | ( | DBusSocket | handle,
|  | DBusError * | error )

Sets a file descriptor to be nonblocking.

Parameters

  fd | the file descriptor.
  error | address of error location.

Returns
  TRUE on success.

Parameters

  handle | the file descriptor.
  error | address of error location.

Returns
  TRUE on success.

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

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

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

## _dbus_set_up_transient_session_servicedirs()

dbus_bool_t _dbus_set_up_transient_session_servicedirs | ( | DBusList ** | dirs,
|  | DBusError * | error )

Returns the standard directories for a session bus to look for transient service activation files.

Parameters

  dirs | the directory list we are returning

Returns
  FALSE on error

On Windows, there are none.

Parameters

  dirs | the directory list we are returning

Returns
  TRUE

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

References _dbus_getenv(), _dbus_list_append(), _dbus_string_append(), _dbus_string_append_printf(), _dbus_string_free(), _dbus_string_init(), _dbus_string_steal_data(), dbus_free(), FALSE, NULL, and TRUE.

## _dbus_sleep_milliseconds()

DBUS_PRIVATE_EXPORT void _dbus_sleep_milliseconds | ( | int | milliseconds | ) |

Sleeps the given number of milliseconds.

Parameters

  milliseconds | number of milliseconds

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

Referenced by _dbus_abort().

## _dbus_socket_can_pass_unix_fd()

dbus_bool_t _dbus_socket_can_pass_unix_fd | ( | DBusSocket | fd | ) |

Checks whether file descriptors may be passed via the socket.

Parameters

  fd | the socket

Returns
  TRUE when fd passing over this socket is supported

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

References _DBUS_ZERO, and FALSE.

Referenced by _dbus_transport_new_for_socket().

## _dbus_socketpair()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_socketpair | ( | DBusSocket * | fd1,
|  | DBusSocket * | fd2,
|  | dbus_bool_t | blocking,
|  | DBusError * | error )

Creates pair of connect sockets (as in socketpair()).

Sets both ends of the pair nonblocking.

Marks both file descriptors as close-on-exec

Parameters

  fd1 | return location for one end
  fd2 | return location for the other end
  blocking | TRUE if pair should be blocking
  error | error return

Returns
  FALSE on failure (if error is set)

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

References _dbus_close(), _dbus_error_from_errno(), _dbus_fd_set_close_on_exec(), _dbus_strerror_from_errno(), _dbus_warn(), _DBUS_ZERO, DBUS_ERROR_FAILED, dbus_set_error(), FALSE, NULL, and TRUE.

Referenced by _dbus_spawn_async_with_babysitter().

## _dbus_split_paths_and_append()

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_split_paths_and_append | ( | DBusString * | dirs,
|  | const char * | suffix,
|  | DBusList ** | dir_list )

Split paths into a list of char strings.

Parameters

  dirs | string with pathes
  suffix | string concated to each path in dirs
  dir_list | contains a list of splitted pathes return TRUE is pathes could be splittes,FALSE in oom case

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

References _dbus_concat_dir_and_file(), _dbus_list_append(), _dbus_list_clear_full(), _dbus_string_chop_white(), _dbus_string_copy_data(), _dbus_string_copy_len(), _dbus_string_find(), _dbus_string_free(), _dbus_string_init(), _dbus_string_init_const(), dbus_free(), FALSE, and TRUE.

Referenced by _dbus_get_local_system_servicedirs(), _dbus_get_standard_session_servicedirs(), and _dbus_get_standard_system_servicedirs().

## _dbus_stat()

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 593 of file dbus-sysdeps-util-unix.c.

References _dbus_error_from_errno(), DBusStat::atime, DBusStat::ctime, DBUS_GID_UNSET, DBUS_INT64_CONSTANT, dbus_int64_t, dbus_set_error(), DBUS_UID_UNSET, FALSE, DBusStat::gid, DBusStat::mode, DBusStat::mtime, DBusStat::nlink, NULL, DBusStat::size, TRUE, and DBusStat::uid.

Referenced by _dbus_is_console_user().

## _dbus_strerror_from_errno()

DBUS_PRIVATE_EXPORT const char * _dbus_strerror_from_errno | ( | void |  | ) |

Get error message from errno.

Returns
  _dbus_strerror(errno)

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

Referenced by _dbus_close_socket(), _dbus_create_directory(), _dbus_delete_file(), _dbus_ensure_directory(), _dbus_send_credentials_socket(), _dbus_set_socket_nonblocking(), _dbus_socketpair(), _dbus_write_socket(), and _dbus_write_socket_two().

## _dbus_string_get_dirname()

dbus_bool_t _dbus_string_get_dirname | ( | const DBusString * | filename,
|  | DBusString * | dirname )

Get the directory name from a complete filename.

Parameters

  filename | the filename
  dirname | string to append directory name to

Returns
  FALSE if no memory

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

References _dbus_assert, _dbus_string_append(), _dbus_string_copy_len(), _dbus_string_find_byte_backward(), and NULL.

## _dbus_threads_init_platform_specific()

dbus_bool_t _dbus_threads_init_platform_specific | ( | void |  | ) |

Initialize threads as in dbus_threads_init_default(), appropriately for the platform.

Returns
  FALSE if no memory

Definition at line 281 of file dbus-sysdeps-pthread.c.

References _dbus_check_setuid(), FALSE, and TRUE.

Referenced by dbus_threads_init().

## _dbus_threads_lock_platform_specific()

void _dbus_threads_lock_platform_specific | ( | void |  | ) |

Lock a static mutex used to protect _dbus_threads_init_platform_specific().

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

References _dbus_assert.

Referenced by dbus_shutdown(), and dbus_threads_init().

## _dbus_threads_unlock_platform_specific()

void _dbus_threads_unlock_platform_specific | ( | void |  | ) |

Undo _dbus_threads_lock_platform_specific().

Definition at line 302 of file dbus-sysdeps-pthread.c.

References _dbus_assert.

Referenced by dbus_shutdown(), and dbus_threads_init().

## _dbus_unix_groups_from_uid()

dbus_bool_t _dbus_unix_groups_from_uid | ( | dbus_uid_t | uid,
|  | dbus_gid_t ** | group_ids,
|  | int * | n_group_ids,
|  | DBusError * | error )

Gets all groups corresponding to the given UNIX user ID.

On UNIX, just calls _dbus_groups_from_uid(). On Windows, should always fail since we don't know any UNIX groups.

Parameters

  uid | the UID
  group_ids | return location for array of group IDs
  n_group_ids | return location for length of returned array
  error | error location

Returns
  TRUE if the UID existed and we got some credentials

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

References _dbus_groups_from_uid(), and FALSE.

## _dbus_unix_user_is_at_console()

dbus_bool_t _dbus_unix_user_is_at_console | ( | dbus_uid_t | uid,
|  | DBusError * | error )

Checks to see if the UNIX user ID is at the console.

Should always fail on Windows (set the error to DBUS_ERROR_NOT_SUPPORTED).

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 971 of file dbus-sysdeps-util-unix.c.

References _dbus_is_console_user(), and FALSE.

## _dbus_unix_user_is_process_owner()

dbus_bool_t _dbus_unix_user_is_process_owner | ( | dbus_uid_t | uid | ) |

Checks to see if the UNIX user ID matches the UID of the process.

Should always return FALSE on Windows.

Parameters

  uid | the UNIX user ID

Returns
  TRUE if this uid owns the process.

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

References _dbus_geteuid(), and FALSE.

## _dbus_verify_daemon_user()

dbus_bool_t _dbus_verify_daemon_user | ( | const char * | user | ) |

Verify that after the fork we can successfully change to this user.

Parameters

  user | the username given in the daemon configuration

Returns
  TRUE if username is valid

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

References _dbus_get_user_id_and_primary_group(), _dbus_string_init_const(), NULL, and TRUE.

## _dbus_windows_user_is_process_owner()

dbus_bool_t _dbus_windows_user_is_process_owner | ( | const char * | windows_sid | ) |

Checks to see if the Windows user SID matches the owner of the process.

Should always return FALSE on UNIX.

Parameters

  windows_sid | the Windows user SID

Returns
  TRUE if this user owns the process.

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

References FALSE, and TRUE.

## _dbus_write_pid_to_file_and_pipe()

dbus_bool_t _dbus_write_pid_to_file_and_pipe | ( | const DBusString * | pidfile,
|  | DBusPipe * | print_pid_pipe,
|  | dbus_pid_t | pid_to_write,
|  | DBusError * | error )

Writes the given pid_to_write to a pidfile (if non-NULL) and/or to a pipe (if non-NULL).

Does nothing if pidfile and print_pid_pipe are both NULL.

Parameters

  pidfile | the file to write to or NULL
  print_pid_pipe | the pipe to write to or NULL
  pid_to_write | the pid to write out
  error | error on failure

Returns
  FALSE if error is set

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

References _dbus_string_append_printf(), _dbus_string_free(), _dbus_string_init(), DBUS_ERROR_FAILED, dbus_error_is_set(), DBUS_PID_FORMAT, dbus_set_error(), FALSE, NULL, and TRUE.

Referenced by _dbus_become_daemon().

## _dbus_write_socket()

DBUS_PRIVATE_EXPORT int _dbus_write_socket | ( | DBusSocket | fd,
|  | const DBusString * | buffer,
|  | int | start,
|  | int | len )

Like _dbus_write(), but only supports sockets and is thus available on Windows.

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

Like _dbus_write(), but only supports sockets and is thus available on Windows.

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 356 of file dbus-sysdeps-unix.c.

References _dbus_strerror_from_errno(), _dbus_verbose_bytes_of_string(), and _dbus_write().

Referenced by _dbus_send_credentials_socket().

## _dbus_write_socket_two()

int _dbus_write_socket_two | ( | DBusSocket | fd,
|  | const DBusString * | buffer1,
|  | int | start1,
|  | int | len1,
|  | const DBusString * | buffer2,
|  | int | start2,
|  | int | len2 )

Like _dbus_write_two() but only works on sockets and is thus available on Windows.

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

Like _dbus_write_two() but only works on sockets and is thus available on Windows.

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 694 of file dbus-sysdeps-unix.c.

References _dbus_assert, _dbus_strerror_from_errno(), _dbus_write_two(), _DBUS_ZERO, and NULL.

## _dbus_write_socket_with_unix_fds()

DBUS_PRIVATE_EXPORT int _dbus_write_socket_with_unix_fds | ( | DBusSocket | fd,
|  | const DBusString * | buffer,
|  | int | start,
|  | int | len,
|  | const int * | fds,
|  | int | n_fds )

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

## _dbus_write_socket_with_unix_fds_two()

int _dbus_write_socket_with_unix_fds_two | ( | DBusSocket | fd,
|  | const DBusString * | buffer1,
|  | int | start1,
|  | int | len1,
|  | const DBusString * | buffer2,
|  | int | start2,
|  | int | len2,
|  | const int * | fds,
|  | int | n_fds )

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