D-Bus 1.12.2
dbus-sysdeps.h
1/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2/* dbus-sysdeps.h Wrappers around system/libc features (internal to D-Bus implementation)
3 *
4 * Copyright (C) 2002, 2003 Red Hat, Inc.
5 * Copyright (C) 2003 CodeFactory AB
6 *
7 * Licensed under the Academic Free License version 2.1
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 *
23 */
24
25#ifndef DBUS_SYSDEPS_H
26#define DBUS_SYSDEPS_H
27
28#ifndef VERSION
29#warning Please include config.h before dbus-sysdeps.h
30#include "config.h"
31#endif
32
33#ifdef HAVE_STDINT_H
34#include <stdint.h>
35#endif
36
37#ifdef HAVE_INTTYPES_H
38#include <inttypes.h>
39#endif
40
41#include <dbus/dbus-errors.h>
42#include <dbus/dbus-file.h>
43#include <dbus/dbus-string.h>
44
45/* this is perhaps bogus, but strcmp() etc. are faster if we use the
46 * stuff straight out of string.h, so have this here for now.
47 */
48#include <string.h>
49#include <stdarg.h>
50
51/* AIX sys/poll.h does #define events reqevents, and other
52 * wonderousness, so must include sys/poll before declaring
53 * DBusPollFD
54 */
55#ifdef HAVE_POLL
56#include <sys/poll.h>
57#endif
58
59#ifdef DBUS_WINCE
60/* Windows CE lacks some system functions (such as errno and clock).
61 We bring them in here. */
62#include "dbus-sysdeps-wince-glue.h"
63#endif
64
65#ifdef DBUS_WIN
66#include <ws2tcpip.h>
67#endif
68
70
71#ifdef DBUS_WIN
72#define _DBUS_PATH_SEPARATOR ";"
73#else
74#define _DBUS_PATH_SEPARATOR ":"
75#endif
76
77/* Forward declarations */
78
79
81typedef struct DBusList DBusList;
82
84typedef struct DBusCredentials DBusCredentials;
85
87typedef struct DBusPipe DBusPipe;
88
95DBUS_PRIVATE_EXPORT
96void _dbus_abort (void) _DBUS_GNUC_NORETURN;
97
99DBUS_PRIVATE_EXPORT
100const char* _dbus_getenv (const char *varname);
101DBUS_PRIVATE_EXPORT
103char ** _dbus_get_environment (void);
104
106typedef unsigned long dbus_pid_t;
108typedef unsigned long dbus_uid_t;
110typedef unsigned long dbus_gid_t;
111
113#define DBUS_PID_UNSET ((dbus_pid_t) -1)
115#define DBUS_UID_UNSET ((dbus_uid_t) -1)
117#define DBUS_GID_UNSET ((dbus_gid_t) -1)
118
120#define DBUS_PID_FORMAT "%lu"
122#define DBUS_UID_FORMAT "%lu"
124#define DBUS_GID_FORMAT "%lu"
125
129#ifdef DBUS_WIN
130
131typedef struct { SOCKET sock; } DBusSocket;
132# define DBUS_SOCKET_FORMAT "Iu"
133# define DBUS_SOCKET_INIT { INVALID_SOCKET }
134
135static inline SOCKET
136_dbus_socket_printable (DBusSocket s) { return s.sock; }
137
138static inline dbus_bool_t
139_dbus_socket_is_valid (DBusSocket s) { return s.sock != INVALID_SOCKET; }
140
141static inline void
142_dbus_socket_invalidate (DBusSocket *s) { s->sock = INVALID_SOCKET; }
143
144static inline int
145_dbus_socket_get_int (DBusSocket s) { return (int)s.sock; }
146
147#else /* not DBUS_WIN */
148
149typedef struct { int fd; } DBusSocket;
150# define DBUS_SOCKET_FORMAT "d"
151# define DBUS_SOCKET_INIT { -1 }
152
153static inline int
154_dbus_socket_printable (DBusSocket s) { return s.fd; }
155
156static inline dbus_bool_t
157_dbus_socket_is_valid (DBusSocket s) { return s.fd >= 0; }
158
159static inline void
160_dbus_socket_invalidate (DBusSocket *s) { s->fd = -1; }
161
162static inline int
163_dbus_socket_get_int (DBusSocket s) { return s.fd; }
164
165#endif /* not DBUS_WIN */
166
167static inline DBusSocket
168_dbus_socket_get_invalid (void)
169{
170 DBusSocket s = DBUS_SOCKET_INIT;
171
172 return s;
173}
174
176 DBusError *error);
177
178DBUS_PRIVATE_EXPORT
180 DBusError *error);
181DBUS_PRIVATE_EXPORT
183 DBusString *buffer,
184 int count);
185DBUS_PRIVATE_EXPORT
187 const DBusString *buffer,
188 int start,
189 int len);
191 const DBusString *buffer1,
192 int start1,
193 int len1,
194 const DBusString *buffer2,
195 int start2,
196 int len2);
197
199 DBusString *buffer,
200 int count,
201 int *fds,
202 unsigned int *n_fds);
203DBUS_PRIVATE_EXPORT
204int _dbus_write_socket_with_unix_fds (DBusSocket fd,
205 const DBusString *buffer,
206 int start,
207 int len,
208 const int *fds,
209 int n_fds);
210int _dbus_write_socket_with_unix_fds_two (DBusSocket fd,
211 const DBusString *buffer1,
212 int start1,
213 int len1,
214 const DBusString *buffer2,
215 int start2,
216 int len2,
217 const int *fds,
218 int n_fds);
219
220DBusSocket _dbus_connect_tcp_socket (const char *host,
221 const char *port,
222 const char *family,
223 DBusError *error);
224DBusSocket _dbus_connect_tcp_socket_with_nonce (const char *host,
225 const char *port,
226 const char *family,
227 const char *noncefile,
228 DBusError *error);
229int _dbus_listen_tcp_socket (const char *host,
230 const char *port,
231 const char *family,
232 DBusString *retport,
233 DBusSocket **fds_p,
234 DBusError *error);
236
238 DBusCredentials *credentials,
239 DBusError *error);
241 DBusError *error);
242
244 const DBusString *username);
246DBUS_PRIVATE_EXPORT
248
250 dbus_uid_t *uid_p);
252 dbus_gid_t *gid_p);
254 dbus_gid_t **group_ids,
255 int *n_group_ids);
257 DBusError *error);
259dbus_bool_t _dbus_windows_user_is_process_owner (const char *windows_sid);
260
262 DBusCredentials *credentials);
263
264dbus_bool_t _dbus_daemon_is_session_bus_address_published (const char *scope);
265
266dbus_bool_t _dbus_daemon_publish_session_bus_address (const char* address, const char* shm_name);
267
268void _dbus_daemon_unpublish_session_bus_address (void);
269
271
275typedef struct DBusAtomic DBusAtomic;
276
281{
282#ifdef DBUS_WIN
283 volatile long value;
284#else
286#endif
287};
288
289DBUS_PRIVATE_EXPORT
291DBUS_PRIVATE_EXPORT
293DBUS_PRIVATE_EXPORT
295
296#ifdef DBUS_WIN
297
298/* On Windows, you can only poll sockets. We emulate Unix poll() using
299 * select(), so it doesn't matter what precise type we put in DBusPollFD;
300 * use DBusSocket so that the compiler can check we are doing it right.
301 */
302typedef DBusSocket DBusPollable;
303# define DBUS_POLLABLE_FORMAT "Iu"
304
305static inline DBusPollable
306_dbus_socket_get_pollable (DBusSocket s) { return s; }
307
308static inline SOCKET
309_dbus_pollable_printable (DBusPollable p) { return p.sock; }
310
311static inline dbus_bool_t
312_dbus_pollable_is_valid (DBusPollable p) { return _dbus_socket_is_valid (p); }
313
314static inline void
315_dbus_pollable_invalidate (DBusPollable *p) { _dbus_socket_invalidate (p); }
316
317static inline dbus_bool_t
318_dbus_pollable_equals (DBusPollable a, DBusPollable b) { return a.sock == b.sock; }
319
320#else /* !DBUS_WIN */
321
322/* On Unix, you can poll sockets, pipes, etc., and we must put exactly
323 * "int" in DBusPollFD because we're relying on its layout exactly matching
324 * struct pollfd. (This is silly, and one day we should use a better
325 * abstraction.)
326 */
327typedef int DBusPollable;
328# define DBUS_POLLABLE_FORMAT "d"
329
330static inline DBusPollable
331_dbus_socket_get_pollable (DBusSocket s) { return s.fd; }
332
333static inline int
334_dbus_pollable_printable (DBusPollable p) { return p; }
335
336static inline dbus_bool_t
337_dbus_pollable_is_valid (DBusPollable p) { return p >= 0; }
338
339static inline void
340_dbus_pollable_invalidate (DBusPollable *p) { *p = -1; }
341
342static inline dbus_bool_t
343_dbus_pollable_equals (DBusPollable a, DBusPollable b) { return a == b; }
344
345#endif /* !DBUS_WIN */
346
347#if defined(HAVE_POLL) && !defined(BROKEN_POLL)
352typedef struct pollfd DBusPollFD;
353
355#define _DBUS_POLLIN POLLIN
357#define _DBUS_POLLPRI POLLPRI
359#define _DBUS_POLLOUT POLLOUT
361#define _DBUS_POLLERR POLLERR
363#define _DBUS_POLLHUP POLLHUP
365#define _DBUS_POLLNVAL POLLNVAL
366#else
367/* Emulate poll() via select(). Because we aren't really going to call
368 * poll(), any similarly-shaped struct is acceptable, and any power of 2
369 * will do for the events/revents; these values happen to match Linux
370 * and *BSD. */
371typedef struct
372{
373 DBusPollable fd;
374 short events;
375 short revents;
376} DBusPollFD;
377
379#define _DBUS_POLLIN 0x0001
381#define _DBUS_POLLPRI 0x0002
383#define _DBUS_POLLOUT 0x0004
385#define _DBUS_POLLERR 0x0008
387#define _DBUS_POLLHUP 0x0010
389#define _DBUS_POLLNVAL 0x0020
390#endif
391
392DBUS_PRIVATE_EXPORT
393int _dbus_poll (DBusPollFD *fds,
394 int n_fds,
395 int timeout_milliseconds);
396
397DBUS_PRIVATE_EXPORT
398void _dbus_sleep_milliseconds (int milliseconds);
399
400DBUS_PRIVATE_EXPORT
401void _dbus_get_monotonic_time (long *tv_sec,
402 long *tv_usec);
403
404DBUS_PRIVATE_EXPORT
405void _dbus_get_real_time (long *tv_sec,
406 long *tv_usec);
407
411DBUS_PRIVATE_EXPORT
413 DBusError *error);
414DBUS_PRIVATE_EXPORT
416 DBusError *error);
417DBUS_PRIVATE_EXPORT
419 DBusError *error);
420
421DBUS_PRIVATE_EXPORT
423 const DBusString *next_component);
425 DBusString *dirname);
426DBUS_PRIVATE_EXPORT
428
432 DBusError *error);
433
436
439
441 DBusError *error);
443 DBusString *filename,
444 DBusError *error);
446
448 DBusError *error);
449
450DBUS_PRIVATE_EXPORT
451const char* _dbus_get_tmpdir (void);
452
456_DBUS_GNUC_WARN_UNUSED_RESULT
458 int n_bytes,
459 DBusError *error);
461 int n_bytes,
462 DBusError *error);
463DBUS_PRIVATE_EXPORT
465 int n_bytes,
466 DBusError *error);
467
468DBUS_PRIVATE_EXPORT
469const char* _dbus_error_from_errno (int error_number);
470DBUS_PRIVATE_EXPORT
471const char* _dbus_error_from_system_errno (void);
472
473int _dbus_save_socket_errno (void);
474void _dbus_restore_socket_errno (int saved_errno);
475void _dbus_set_errno_to_zero (void);
481DBUS_PRIVATE_EXPORT
482const char* _dbus_strerror_from_errno (void);
483
484void _dbus_disable_sigpipe (void);
485
486DBUS_PRIVATE_EXPORT
487void _dbus_exit (int code) _DBUS_GNUC_NORETURN;
488
489DBUS_PRIVATE_EXPORT
490int _dbus_printf_string_upper_bound (const char *format,
491 va_list args) _DBUS_GNUC_PRINTF (1, 0);
492
493#ifdef DBUS_ENABLE_VERBOSE_MODE
494DBUS_PRIVATE_EXPORT
495void _dbus_print_thread (void);
496#endif
497
501typedef struct
502{
503 unsigned long mode;
504 unsigned long nlink;
507 unsigned long size;
508 unsigned long atime;
509 unsigned long mtime;
510 unsigned long ctime;
511} DBusStat;
512
513dbus_bool_t _dbus_stat (const DBusString *filename,
514 DBusStat *statbuf,
515 DBusError *error);
516DBUS_PRIVATE_EXPORT
518 DBusSocket *fd2,
519 dbus_bool_t blocking,
520 DBusError *error);
521
522DBUS_PRIVATE_EXPORT
523void _dbus_print_backtrace (void);
524
526 DBusPipe *print_pid_pipe,
527 DBusError *error,
528 dbus_bool_t keep_umask);
529
530dbus_bool_t _dbus_verify_daemon_user (const char *user);
532 DBusError *error);
533
535 DBusPipe *print_pid_pipe,
536 dbus_pid_t pid_to_write,
537 DBusError *error);
538
539dbus_bool_t _dbus_command_for_pid (unsigned long pid,
540 DBusString *str,
541 int max_len,
542 DBusError *error);
543
544dbus_bool_t _dbus_user_at_console (const char *username,
545 DBusError *error);
546
547typedef enum {
548 DBUS_LOG_FLAGS_STDERR = (1 << 0),
549 DBUS_LOG_FLAGS_SYSTEM_LOG = (1 << 1)
550} DBusLogFlags;
551
552DBUS_PRIVATE_EXPORT
553void _dbus_init_system_log (const char *tag,
554 DBusLogFlags flags);
555
556typedef enum {
557 DBUS_SYSTEM_LOG_INFO,
558 DBUS_SYSTEM_LOG_WARNING,
559 DBUS_SYSTEM_LOG_SECURITY,
560 DBUS_SYSTEM_LOG_ERROR
561} DBusSystemLogSeverity;
562
563DBUS_PRIVATE_EXPORT
564void _dbus_log (DBusSystemLogSeverity severity,
565 const char *msg,
566 ...) _DBUS_GNUC_PRINTF (2, 3);
567DBUS_PRIVATE_EXPORT
568void _dbus_logv (DBusSystemLogSeverity severity,
569 const char *msg,
570 va_list args) _DBUS_GNUC_PRINTF (2, 0);
571
572/* Define DBUS_VA_COPY() to do the right thing for copying va_list variables.
573 * config.h may have already defined DBUS_VA_COPY as va_copy or __va_copy.
574 */
575#if !defined (DBUS_VA_COPY)
576# if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))
577# define DBUS_VA_COPY(ap1, ap2) (*(ap1) = *(ap2))
578# elif defined (DBUS_VA_COPY_AS_ARRAY)
579# define DBUS_VA_COPY(ap1, ap2) memcpy ((ap1), (ap2), sizeof (va_list))
580# else /* va_list is a pointer */
581# define DBUS_VA_COPY(ap1, ap2) ((ap1) = (ap2))
582# endif /* va_list is a pointer */
583#endif /* !DBUS_VA_COPY */
584
585
590#define _DBUS_BYTE_OF_PRIMITIVE(p, i) \
591 (((const char*)&(p))[(i)])
597#define _DBUS_DOUBLES_BITWISE_EQUAL(a, b) \
598 (_DBUS_BYTE_OF_PRIMITIVE (a, 0) == _DBUS_BYTE_OF_PRIMITIVE (b, 0) && \
599 _DBUS_BYTE_OF_PRIMITIVE (a, 1) == _DBUS_BYTE_OF_PRIMITIVE (b, 1) && \
600 _DBUS_BYTE_OF_PRIMITIVE (a, 2) == _DBUS_BYTE_OF_PRIMITIVE (b, 2) && \
601 _DBUS_BYTE_OF_PRIMITIVE (a, 3) == _DBUS_BYTE_OF_PRIMITIVE (b, 3) && \
602 _DBUS_BYTE_OF_PRIMITIVE (a, 4) == _DBUS_BYTE_OF_PRIMITIVE (b, 4) && \
603 _DBUS_BYTE_OF_PRIMITIVE (a, 5) == _DBUS_BYTE_OF_PRIMITIVE (b, 5) && \
604 _DBUS_BYTE_OF_PRIMITIVE (a, 6) == _DBUS_BYTE_OF_PRIMITIVE (b, 6) && \
605 _DBUS_BYTE_OF_PRIMITIVE (a, 7) == _DBUS_BYTE_OF_PRIMITIVE (b, 7))
606
608 DBusString *address,
609 DBusError *error);
610
612 DBusString *address,
613 DBusError *error);
614
618typedef union DBusGUID DBusGUID;
619
620DBUS_PRIVATE_EXPORT
622 dbus_bool_t create_if_not_found,
623 DBusError *error);
624
631
636
641
642DBUS_PRIVATE_EXPORT
644 const char *suffix,
645 DBusList **dir_list);
646
647unsigned long _dbus_pid_for_log (void);
648
649/* FIXME move back to dbus-sysdeps-unix.h probably -
650 * the PID file handling just needs a little more abstraction
651 * in the bus daemon first.
652 */
653DBUS_PRIVATE_EXPORT
655
656DBUS_PRIVATE_EXPORT
658
659DBUS_PRIVATE_EXPORT
660void _dbus_flush_caches (void);
661
663
664/* Do not set this too high: it is a denial-of-service risk.
665 * See <https://bugs.freedesktop.org/show_bug.cgi?id=82820>
666 *
667 * (This needs to be in the non-Unix-specific header so that
668 * the config-parser can use it.)
669 */
670#define DBUS_DEFAULT_MESSAGE_UNIX_FDS 16
671
672typedef struct DBusRLimit DBusRLimit;
673
674DBusRLimit *_dbus_rlimit_save_fd_limit (DBusError *error);
675dbus_bool_t _dbus_rlimit_raise_fd_limit_if_privileged (unsigned int desired,
676 DBusError *error);
677dbus_bool_t _dbus_rlimit_restore_fd_limit (DBusRLimit *saved,
678 DBusError *error);
679void _dbus_rlimit_free (DBusRLimit *lim);
680
684
685
686#ifdef DBUS_WIN
687#include "dbus-sysdeps-win.h"
688#endif
689
690#endif /* DBUS_SYSDEPS_H */
#define DBUS_BEGIN_DECLS
Macro used prior to declaring functions in the D-Bus header files.
Definition dbus-macros.h:34
#define DBUS_END_DECLS
Macro used after declaring functions in the D-Bus header files.
Definition dbus-macros.h:35
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_stat(const DBusString *filename, DBusStat *statbuf, DBusError *error)
stat() wrapper.
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_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_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_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).
void _dbus_directory_close(DBusDirIter *iter)
Closes a directory iteration.
unsigned long dbus_uid_t
A user ID.
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)
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 fo...
dbus_bool_t _dbus_get_session_config_file(DBusString *str)
Get the absolute path of the session.conf file.
dbus_bool_t _dbus_clearenv(void)
Wrapper for clearenv().
unsigned long dbus_pid_t
A process ID.
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 void _dbus_exit(int code) _DBUS_GNUC_NORETURN
Exit the process, returning the given value.
dbus_bool_t _dbus_socket_can_pass_unix_fd(DBusSocket fd)
Checks whether file descriptors may be passed via the 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.
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()).
unsigned long dbus_gid_t
A group ID.
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_bool_t _dbus_user_at_console(const char *username, DBusError *error)
Checks if user is at the console.
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_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 ret...
DBusDirIter * _dbus_directory_open(const DBusString *filename, DBusError *error)
Open a directory to iterate over.
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_GNUC_WARN_UNUSED_RESULT dbus_bool_t _dbus_generate_random_bytes_buffer(char *buffer, int n_bytes, DBusError *error)
Random numbers.
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.
char ** _dbus_get_environment(void)
Gets a NULL-terminated list of key=value pairs from the environment.
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_PRIVATE_EXPORT dbus_int32_t _dbus_atomic_dec(DBusAtomic *atomic)
Atomically decrement an integer.
dbus_bool_t _dbus_verify_daemon_user(const char *user)
Verify that after the fork we can successfully change to this user.
DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_close_socket(DBusSocket fd, DBusError *error)
Closes a 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 avai...
const char * _dbus_getenv(const char *varname)
Wrapper for getenv().
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_PRIVATE_EXPORT dbus_pid_t _dbus_getpid(void)
Gets our process ID.
DBUS_PRIVATE_EXPORT dbus_int32_t _dbus_atomic_get(DBusAtomic *atomic)
Atomically get the value of an integer.
dbus_bool_t _dbus_set_socket_nonblocking(DBusSocket fd, DBusError *error)
Sets a file descriptor to be nonblocking.
DBUS_PRIVATE_EXPORT const char * _dbus_error_from_system_errno(void)
Converts the current system errno value into a DBusError name.
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.
void _dbus_threads_lock_platform_specific(void)
Lock a static mutex used to protect _dbus_threads_init_platform_specific().
void _dbus_disable_sigpipe(void)
signal (SIGPIPE, SIG_IGN);
dbus_bool_t _dbus_check_setuid(void)
NOTE: If you modify this function, please also consider making the corresponding change in GLib.
DBUS_PRIVATE_EXPORT void _dbus_sleep_milliseconds(int milliseconds)
Sleeps the given number of milliseconds.
dbus_bool_t _dbus_unix_groups_from_uid(dbus_uid_t uid, dbus_gid_t **group_ids, int *n_group_ids)
Gets all groups corresponding to the given UNIX user ID.
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_unix_user_is_process_owner(dbus_uid_t uid)
Checks to see if the UNIX user ID matches the UID of the process.
DBUS_PRIVATE_EXPORT const char * _dbus_strerror_from_errno(void)
Get error message from errno.
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 void _dbus_log(DBusSystemLogSeverity severity, const char *msg,...)
Log a message to the system log file (e.g.
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_parse_unix_group_from_config(const DBusString *groupname, dbus_gid_t *gid_p)
Parse a UNIX group from the bus config file.
void _dbus_threads_unlock_platform_specific(void)
Undo _dbus_threads_lock_platform_specific().
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_PRIVATE_EXPORT dbus_uid_t _dbus_getuid(void)
Gets our UID.
dbus_bool_t _dbus_credentials_add_from_current_process(DBusCredentials *credentials)
Adds the credentials of the current process to the passed-in credentials object.
DBUS_PRIVATE_EXPORT dbus_int32_t _dbus_atomic_inc(DBusAtomic *atomic)
Atomically increments an integer.
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 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_PRIVATE_EXPORT void _dbus_get_monotonic_time(long *tv_sec, long *tv_usec)
Get current time, as in gettimeofday().
DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_delete_directory(const DBusString *filename, DBusError *error)
Removes a directory; Directory must be empty.
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 void _dbus_get_real_time(long *tv_sec, long *tv_usec)
Get current time, as in gettimeofday().
void _dbus_abort(void)
Aborts the program with SIGABRT (dumping core).
dbus_bool_t _dbus_directory_get_next_file(DBusDirIter *iter, DBusString *filename, DBusError *error)
Get next file in the directory.
DBUS_PRIVATE_EXPORT int _dbus_poll(DBusPollFD *fds, int n_fds, int timeout_milliseconds)
Wrapper for poll().
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 su...
dbus_bool_t _dbus_get_autolaunch_address(const char *scope, DBusString *address, DBusError *error)
Returns the address of a new session bus.
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.
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_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_credentials_add_from_user(DBusCredentials *credentials, const DBusString *username)
Adds the credentials corresponding to the given username.
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_PRIVATE_EXPORT void _dbus_print_backtrace(void)
On GNU libc systems, print a crude backtrace to stderr.
DBUS_PRIVATE_EXPORT void _dbus_init_system_log(const char *tag, DBusLogFlags flags)
Initialize the system log.
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.
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.
DBusSocket _dbus_accept(DBusSocket listen_fd)
Accepts a connection on a listening socket.
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 cur...
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_get_is_errno_eintr(int e)
See if errno is EINTR.
dbus_bool_t _dbus_threads_init_platform_specific(void)
Initialize threads as in dbus_threads_init_default(), appropriately for the platform.
int _dbus_listen_tcp_socket(const char *host, const char *port, const char *family, DBusString *retport, DBusSocket **fds_p, DBusError *error)
Creates a socket and binds it to the given path, then listens on the socket.
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.
void _dbus_set_errno_to_zero(void)
Assign 0 to the global errno variable.
DBUS_PRIVATE_EXPORT const char * _dbus_get_tmpdir(void)
Gets the temporary files directory by inspecting the environment variables TMPDIR,...
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_bool_t _dbus_get_is_errno_enomem(int e)
See if errno is ENOMEM.
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_PRIVATE_EXPORT dbus_bool_t _dbus_create_directory(const DBusString *filename, DBusError *error)
directory interface
int dbus_int32_t
A 32-bit signed integer on all platforms.
dbus_uint32_t dbus_bool_t
A boolean, valid values are TRUE and FALSE.
Definition dbus-types.h:35
An atomic integer safe to increment or decrement from multiple threads.
volatile dbus_int32_t value
Value of the atomic integer.
Internals of directory iterator.
Object representing an exception.
Definition dbus-errors.h:49
A node in a linked list.
Definition dbus-list.h:35
short events
Events to poll for.
short revents
Events that occurred.
DBusPollable fd
File descriptor.
Socket interface.
Portable struct with stat() results.
unsigned long nlink
Number of hard links.
unsigned long size
Size of file.
dbus_uid_t uid
User owning file.
unsigned long mode
File mode.
dbus_gid_t gid
Group owning file.
unsigned long atime
Access time.
unsigned long ctime
Creation time.
unsigned long mtime
Modify time.
A globally unique ID ; we have one for each DBusServer, and also one for each machine with libdbus in...