D-Bus 1.15.4
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 * SPDX-License-Identifier: AFL-2.1 OR GPL-2.0-or-later
8 *
9 * Licensed under the Academic Free License version 2.1
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 *
25 */
26
27#ifndef DBUS_SYSDEPS_H
28#define DBUS_SYSDEPS_H
29
30#ifndef VERSION
31#warning Please include config.h before dbus-sysdeps.h
32#include "config.h"
33#endif
34
35#include <stdint.h>
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#if !defined(BROKEN_POLL) && (defined(__APPLE__) || defined(__INTERIX))
52 /* Following libcurl's example, we blacklist poll() on Darwin
53 * (macOS, iOS, etc.) and Interix due to a history of implementation
54 * issues.
55 * https://github.com/curl/curl/blob/master/m4/curl-functions.m4
56 *
57 * On unspecified older macOS versions, poll() failed if given a
58 * device node to poll.
59 *
60 * On macOS < 10.9, poll() with nfds=0 failed instead of waiting for
61 * the timeout and then succeeding.
62 *
63 * On macOS >= 10.12, poll() with nfds=0 succeeded immediately
64 * instead of waiting for the timeout, resulting in busy-looping.
65 *
66 * On Interix, poll() apparently only works for files in /proc.
67 *
68 * The "legacy" build flavour in our CI machinery defines BROKEN_POLL
69 * on whatever platform is in use (normally Linux) to force use of the
70 * same select()-based poll() emulation that we use for macOS, Interix,
71 * and any platform that lacks a real poll(), so that we can test it
72 * more regularly.
73 */
74# define BROKEN_POLL
75#endif
76
77/* Normally we'd only include this in dbus-sysdeps-unix.c.
78 * However, the member names in DBusPollFD are (deliberately) the same as
79 * in POSIX struct pollfd, and AIX's poll() implementation is known to
80 * do things like "#define events reqevents", which would break that approach.
81 * Defend against that by ensuring that if it's renamed anywhere, it's renamed
82 * everywhere.
83 */
84#ifdef HAVE_POLL
85#include <poll.h>
86#endif
87
88#ifdef DBUS_WINCE
89/* Windows CE lacks some system functions (such as errno and clock).
90 We bring them in here. */
91#include "dbus-sysdeps-wince-glue.h"
92#endif
93
94#ifdef DBUS_WIN
95#include <ws2tcpip.h>
96#endif
97
99
100#ifdef DBUS_WIN
101#define _DBUS_PATH_SEPARATOR ";"
102#else
103#define _DBUS_PATH_SEPARATOR ":"
104#endif
105
106/* Forward declarations */
107
108
110typedef struct DBusList DBusList;
111
113typedef struct DBusCredentials DBusCredentials;
114
116typedef struct DBusPipe DBusPipe;
117
124DBUS_PRIVATE_EXPORT
125void _dbus_abort (void) _DBUS_GNUC_NORETURN;
126
128DBUS_PRIVATE_EXPORT
129const char* _dbus_getenv (const char *varname);
130DBUS_PRIVATE_EXPORT
132char ** _dbus_get_environment (void);
133
135typedef unsigned long dbus_pid_t;
137typedef unsigned long dbus_uid_t;
139typedef unsigned long dbus_gid_t;
140
142#define DBUS_PID_UNSET ((dbus_pid_t) -1)
144#define DBUS_UID_UNSET ((dbus_uid_t) -1)
146#define DBUS_GID_UNSET ((dbus_gid_t) -1)
147
149#define DBUS_PID_FORMAT "%lu"
151#define DBUS_UID_FORMAT "%lu"
153#define DBUS_GID_FORMAT "%lu"
154
158#ifdef DBUS_WIN
159
160typedef struct { SOCKET sock; } DBusSocket;
161# define DBUS_SOCKET_FORMAT "Iu"
162# define DBUS_SOCKET_INIT { INVALID_SOCKET }
163
164_DBUS_WARN_UNUSED_RESULT
165static inline SOCKET
166_dbus_socket_printable (DBusSocket s) { return s.sock; }
167
168_DBUS_WARN_UNUSED_RESULT
169static inline dbus_bool_t
170_dbus_socket_is_valid (DBusSocket s) { return s.sock != INVALID_SOCKET; }
171
172static inline void
173_dbus_socket_invalidate (DBusSocket *s) { s->sock = INVALID_SOCKET; }
174
175_DBUS_WARN_UNUSED_RESULT
176static inline int
177_dbus_socket_get_int (DBusSocket s) { return (int)s.sock; }
178
179#else /* not DBUS_WIN */
180
181typedef struct { int fd; } DBusSocket;
182# define DBUS_SOCKET_FORMAT "d"
183# define DBUS_SOCKET_INIT { -1 }
184
185_DBUS_WARN_UNUSED_RESULT
186static inline int
187_dbus_socket_printable (DBusSocket s) { return s.fd; }
188
189_DBUS_WARN_UNUSED_RESULT
190static inline dbus_bool_t
191_dbus_socket_is_valid (DBusSocket s) { return s.fd >= 0; }
192
193static inline void
194_dbus_socket_invalidate (DBusSocket *s) { s->fd = -1; }
195
196_DBUS_WARN_UNUSED_RESULT
197static inline int
198_dbus_socket_get_int (DBusSocket s) { return s.fd; }
199
200#endif /* not DBUS_WIN */
201
202_DBUS_WARN_UNUSED_RESULT
203static inline DBusSocket
204_dbus_socket_get_invalid (void)
205{
206 DBusSocket s = DBUS_SOCKET_INIT;
207
208 return s;
209}
210
212 DBusError *error);
213
214DBUS_PRIVATE_EXPORT
216 DBusError *error);
217DBUS_PRIVATE_EXPORT
219 DBusString *buffer,
220 int count);
221DBUS_PRIVATE_EXPORT
223 const DBusString *buffer,
224 int start,
225 int len);
227 const DBusString *buffer1,
228 int start1,
229 int len1,
230 const DBusString *buffer2,
231 int start2,
232 int len2);
233
235 DBusString *buffer,
236 int count,
237 int *fds,
238 unsigned int *n_fds);
239DBUS_PRIVATE_EXPORT
240int _dbus_write_socket_with_unix_fds (DBusSocket fd,
241 const DBusString *buffer,
242 int start,
243 int len,
244 const int *fds,
245 int n_fds);
246int _dbus_write_socket_with_unix_fds_two (DBusSocket fd,
247 const DBusString *buffer1,
248 int start1,
249 int len1,
250 const DBusString *buffer2,
251 int start2,
252 int len2,
253 const int *fds,
254 int n_fds);
255
256DBusSocket _dbus_connect_tcp_socket (const char *host,
257 const char *port,
258 const char *family,
259 DBusError *error);
260DBusSocket _dbus_connect_tcp_socket_with_nonce (const char *host,
261 const char *port,
262 const char *family,
263 const char *noncefile,
264 DBusError *error);
265int _dbus_listen_tcp_socket (const char *host,
266 const char *port,
267 const char *family,
268 DBusString *retport,
269 const char **retfamily,
270 DBusSocket **fds_p,
271 DBusError *error);
273
275 DBusCredentials *credentials,
276 DBusError *error);
278 DBusError *error);
279
280typedef enum
281{
282 DBUS_CREDENTIALS_ADD_FLAGS_USER_DATABASE = (1 << 0),
283 DBUS_CREDENTIALS_ADD_FLAGS_NONE = 0
284} DBusCredentialsAddFlags;
285
287 const DBusString *username,
288 DBusCredentialsAddFlags flags,
289 DBusError *error);
290
292DBUS_PRIVATE_EXPORT
294
296 dbus_uid_t *uid_p);
298 dbus_gid_t *gid_p);
300 dbus_gid_t **group_ids,
301 int *n_group_ids);
303 DBusError *error);
305dbus_bool_t _dbus_windows_user_is_process_owner (const char *windows_sid);
306
308 DBusCredentials *credentials);
309
311
313
317typedef struct DBusAtomic DBusAtomic;
318
323{
324#ifdef DBUS_WIN
325 volatile long value;
326#else
328#endif
329};
330
331DBUS_PRIVATE_EXPORT
333DBUS_PRIVATE_EXPORT
335DBUS_PRIVATE_EXPORT
337DBUS_PRIVATE_EXPORT
338void _dbus_atomic_set_zero (DBusAtomic *atomic);
339DBUS_PRIVATE_EXPORT
341
342#ifdef DBUS_WIN
343
344/* On Windows, you can only poll sockets. We emulate Unix poll() using
345 * select(), so it doesn't matter what precise type we put in DBusPollFD;
346 * use DBusSocket so that the compiler can check we are doing it right.
347 */
348typedef DBusSocket DBusPollable;
349# define DBUS_POLLABLE_FORMAT "Iu"
350
351static inline DBusPollable
352_dbus_socket_get_pollable (DBusSocket s) { return s; }
353
354static inline SOCKET
355_dbus_pollable_printable (DBusPollable p) { return p.sock; }
356
357static inline dbus_bool_t
358_dbus_pollable_is_valid (DBusPollable p) { return _dbus_socket_is_valid (p); }
359
360static inline void
361_dbus_pollable_invalidate (DBusPollable *p) { _dbus_socket_invalidate (p); }
362
363static inline dbus_bool_t
364_dbus_pollable_equals (DBusPollable a, DBusPollable b) { return a.sock == b.sock; }
365
366#else /* !DBUS_WIN */
367
368/* On Unix, you can poll sockets, pipes, etc., and we must put exactly
369 * "int" in DBusPollFD because we're relying on its layout exactly matching
370 * struct pollfd. (This is silly, and one day we should use a better
371 * abstraction.)
372 */
373typedef int DBusPollable;
374# define DBUS_POLLABLE_FORMAT "d"
375
376static inline DBusPollable
377_dbus_socket_get_pollable (DBusSocket s) { return s.fd; }
378
379static inline int
380_dbus_pollable_printable (DBusPollable p) { return p; }
381
382static inline dbus_bool_t
383_dbus_pollable_is_valid (DBusPollable p) { return p >= 0; }
384
385static inline void
386_dbus_pollable_invalidate (DBusPollable *p) { *p = -1; }
387
388static inline dbus_bool_t
389_dbus_pollable_equals (DBusPollable a, DBusPollable b) { return a == b; }
390
391#endif /* !DBUS_WIN */
392
393#if defined(HAVE_POLL) && !defined(BROKEN_POLL)
398typedef struct pollfd DBusPollFD;
399
401#define _DBUS_POLLIN POLLIN
403#define _DBUS_POLLPRI POLLPRI
405#define _DBUS_POLLOUT POLLOUT
407#define _DBUS_POLLERR POLLERR
409#define _DBUS_POLLHUP POLLHUP
411#define _DBUS_POLLNVAL POLLNVAL
412#else
413/* Emulate poll() via select(). Because we aren't really going to call
414 * poll(), any similarly-shaped struct is acceptable, and any power of 2
415 * will do for the events/revents; these values happen to match Linux
416 * and *BSD. */
417typedef struct
418{
419 DBusPollable fd;
420 short events;
421 short revents;
422} DBusPollFD;
423
425#define _DBUS_POLLIN 0x0001
427#define _DBUS_POLLPRI 0x0002
429#define _DBUS_POLLOUT 0x0004
431#define _DBUS_POLLERR 0x0008
433#define _DBUS_POLLHUP 0x0010
435#define _DBUS_POLLNVAL 0x0020
436#endif
437
438DBUS_PRIVATE_EXPORT
439int _dbus_poll (DBusPollFD *fds,
440 int n_fds,
441 int timeout_milliseconds);
442
443DBUS_PRIVATE_EXPORT
444void _dbus_sleep_milliseconds (int milliseconds);
445
446DBUS_PRIVATE_EXPORT
447void _dbus_get_monotonic_time (long *tv_sec,
448 long *tv_usec);
449
450DBUS_PRIVATE_EXPORT
451void _dbus_get_real_time (long *tv_sec,
452 long *tv_usec);
453
457DBUS_PRIVATE_EXPORT
459 DBusError *error);
460DBUS_PRIVATE_EXPORT
462 DBusError *error);
463DBUS_PRIVATE_EXPORT
465 DBusError *error);
466
467DBUS_PRIVATE_EXPORT
469 const DBusString *next_component);
471 DBusString *dirname);
472DBUS_PRIVATE_EXPORT
474
478 DBusError *error);
479
482
485
487 DBusError *error);
489 DBusString *filename,
490 DBusError *error);
492
494 DBusError *error);
495
496DBUS_PRIVATE_EXPORT
497const char* _dbus_get_tmpdir (void);
498
502_DBUS_WARN_UNUSED_RESULT
504 int n_bytes,
505 DBusError *error);
507 int n_bytes,
508 DBusError *error);
509DBUS_PRIVATE_EXPORT
511 int n_bytes,
512 DBusError *error);
513
514DBUS_PRIVATE_EXPORT
515const char* _dbus_error_from_errno (int error_number);
516DBUS_PRIVATE_EXPORT
517const char* _dbus_error_from_system_errno (void);
518
519int _dbus_get_low_level_socket_errno (void);
520
521int _dbus_save_socket_errno (void);
522void _dbus_restore_socket_errno (int saved_errno);
523void _dbus_set_errno_to_zero (void);
529DBUS_PRIVATE_EXPORT
530const char* _dbus_strerror_from_errno (void);
531
532void _dbus_disable_sigpipe (void);
533
534DBUS_PRIVATE_EXPORT
535void _dbus_exit (int code) _DBUS_GNUC_NORETURN;
536
537DBUS_PRIVATE_EXPORT
538int _dbus_printf_string_upper_bound (const char *format,
539 va_list args) _DBUS_GNUC_PRINTF (1, 0);
540
541#ifdef DBUS_ENABLE_VERBOSE_MODE
542DBUS_PRIVATE_EXPORT
543void _dbus_print_thread (void);
544#endif
545
549typedef struct
550{
551 unsigned long mode;
552 unsigned long nlink;
555 unsigned long size;
556 unsigned long atime;
557 unsigned long mtime;
558 unsigned long ctime;
559} DBusStat;
560
561dbus_bool_t _dbus_stat (const DBusString *filename,
562 DBusStat *statbuf,
563 DBusError *error);
564
565DBusSocket _dbus_connect_unix_socket (const char *path,
566 dbus_bool_t abstract,
567 DBusError *error);
568DBusSocket _dbus_listen_unix_socket (const char *path,
569 dbus_bool_t abstract,
570 DBusError *error);
571
572DBusSocket _dbus_connect_exec (const char *path,
573 char *const argv[],
574 DBusError *error);
575
576DBUS_PRIVATE_EXPORT
578 DBusSocket *fd2,
579 dbus_bool_t blocking,
580 DBusError *error);
581
582DBUS_PRIVATE_EXPORT
583void _dbus_print_backtrace (void);
584
586 DBusPipe *print_pid_pipe,
587 DBusError *error,
588 dbus_bool_t keep_umask);
589
590dbus_bool_t _dbus_verify_daemon_user (const char *user);
592 DBusError *error);
593
595 DBusPipe *print_pid_pipe,
596 dbus_pid_t pid_to_write,
597 DBusError *error);
598
599dbus_bool_t _dbus_command_for_pid (unsigned long pid,
600 DBusString *str,
601 int max_len,
602 DBusError *error);
603
604typedef enum {
605 DBUS_LOG_FLAGS_STDERR = (1 << 0),
606 DBUS_LOG_FLAGS_SYSTEM_LOG = (1 << 1)
607} DBusLogFlags;
608
609DBUS_PRIVATE_EXPORT
610void _dbus_init_system_log (const char *tag,
611 DBusLogFlags flags);
612
613typedef enum {
614 DBUS_SYSTEM_LOG_INFO,
615 DBUS_SYSTEM_LOG_WARNING,
616 DBUS_SYSTEM_LOG_SECURITY,
617 DBUS_SYSTEM_LOG_ERROR
618} DBusSystemLogSeverity;
619
620DBUS_PRIVATE_EXPORT
621void _dbus_log (DBusSystemLogSeverity severity,
622 const char *msg,
623 ...) _DBUS_GNUC_PRINTF (2, 3);
624DBUS_PRIVATE_EXPORT
625void _dbus_logv (DBusSystemLogSeverity severity,
626 const char *msg,
627 va_list args) _DBUS_GNUC_PRINTF (2, 0);
628
634#define _DBUS_DOUBLES_BITWISE_EQUAL(a, b) (memcmp (&(a), &(b), sizeof (double)) == 0)
635
637 DBusString *address,
638 DBusError *error);
639
640DBUS_PRIVATE_EXPORT
642 DBusString *address,
643 DBusError *error);
644
648typedef union DBusGUID DBusGUID;
649
650DBUS_PRIVATE_EXPORT
652 dbus_bool_t create_if_not_found,
653 DBusError *error);
654
661
666
671
672DBUS_PRIVATE_EXPORT
674 const char *suffix,
675 DBusList **dir_list);
676
677unsigned long _dbus_pid_for_log (void);
678
679/* FIXME move back to dbus-sysdeps-unix.h probably -
680 * the PID file handling just needs a little more abstraction
681 * in the bus daemon first.
682 */
683DBUS_PRIVATE_EXPORT
685
686DBUS_PRIVATE_EXPORT
688
689DBUS_PRIVATE_EXPORT
690void _dbus_flush_caches (void);
691
693
694/* Do not set this too high: it is a denial-of-service risk.
695 * See <https://bugs.freedesktop.org/show_bug.cgi?id=82820>
696 *
697 * (This needs to be in the non-Unix-specific header so that
698 * the config-parser can use it.)
699 */
700#define DBUS_DEFAULT_MESSAGE_UNIX_FDS 16
701
702typedef struct DBusRLimit DBusRLimit;
703
704DBusRLimit *_dbus_rlimit_save_fd_limit (DBusError *error);
705dbus_bool_t _dbus_rlimit_raise_fd_limit (DBusError *error);
706dbus_bool_t _dbus_rlimit_restore_fd_limit (DBusRLimit *saved,
707 DBusError *error);
708void _dbus_rlimit_free (DBusRLimit *lim);
709
710void _dbus_daemon_report_ready (void);
714
715dbus_bool_t _dbus_inet_sockaddr_to_string (const void *sockaddr_pointer,
716 size_t len,
717 char *string,
718 size_t string_len,
719 const char **family_name,
720 dbus_uint16_t *port,
721 DBusError *error);
722void _dbus_set_error_with_inet_sockaddr (DBusError *error,
723 const void *sockaddr_pointer,
724 size_t len,
725 const char *description,
726 int saved_errno);
727void _dbus_combine_tcp_errors (DBusList **sources,
728 const char *summary,
729 const char *host,
730 const char *port,
731 DBusError *dest);
732
745#define _DBUS_MAX_SUN_PATH_LENGTH 99
746
750
751
752#ifdef DBUS_WIN
753#include "dbus-sysdeps-win.h"
754#endif
755
756#endif /* DBUS_SYSDEPS_H */
#define DBUS_BEGIN_DECLS
Macro used prior to declaring functions in the D-Bus header files.
Definition dbus-macros.h:36
#define DBUS_END_DECLS
Macro used after declaring functions in the D-Bus header files.
Definition dbus-macros.h:37
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.
void _dbus_daemon_report_ready(void)
Report to a service manager that the daemon calling this function is ready for use.
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)
_DBUS_WARN_UNUSED_RESULT dbus_bool_t _dbus_generate_random_bytes_buffer(char *buffer, int n_bytes, DBusError *error)
Random numbers.
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.
void _dbus_daemon_report_reloading(void)
Report to a service manager that the daemon calling this function is reloading configuration.
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 void _dbus_atomic_set_nonzero(DBusAtomic *atomic)
Atomically set the value of an integer to something nonzero.
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_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_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_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().
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.
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 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 const char * _dbus_error_from_system_errno(void)
Converts the current system errno value into a DBusError name.
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.
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.
void _dbus_daemon_report_reloaded(void)
Report to a service manager that the daemon calling this function is reloading configuration.
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_daemon_unpublish_session_bus_address(void)
Clear the platform-specific centralized location where the session bus address is published.
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.
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.
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 most important credentials of the current process (the uid and pid) to the passed-in credent...
void _dbus_daemon_report_stopping(void)
Report to a service manager that the daemon calling this function is shutting down.
DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_close_socket(DBusSocket *fd, DBusError *error)
Closes a socket and invalidates it.
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.
DBUS_PRIVATE_EXPORT void _dbus_atomic_set_zero(DBusAtomic *atomic)
Atomically set the value of an integer to 0.
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.
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_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.
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.
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
unsigned short dbus_uint16_t
A 16-bit unsigned integer on all platforms.
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:37
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:51
A node in a linked list.
Definition dbus-list.h:37
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...