25
25
#ifndef DBUS_SYSDEPS_H
26
26
#define DBUS_SYSDEPS_H
30
34
#include <dbus/dbus-errors.h>
35
#include <dbus/dbus-file.h>
36
#include <dbus/dbus-string.h>
32
38
/* this is perhaps bogus, but strcmp() etc. are faster if we use the
33
39
* stuff straight out of string.h, so have this here for now.
55
66
/* Forward declarations */
57
/** An opaque string type */
58
typedef struct DBusString DBusString;
60
69
/** An opaque list type */
61
70
typedef struct DBusList DBusList;
63
72
/** Object that contains a list of credentials such as UNIX or Windows user ID */
64
73
typedef struct DBusCredentials DBusCredentials;
75
/** A wrapper around a pipe descriptor or handle */
76
typedef struct DBusPipe DBusPipe;
67
79
* @addtogroup DBusSysdeps
72
/* The idea of this file is to encapsulate everywhere that we're
73
* relying on external libc features, for ease of security
74
* auditing. The idea is from vsftpd. This also gives us a chance to
75
* make things more convenient to use, e.g. by reading into a
76
* DBusString. Operating system headers aren't intended to be used
77
* outside of this file and a limited number of others (such as
81
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
82
#define _DBUS_GNUC_PRINTF( format_idx, arg_idx ) \
83
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
84
#define _DBUS_GNUC_NORETURN \
85
__attribute__((__noreturn__))
87
#define _DBUS_GNUC_PRINTF( format_idx, arg_idx )
88
#define _DBUS_GNUC_NORETURN
89
#endif /* !__GNUC__ */
91
/** @def _DBUS_GNUC_PRINTF
92
* used to tell gcc about printf format strings
94
/** @def _DBUS_GNUC_NORETURN
95
* used to tell gcc about functions that never return, such as _dbus_abort()
98
84
void _dbus_abort (void) _DBUS_GNUC_NORETURN;
100
86
const char* _dbus_getenv (const char *varname);
153
139
const DBusString *buffer2,
143
int _dbus_read_socket_with_unix_fds (int fd,
148
int _dbus_write_socket_with_unix_fds (int fd,
149
const DBusString *buffer,
154
int _dbus_write_socket_with_unix_fds_two (int fd,
155
const DBusString *buffer1,
158
const DBusString *buffer2,
164
dbus_bool_t _dbus_socket_is_invalid (int fd);
156
166
int _dbus_connect_tcp_socket (const char *host,
157
167
const char *port,
158
168
const char *family,
159
169
DBusError *error);
170
int _dbus_connect_tcp_socket_with_nonce (const char *host,
173
const char *noncefile,
160
175
int _dbus_listen_tcp_socket (const char *host,
161
176
const char *port,
162
177
const char *family,
192
207
dbus_bool_t _dbus_append_keyring_directory_for_credentials (DBusString *directory,
193
208
DBusCredentials *credentials);
210
void _dbus_daemon_publish_session_bus_address (const char* address);
212
void _dbus_daemon_unpublish_session_bus_address (void);
214
dbus_bool_t _dbus_socket_can_pass_unix_fd(int fd);
195
216
/** Opaque type representing an atomically-modifiable integer
196
217
* that can be used from multiple threads.
289
* File/directory interface
310
* directory interface
291
dbus_bool_t _dbus_file_exists (const char *file);
292
dbus_bool_t _dbus_file_get_contents (DBusString *str,
293
const DBusString *filename,
295
dbus_bool_t _dbus_string_save_to_file (const DBusString *str,
296
const DBusString *filename,
299
dbus_bool_t _dbus_make_file_world_readable (const DBusString *filename,
302
dbus_bool_t _dbus_create_file_exclusively (const DBusString *filename,
304
dbus_bool_t _dbus_delete_file (const DBusString *filename,
306
312
dbus_bool_t _dbus_create_directory (const DBusString *filename,
307
313
DBusError *error);
308
314
dbus_bool_t _dbus_delete_directory (const DBusString *filename,
320
326
dbus_bool_t _dbus_append_system_config_file (DBusString *str);
321
327
dbus_bool_t _dbus_append_session_config_file (DBusString *str);
327
void _dbus_pipe_init (DBusPipe *pipe,
329
void _dbus_pipe_init_stdout (DBusPipe *pipe);
330
int _dbus_pipe_write (DBusPipe *pipe,
331
const DBusString *buffer,
335
int _dbus_pipe_close (DBusPipe *pipe,
337
dbus_bool_t _dbus_pipe_is_valid (DBusPipe *pipe);
338
void _dbus_pipe_invalidate (DBusPipe *pipe);
339
dbus_bool_t _dbus_pipe_is_stdout_or_stderr (DBusPipe *pipe);
342
329
/** Opaque type for reading a directory listing */
343
330
typedef struct DBusDirIter DBusDirIter;
352
339
dbus_bool_t _dbus_check_dir_is_private_to_user (DBusString *dir,
353
340
DBusError *error);
355
void _dbus_fd_set_close_on_exec (int fd);
342
void _dbus_fd_set_close_on_exec (intptr_t fd);
357
344
const char* _dbus_get_tmpdir (void);
418
406
dbus_bool_t keep_umask);
420
408
dbus_bool_t _dbus_verify_daemon_user (const char *user);
409
dbus_bool_t _dbus_change_to_daemon_user (const char *user,
422
412
dbus_bool_t _dbus_write_pid_to_file_and_pipe (const DBusString *pidfile,
423
413
DBusPipe *print_pid_pipe,
525
515
void _dbus_flush_caches (void);
518
* replaces the term DBUS_PREFIX in configure_time_path by the
519
* current dbus installation directory. On unix this function is a noop
521
* @param configure_time_path
525
_dbus_replace_install_prefix (const char *configure_time_path);