X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dbus%2Fdbus-sysdeps.h;h=469b5e523764e48524cdf0ac7b85c6fd4abac6ac;hb=0314e701c812565bd7bdac548cadfea5d310d66c;hp=9c1bec98710b9d57183e3d8fb43b8db734184e1a;hpb=f3fd4d60ad5de9f0c6576f6e100f944792fed255;p=platform%2Fupstream%2Fdbus.git diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h index 9c1bec9..469b5e5 100644 --- a/dbus/dbus-sysdeps.h +++ b/dbus/dbus-sysdeps.h @@ -1,4 +1,4 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ /* dbus-sysdeps.h Wrappers around system/libc features (internal to D-Bus implementation) * * Copyright (C) 2002, 2003 Red Hat, Inc. @@ -33,14 +33,25 @@ * stuff straight out of string.h, so have this here for now. */ #include - -/* and it would just be annoying to abstract this */ -#include - #include + +/* AIX sys/poll.h does #define events reqevents, and other + * wonderousness, so must include sys/poll before declaring + * DBusPollFD + */ +#ifdef HAVE_POLL +#include +#endif + DBUS_BEGIN_DECLS +#ifdef DBUS_WIN +#define _DBUS_PATH_SEPARATOR ";" +#else +#define _DBUS_PATH_SEPARATOR ":" +#endif + /* Forward declarations */ /** An opaque string type */ @@ -49,6 +60,9 @@ typedef struct DBusString DBusString; /** An opaque list type */ typedef struct DBusList DBusList; +/** Object that contains a list of credentials such as UNIX or Windows user ID */ +typedef struct DBusCredentials DBusCredentials; + /** * @addtogroup DBusSysdeps * @@ -86,6 +100,8 @@ void _dbus_abort (void) _DBUS_GNUC_NORETURN; const char* _dbus_getenv (const char *varname); dbus_bool_t _dbus_setenv (const char *varname, const char *value); +dbus_bool_t _dbus_clearenv (void); +char ** _dbus_get_environment (void); /** A process ID */ typedef unsigned long dbus_pid_t; @@ -138,86 +154,43 @@ int _dbus_write_socket_two (int fd, int start2, int len2); int _dbus_connect_tcp_socket (const char *host, - dbus_uint32_t port, + const char *port, + const char *family, DBusError *error); int _dbus_listen_tcp_socket (const char *host, - dbus_uint32_t *port, + const char *port, + const char *family, + DBusString *retport, + int **fds_p, DBusError *error); int _dbus_accept (int listen_fd); -/** - * Struct representing socket credentials - */ -typedef struct -{ - dbus_pid_t pid; /**< process ID or DBUS_PID_UNSET */ - dbus_uid_t uid; /**< user ID or DBUS_UID_UNSET */ - dbus_gid_t gid; /**< group ID or DBUS_GID_UNSET */ -} DBusCredentials; - -/* FIXME these read/send credentials should get moved to sysdeps-unix.h, - * or renamed to reflect what they mean cross-platform - */ -dbus_bool_t _dbus_read_credentials_unix_socket (int client_fd, - DBusCredentials *credentials, - DBusError *error); -dbus_bool_t _dbus_send_credentials_unix_socket (int server_fd, - DBusError *error); - - -void _dbus_credentials_clear (DBusCredentials *credentials); -void _dbus_credentials_from_current_process (DBusCredentials *credentials); -dbus_bool_t _dbus_credentials_match (const DBusCredentials *expected_credentials, - const DBusCredentials *provided_credentials); - - -/** Information about a UNIX user */ -typedef struct DBusUserInfo DBusUserInfo; -/** Information about a UNIX group */ -typedef struct DBusGroupInfo DBusGroupInfo; - -/** - * Information about a UNIX user - */ -struct DBusUserInfo -{ - dbus_uid_t uid; /**< UID */ - dbus_gid_t primary_gid; /**< GID */ - dbus_gid_t *group_ids; /**< Groups IDs, *including* above primary group */ - int n_group_ids; /**< Size of group IDs array */ - char *username; /**< Username */ - char *homedir; /**< Home directory */ -}; - -/** - * Information about a UNIX group - */ -struct DBusGroupInfo -{ - dbus_gid_t gid; /**< GID */ - char *groupname; /**< Group name */ -}; - -dbus_bool_t _dbus_user_info_fill (DBusUserInfo *info, - const DBusString *username, - DBusError *error); -dbus_bool_t _dbus_user_info_fill_uid (DBusUserInfo *info, - dbus_uid_t uid, - DBusError *error); -void _dbus_user_info_free (DBusUserInfo *info); -dbus_bool_t _dbus_group_info_fill (DBusGroupInfo *info, - const DBusString *groupname, - DBusError *error); -dbus_bool_t _dbus_group_info_fill_gid (DBusGroupInfo *info, - dbus_gid_t gid, - DBusError *error); -void _dbus_group_info_free (DBusGroupInfo *info); - - -unsigned long _dbus_getpid (void); -dbus_uid_t _dbus_getuid (void); -dbus_gid_t _dbus_getgid (void); +dbus_bool_t _dbus_read_credentials_socket (int client_fd, + DBusCredentials *credentials, + DBusError *error); +dbus_bool_t _dbus_send_credentials_socket (int server_fd, + DBusError *error); + +dbus_bool_t _dbus_credentials_add_from_user (DBusCredentials *credentials, + const DBusString *username); +dbus_bool_t _dbus_credentials_add_from_current_process (DBusCredentials *credentials); +dbus_bool_t _dbus_append_user_from_current_process (DBusString *str); + +dbus_bool_t _dbus_parse_unix_user_from_config (const DBusString *username, + dbus_uid_t *uid_p); +dbus_bool_t _dbus_parse_unix_group_from_config (const DBusString *groupname, + dbus_gid_t *gid_p); +dbus_bool_t _dbus_unix_groups_from_uid (dbus_uid_t uid, + dbus_gid_t **group_ids, + int *n_group_ids); +dbus_bool_t _dbus_unix_user_is_at_console (dbus_uid_t uid, + DBusError *error); +dbus_bool_t _dbus_unix_user_is_process_owner (dbus_uid_t uid); +dbus_bool_t _dbus_windows_user_is_process_owner (const char *windows_sid); + +dbus_bool_t _dbus_append_keyring_directory_for_credentials (DBusString *directory, + DBusCredentials *credentials); /** Opaque type representing an atomically-modifiable integer * that can be used from multiple threads. @@ -236,9 +209,36 @@ struct DBusAtomic #endif }; +/* The value we get from autofoo is in the form of a cpp expression; + * convert that to a conventional defined/undef switch. (We can't get + * the conventional defined/undef because of multiarch builds only running + * ./configure once, on Darwin.) */ +#if DBUS_HAVE_ATOMIC_INT_COND +# define DBUS_HAVE_ATOMIC_INT 1 +#else +# undef DBUS_HAVE_ATOMIC_INT +#endif + dbus_int32_t _dbus_atomic_inc (DBusAtomic *atomic); dbus_int32_t _dbus_atomic_dec (DBusAtomic *atomic); + +/* AIX uses different values for poll */ + +#ifdef _AIX +/** There is data to read */ +#define _DBUS_POLLIN 0x0001 +/** There is urgent data to read */ +#define _DBUS_POLLPRI 0x0004 +/** Writing now will not block */ +#define _DBUS_POLLOUT 0x0002 +/** Error condition */ +#define _DBUS_POLLERR 0x4000 +/** Hung up */ +#define _DBUS_POLLHUP 0x2000 +/** Invalid request: fd not open */ +#define _DBUS_POLLNVAL 0x8000 +#else /** There is data to read */ #define _DBUS_POLLIN 0x0001 /** There is urgent data to read */ @@ -251,6 +251,7 @@ dbus_int32_t _dbus_atomic_dec (DBusAtomic *atomic); #define _DBUS_POLLHUP 0x0010 /** Invalid request: fd not open */ #define _DBUS_POLLNVAL 0x0020 +#endif /** * A portable struct pollfd wrapper. @@ -301,12 +302,29 @@ dbus_bool_t _dbus_string_get_dirname (const DBusString *filename, dbus_bool_t _dbus_path_is_absolute (const DBusString *filename); dbus_bool_t _dbus_get_standard_session_servicedirs (DBusList **dirs); +dbus_bool_t _dbus_get_standard_system_servicedirs (DBusList **dirs); + +dbus_bool_t _dbus_append_system_config_file (DBusString *str); +dbus_bool_t _dbus_append_session_config_file (DBusString *str); + +typedef struct { + int fd_or_handle; +} DBusPipe; + +void _dbus_pipe_init (DBusPipe *pipe, + int fd); +void _dbus_pipe_init_stdout (DBusPipe *pipe); +int _dbus_pipe_write (DBusPipe *pipe, + const DBusString *buffer, + int start, + int len, + DBusError *error); +int _dbus_pipe_close (DBusPipe *pipe, + DBusError *error); +dbus_bool_t _dbus_pipe_is_valid (DBusPipe *pipe); +void _dbus_pipe_invalidate (DBusPipe *pipe); +dbus_bool_t _dbus_pipe_is_stdout_or_stderr (DBusPipe *pipe); -typedef int DBusPipe; -int _dbus_write_pipe (DBusPipe pipe, - const DBusString *buffer, - int start, - int len); /** Opaque type for reading a directory listing */ typedef struct DBusDirIter DBusDirIter; @@ -339,6 +357,13 @@ dbus_bool_t _dbus_generate_random_ascii (DBusString *str, const char* _dbus_error_from_errno (int error_number); +void _dbus_set_errno_to_zero (void); +dbus_bool_t _dbus_get_is_errno_nonzero (void); +dbus_bool_t _dbus_get_is_errno_eagain_or_ewouldblock (void); +dbus_bool_t _dbus_get_is_errno_enomem (void); +dbus_bool_t _dbus_get_is_errno_eintr (void); +const char* _dbus_strerror_from_errno (void); + void _dbus_disable_sigpipe (void); @@ -374,14 +399,18 @@ dbus_bool_t _dbus_full_duplex_pipe (int *fd1, void _dbus_print_backtrace (void); dbus_bool_t _dbus_become_daemon (const DBusString *pidfile, - int print_pid_fd, - DBusError *error); -dbus_bool_t _dbus_write_pid_file (const DBusString *filename, - unsigned long pid, - DBusError *error); -dbus_bool_t _dbus_change_identity (unsigned long uid, - unsigned long gid, - DBusError *error); + DBusPipe *print_pid_pipe, + DBusError *error, + dbus_bool_t keep_umask); + +dbus_bool_t _dbus_verify_daemon_user (const char *user); +dbus_bool_t _dbus_change_to_daemon_user (const char *user, + DBusError *error); + +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); /** A UNIX signal handler */ typedef void (* DBusSignalHandler) (int sig); @@ -427,9 +456,6 @@ dbus_bool_t _dbus_user_at_console (const char *username, _DBUS_BYTE_OF_PRIMITIVE (a, 6) == _DBUS_BYTE_OF_PRIMITIVE (b, 6) && \ _DBUS_BYTE_OF_PRIMITIVE (a, 7) == _DBUS_BYTE_OF_PRIMITIVE (b, 7)) -dbus_bool_t _dbus_parse_uid (const DBusString *uid_str, - dbus_uid_t *uid); - dbus_bool_t _dbus_get_autolaunch_address (DBusString *address, DBusError *error); @@ -449,6 +475,20 @@ dbus_bool_t _dbus_read_local_machine_uuid (DBusGUID *machine_id, */ dbus_bool_t _dbus_threads_init_platform_specific (void); +dbus_bool_t _dbus_split_paths_and_append (DBusString *dirs, + const char *suffix, + DBusList **dir_list); + +unsigned long _dbus_pid_for_log (void); + +/* FIXME move back to dbus-sysdeps-unix.h probably - + * the PID file handling just needs a little more abstraction + * in the bus daemon first. + */ +dbus_pid_t _dbus_getpid (void); + +void _dbus_flush_caches (void); + /** @} */ DBUS_END_DECLS