00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef DBUS_SYSDEPS_H
00026 #define DBUS_SYSDEPS_H
00027
00028 #include <dbus/dbus-errors.h>
00029
00030
00031
00032
00033 #include <string.h>
00034
00035
00036 #include <errno.h>
00037
00038 DBUS_BEGIN_DECLS;
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 typedef struct DBusString DBusString;
00050
00051 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
00052 #define _DBUS_GNUC_PRINTF( format_idx, arg_idx ) \
00053 __attribute__((__format__ (__printf__, format_idx, arg_idx)))
00054 #define _DBUS_GNUC_SCANF( format_idx, arg_idx ) \
00055 __attribute__((__format__ (__scanf__, format_idx, arg_idx)))
00056 #define _DBUS_GNUC_FORMAT( arg_idx ) \
00057 __attribute__((__format_arg__ (arg_idx)))
00058 #define _DBUS_GNUC_NORETURN \
00059 __attribute__((__noreturn__))
00060 #else
00061 #define _DBUS_GNUC_PRINTF( format_idx, arg_idx )
00062 #define _DBUS_GNUC_SCANF( format_idx, arg_idx )
00063 #define _DBUS_GNUC_FORMAT( arg_idx )
00064 #define _DBUS_GNUC_NORETURN
00065 #endif
00066
00067 void _dbus_abort (void) _DBUS_GNUC_NORETURN;
00068
00069 const char* _dbus_getenv (const char *varname);
00070 dbus_bool_t _dbus_setenv (const char *varname,
00071 const char *value);
00072
00073 int _dbus_read (int fd,
00074 DBusString *buffer,
00075 int count);
00076 int _dbus_write (int fd,
00077 const DBusString *buffer,
00078 int start,
00079 int len);
00080 int _dbus_write_two (int fd,
00081 const DBusString *buffer1,
00082 int start1,
00083 int len1,
00084 const DBusString *buffer2,
00085 int start2,
00086 int len2);
00087
00088 typedef unsigned long dbus_pid_t;
00089 typedef unsigned long dbus_uid_t;
00090 typedef unsigned long dbus_gid_t;
00091
00092 #define DBUS_PID_UNSET ((dbus_pid_t) -1)
00093 #define DBUS_UID_UNSET ((dbus_uid_t) -1)
00094 #define DBUS_GID_UNSET ((dbus_gid_t) -1)
00095
00096 #define DBUS_PID_FORMAT "%lu"
00097 #define DBUS_UID_FORMAT "%lu"
00098 #define DBUS_GID_FORMAT "%lu"
00099
00103 typedef struct
00104 {
00105 dbus_pid_t pid;
00106 dbus_uid_t uid;
00107 dbus_gid_t gid;
00108 } DBusCredentials;
00109
00110 int _dbus_connect_unix_socket (const char *path,
00111 dbus_bool_t abstract,
00112 DBusError *error);
00113 int _dbus_listen_unix_socket (const char *path,
00114 dbus_bool_t abstract,
00115 DBusError *error);
00116 int _dbus_connect_tcp_socket (const char *host,
00117 dbus_uint32_t port,
00118 DBusError *error);
00119 int _dbus_listen_tcp_socket (const char *host,
00120 dbus_uint32_t port,
00121 DBusError *error);
00122 int _dbus_accept (int listen_fd);
00123
00124 dbus_bool_t _dbus_read_credentials_unix_socket (int client_fd,
00125 DBusCredentials *credentials,
00126 DBusError *error);
00127 dbus_bool_t _dbus_send_credentials_unix_socket (int server_fd,
00128 DBusError *error);
00129
00130
00131 void _dbus_credentials_clear (DBusCredentials *credentials);
00132 void _dbus_credentials_from_current_process (DBusCredentials *credentials);
00133 dbus_bool_t _dbus_credentials_match (const DBusCredentials *expected_credentials,
00134 const DBusCredentials *provided_credentials);
00135
00136
00137 typedef struct DBusUserInfo DBusUserInfo;
00138 typedef struct DBusGroupInfo DBusGroupInfo;
00139
00143 struct DBusUserInfo
00144 {
00145 dbus_uid_t uid;
00146 dbus_gid_t primary_gid;
00147 dbus_gid_t *group_ids;
00148 int n_group_ids;
00149 char *username;
00150 char *homedir;
00151 };
00152
00156 struct DBusGroupInfo
00157 {
00158 dbus_gid_t gid;
00159 char *groupname;
00160 };
00161
00162 dbus_bool_t _dbus_user_info_fill (DBusUserInfo *info,
00163 const DBusString *username,
00164 DBusError *error);
00165 dbus_bool_t _dbus_user_info_fill_uid (DBusUserInfo *info,
00166 dbus_uid_t uid,
00167 DBusError *error);
00168 void _dbus_user_info_free (DBusUserInfo *info);
00169
00170 dbus_bool_t _dbus_group_info_fill (DBusGroupInfo *info,
00171 const DBusString *groupname,
00172 DBusError *error);
00173 dbus_bool_t _dbus_group_info_fill_gid (DBusGroupInfo *info,
00174 dbus_gid_t gid,
00175 DBusError *error);
00176 void _dbus_group_info_free (DBusGroupInfo *info);
00177
00178
00179 unsigned long _dbus_getpid (void);
00180 dbus_uid_t _dbus_getuid (void);
00181 dbus_gid_t _dbus_getgid (void);
00182
00183 typedef struct DBusAtomic DBusAtomic;
00184
00188 struct DBusAtomic
00189 {
00190 volatile dbus_int32_t value;
00191 };
00192
00193 dbus_int32_t _dbus_atomic_inc (DBusAtomic *atomic);
00194 dbus_int32_t _dbus_atomic_dec (DBusAtomic *atomic);
00195
00196 #define _DBUS_POLLIN 0x0001
00197 #define _DBUS_POLLPRI 0x0002
00198 #define _DBUS_POLLOUT 0x0004
00199 #define _DBUS_POLLERR 0x0008
00200 #define _DBUS_POLLHUP 0x0010
00201 #define _DBUS_POLLNVAL 0x0020
00202
00206 typedef struct
00207 {
00208 int fd;
00209 short events;
00210 short revents;
00211 } DBusPollFD;
00212
00213 int _dbus_poll (DBusPollFD *fds,
00214 int n_fds,
00215 int timeout_milliseconds);
00216
00217 void _dbus_sleep_milliseconds (int milliseconds);
00218
00219 void _dbus_get_current_time (long *tv_sec,
00220 long *tv_usec);
00221
00222
00223 dbus_bool_t _dbus_file_get_contents (DBusString *str,
00224 const DBusString *filename,
00225 DBusError *error);
00226 dbus_bool_t _dbus_string_save_to_file (const DBusString *str,
00227 const DBusString *filename,
00228 DBusError *error);
00229
00230 dbus_bool_t _dbus_create_file_exclusively (const DBusString *filename,
00231 DBusError *error);
00232 dbus_bool_t _dbus_delete_file (const DBusString *filename,
00233 DBusError *error);
00234 dbus_bool_t _dbus_create_directory (const DBusString *filename,
00235 DBusError *error);
00236
00237 dbus_bool_t _dbus_concat_dir_and_file (DBusString *dir,
00238 const DBusString *next_component);
00239 dbus_bool_t _dbus_string_get_dirname (const DBusString *filename,
00240 DBusString *dirname);
00241 dbus_bool_t _dbus_path_is_absolute (const DBusString *filename);
00242
00243 typedef struct DBusDirIter DBusDirIter;
00244
00245 DBusDirIter* _dbus_directory_open (const DBusString *filename,
00246 DBusError *error);
00247 dbus_bool_t _dbus_directory_get_next_file (DBusDirIter *iter,
00248 DBusString *filename,
00249 DBusError *error);
00250 void _dbus_directory_close (DBusDirIter *iter);
00251
00252
00253 dbus_bool_t _dbus_generate_random_bytes (DBusString *str,
00254 int n_bytes);
00255 dbus_bool_t _dbus_generate_random_ascii (DBusString *str,
00256 int n_bytes);
00257
00258 const char *_dbus_errno_to_string (int errnum);
00259 const char* _dbus_error_from_errno (int error_number);
00260
00261 void _dbus_disable_sigpipe (void);
00262
00263 void _dbus_fd_set_close_on_exec (int fd);
00264
00265 void _dbus_exit (int code) _DBUS_GNUC_NORETURN;
00266
00270 typedef struct
00271 {
00272 unsigned long mode;
00273 unsigned long nlink;
00274 dbus_uid_t uid;
00275 dbus_gid_t gid;
00276 unsigned long size;
00277 unsigned long atime;
00278 unsigned long mtime;
00279 unsigned long ctime;
00280 } DBusStat;
00281
00282 dbus_bool_t _dbus_stat (const DBusString *filename,
00283 DBusStat *statbuf,
00284 DBusError *error);
00285 dbus_bool_t _dbus_full_duplex_pipe (int *fd1,
00286 int *fd2,
00287 dbus_bool_t blocking,
00288 DBusError *error);
00289 dbus_bool_t _dbus_close (int fd,
00290 DBusError *error);
00291
00292 void _dbus_print_backtrace (void);
00293
00294 dbus_bool_t _dbus_become_daemon (const DBusString *pidfile,
00295 DBusError *error);
00296 dbus_bool_t _dbus_write_pid_file (const DBusString *filename,
00297 unsigned long pid,
00298 DBusError *error);
00299 dbus_bool_t _dbus_change_identity (unsigned long uid,
00300 unsigned long gid,
00301 DBusError *error);
00302
00303 typedef void (* DBusSignalHandler) (int sig);
00304
00305 void _dbus_set_signal_handler (int sig,
00306 DBusSignalHandler handler);
00307
00308
00309 DBUS_END_DECLS;
00310
00311 #endif