diff --git a/daemons/attrd/attrd_utils.c b/daemons/attrd/attrd_utils.c index b60b452..c311ddc 100644 --- a/daemons/attrd/attrd_utils.c +++ b/daemons/attrd/attrd_utils.c @@ -17,7 +17,7 @@ #include #include -#include +#include #include #include "pacemaker-attrd.h" diff --git a/daemons/attrd/pacemaker-attrd.c b/daemons/attrd/pacemaker-attrd.c index 61e5493..0e944ed 100644 --- a/daemons/attrd/pacemaker-attrd.c +++ b/daemons/attrd/pacemaker-attrd.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include diff --git a/daemons/based/based_messages.c b/daemons/based/based_messages.c index 4438e28..af0a3a2 100644 --- a/daemons/based/based_messages.c +++ b/daemons/based/based_messages.c @@ -24,7 +24,7 @@ #include #include -#include +#include #include #include diff --git a/daemons/based/based_remote.c b/daemons/based/based_remote.c index ca75b73..70261c3 100644 --- a/daemons/based/based_remote.c +++ b/daemons/based/based_remote.c @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include #include diff --git a/daemons/based/pacemaker-based.h b/daemons/based/pacemaker-based.h index 0d7a5b9..c88ce7c 100644 --- a/daemons/based/pacemaker-based.h +++ b/daemons/based/pacemaker-based.h @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include diff --git a/daemons/controld/controld_control.c b/daemons/controld/controld_control.c index 1705c14..059eb7b 100644 --- a/daemons/controld/controld_control.c +++ b/daemons/controld/controld_control.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include diff --git a/daemons/controld/controld_fsa.h b/daemons/controld/controld_fsa.h index b76a7d2..28eea56 100644 --- a/daemons/controld/controld_fsa.h +++ b/daemons/controld/controld_fsa.h @@ -16,7 +16,7 @@ # include # include # include -# include +# include /*! States the controller can be in */ enum crmd_fsa_state { diff --git a/daemons/controld/controld_messages.c b/daemons/controld/controld_messages.c index 0b063bc..18a6c17 100644 --- a/daemons/controld/controld_messages.c +++ b/daemons/controld/controld_messages.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include diff --git a/daemons/controld/controld_messages.h b/daemons/controld/controld_messages.h index db3ade3..4018deb 100644 --- a/daemons/controld/controld_messages.h +++ b/daemons/controld/controld_messages.h @@ -11,7 +11,7 @@ # define XML_CRM_MESSAGES__H # include -# include +# include # include # include # include diff --git a/daemons/execd/execd_alerts.c b/daemons/execd/execd_alerts.c index 2db8a6a..a905d1a 100644 --- a/daemons/execd/execd_alerts.c +++ b/daemons/execd/execd_alerts.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include diff --git a/daemons/execd/execd_commands.c b/daemons/execd/execd_commands.c index 4d0e457..8da63b4 100644 --- a/daemons/execd/execd_commands.c +++ b/daemons/execd/execd_commands.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include "pacemaker-execd.h" diff --git a/daemons/execd/pacemaker-execd.c b/daemons/execd/pacemaker-execd.c index df27d1a..c06da7a 100644 --- a/daemons/execd/pacemaker-execd.c +++ b/daemons/execd/pacemaker-execd.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include diff --git a/daemons/execd/pacemaker-execd.h b/daemons/execd/pacemaker-execd.h index 7ba3e78..d86894b 100644 --- a/daemons/execd/pacemaker-execd.h +++ b/daemons/execd/pacemaker-execd.h @@ -11,7 +11,7 @@ # define PACEMAKER_EXECD__H # include -# include +# include # include # include diff --git a/daemons/execd/remoted_proxy.c b/daemons/execd/remoted_proxy.c index ef0d108..dda7eed 100644 --- a/daemons/execd/remoted_proxy.c +++ b/daemons/execd/remoted_proxy.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include diff --git a/daemons/fenced/fenced_commands.c b/daemons/fenced/fenced_commands.c index 859e7b7..7c0435f 100644 --- a/daemons/fenced/fenced_commands.c +++ b/daemons/fenced/fenced_commands.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include diff --git a/daemons/fenced/fenced_history.c b/daemons/fenced/fenced_history.c index 710d6fe..b48662c 100644 --- a/daemons/fenced/fenced_history.c +++ b/daemons/fenced/fenced_history.c @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include #include diff --git a/daemons/fenced/fenced_remote.c b/daemons/fenced/fenced_remote.c index b9501be..1a449c5 100644 --- a/daemons/fenced/fenced_remote.c +++ b/daemons/fenced/fenced_remote.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include diff --git a/daemons/fenced/pacemaker-fenced.c b/daemons/fenced/pacemaker-fenced.c index 450814c..6a2935a 100644 --- a/daemons/fenced/pacemaker-fenced.c +++ b/daemons/fenced/pacemaker-fenced.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include diff --git a/daemons/pacemakerd/pacemakerd.c b/daemons/pacemakerd/pacemakerd.c index 5ed4626..64c30e2 100644 --- a/daemons/pacemakerd/pacemakerd.c +++ b/daemons/pacemakerd/pacemakerd.c @@ -24,13 +24,11 @@ #include /* indirectly: CRM_EX_* */ #include /* cib_channel_ro */ #include -#include +#include #include #include #include -#include /* PCMK__SPECIAL_PID*, ... */ - #ifdef SUPPORT_COROSYNC #include #endif diff --git a/daemons/schedulerd/pacemaker-schedulerd.c b/daemons/schedulerd/pacemaker-schedulerd.c index 0146ca2..885386d 100644 --- a/daemons/schedulerd/pacemaker-schedulerd.c +++ b/daemons/schedulerd/pacemaker-schedulerd.c @@ -21,7 +21,7 @@ #include -#include +#include #include #include #include diff --git a/include/crm/cib/internal.h b/include/crm/cib/internal.h index df16280..b43cf08 100644 --- a/include/crm/cib/internal.h +++ b/include/crm/cib/internal.h @@ -10,7 +10,7 @@ #ifndef CIB_INTERNAL__H # define CIB_INTERNAL__H # include -# include +# include # define CIB_OP_SLAVE "cib_slave" # define CIB_OP_SLAVEALL "cib_slave_all" diff --git a/include/crm/common/Makefile.am b/include/crm/common/Makefile.am index b38a5c5..776e4a7 100644 --- a/include/crm/common/Makefile.am +++ b/include/crm/common/Makefile.am @@ -13,7 +13,7 @@ headerdir=$(pkgincludedir)/crm/common header_HEADERS = xml.h ipc.h util.h iso8601.h mainloop.h logging.h results.h \ nvpair.h acl.h -noinst_HEADERS = ipcs_internal.h internal.h alerts_internal.h \ +noinst_HEADERS = internal.h alerts_internal.h \ iso8601_internal.h remote_internal.h xml_internal.h \ ipc_internal.h output.h cmdline_internal.h curses_internal.h \ attrd_internal.h options_internal.h diff --git a/include/crm/common/ipc_internal.h b/include/crm/common/ipc_internal.h index 7113d78..a85210d 100644 --- a/include/crm/common/ipc_internal.h +++ b/include/crm/common/ipc_internal.h @@ -1,5 +1,5 @@ /* - * Copyright 2019 the Pacemaker project contributors + * Copyright 2013-2020 the Pacemaker project contributors * * The version control history for this file may have further details. * @@ -10,10 +10,26 @@ #ifndef PCMK__IPC_INTERNAL_H #define PCMK__IPC_INTERNAL_H -#include +#ifdef __cplusplus +extern "C" { +#endif + +#include // bool +#include // uint32_t +#include // struct iovec +#include // uid_t, gid_t, pid_t, size_t + +#ifdef HAVE_GNUTLS_GNUTLS_H +# include // gnutls_session_t +#endif -#include /* US_AUTH_GETPEEREID */ +#include // guint, gpointer, GQueue, ... +#include // xmlNode +#include // qb_ipcs_connection_t, ... +#include // US_AUTH_GETPEEREID +#include +#include // mainloop_io_t /* denotes "non yieldable PID" on FreeBSD, or actual PID1 in scenarios that require a delicate handling anyway (socket-based activation with systemd); @@ -69,4 +85,126 @@ int pcmk__ipc_is_authentic_process_active(const char *name, uid_t refuid, gid_t refgid, pid_t *gotpid); +typedef struct pcmk__client_s pcmk__client_t; + +enum pcmk__client_type { + PCMK__CLIENT_IPC = 1, + PCMK__CLIENT_TCP = 2, +# ifdef HAVE_GNUTLS_GNUTLS_H + PCMK__CLIENT_TLS = 3, +# endif +}; + +struct pcmk__remote_s { + /* Shared */ + char *buffer; + size_t buffer_size; + size_t buffer_offset; + int auth_timeout; + int tcp_socket; + mainloop_io_t *source; + + /* CIB-only */ + bool authenticated; + char *token; + + /* TLS only */ +# ifdef HAVE_GNUTLS_GNUTLS_H + gnutls_session_t *tls_session; + bool tls_handshake_complete; +# endif +}; + +enum pcmk__client_flags { + pcmk__client_proxied = 0x00001, /* ipc_proxy code only */ + pcmk__client_privileged = 0x00002, /* root or cluster user */ +}; + +struct pcmk__client_s { + unsigned int pid; + + uid_t uid; + gid_t gid; + + char *id; + char *name; + char *user; + + /* Provided for server use (not used by library) */ + /* @TODO merge options, flags, and kind (reserving lower bits for server) */ + long long options; + + int request_id; + uint32_t flags; + void *userdata; + + int event_timer; + GQueue *event_queue; + + /* Depending on the value of kind, only some of the following + * will be populated/valid + */ + enum pcmk__client_type kind; + + qb_ipcs_connection_t *ipcs; /* IPC */ + + struct pcmk__remote_s *remote; /* TCP/TLS */ + + unsigned int queue_backlog; /* IPC queue length after last flush */ + unsigned int queue_max; /* Evict client whose queue grows this big */ +}; + +guint pcmk__ipc_client_count(void); +void pcmk__foreach_ipc_client(GHFunc func, gpointer user_data); +void pcmk__foreach_ipc_client_remove(GHRFunc func, gpointer user_data); + +void pcmk__client_cleanup(void); + +pcmk__client_t *pcmk__find_client(qb_ipcs_connection_t *c); +pcmk__client_t *pcmk__find_client_by_id(const char *id); +const char *pcmk__client_name(pcmk__client_t *c); +const char *pcmk__client_type_str(enum pcmk__client_type client_type); + +pcmk__client_t *pcmk__new_unauth_client(void *key); +pcmk__client_t *pcmk__new_client(qb_ipcs_connection_t *c, uid_t uid, gid_t gid); +void pcmk__free_client(pcmk__client_t *c); +void pcmk__drop_all_clients(qb_ipcs_service_t *s); +bool pcmk__set_client_queue_max(pcmk__client_t *client, const char *qmax); + +void pcmk__ipc_send_ack_as(const char *function, int line, pcmk__client_t *c, + uint32_t request, uint32_t flags, const char *tag); +#define pcmk__ipc_send_ack(c, req, flags, tag) \ + pcmk__ipc_send_ack_as(__FUNCTION__, __LINE__, (c), (req), (flags), (tag)) + +int pcmk__ipc_prepare_iov(uint32_t request, xmlNode *message, + uint32_t max_send_size, + struct iovec **result, ssize_t *bytes); +int pcmk__ipc_send_xml(pcmk__client_t *c, uint32_t request, xmlNode *message, + uint32_t flags); +int pcmk__ipc_send_iov(pcmk__client_t *c, struct iovec *iov, uint32_t flags); +xmlNode *pcmk__client_data2xml(pcmk__client_t *c, void *data, + uint32_t *id, uint32_t *flags); + +int pcmk__client_pid(qb_ipcs_connection_t *c); + +void pcmk__serve_attrd_ipc(qb_ipcs_service_t **ipcs, + struct qb_ipcs_service_handlers *cb); +void pcmk__serve_fenced_ipc(qb_ipcs_service_t **ipcs, + struct qb_ipcs_service_handlers *cb); +qb_ipcs_service_t *pcmk__serve_controld_ipc(struct qb_ipcs_service_handlers *cb); + +void pcmk__serve_based_ipc(qb_ipcs_service_t **ipcs_ro, + qb_ipcs_service_t **ipcs_rw, + qb_ipcs_service_t **ipcs_shm, + struct qb_ipcs_service_handlers *ro_cb, + struct qb_ipcs_service_handlers *rw_cb); + +void pcmk__stop_based_ipc(qb_ipcs_service_t *ipcs_ro, + qb_ipcs_service_t *ipcs_rw, + qb_ipcs_service_t *ipcs_shm); + +#ifdef __cplusplus +} +#endif + #endif diff --git a/include/crm/common/ipcs_internal.h b/include/crm/common/ipcs_internal.h deleted file mode 100644 index c631dfc..0000000 --- a/include/crm/common/ipcs_internal.h +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright 2013-2020 the Pacemaker project contributors - * - * The version control history for this file may have further details. - * - * This source code is licensed under the GNU Lesser General Public License - * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY. - */ - -#ifndef CRM_COMMON_IPCS__H -# define CRM_COMMON_IPCS__H - -#ifdef __cplusplus -extern "C" { -#endif - -# include -# include -# ifdef HAVE_GNUTLS_GNUTLS_H -# undef KEYFILE -# include -# endif - -# include -# include - -typedef struct pcmk__client_s pcmk__client_t; - -enum pcmk__client_type { - PCMK__CLIENT_IPC = 1, - PCMK__CLIENT_TCP = 2, -# ifdef HAVE_GNUTLS_GNUTLS_H - PCMK__CLIENT_TLS = 3, -# endif -}; - -struct pcmk__remote_s { - /* Shared */ - char *buffer; - size_t buffer_size; - size_t buffer_offset; - int auth_timeout; - int tcp_socket; - mainloop_io_t *source; - - /* CIB-only */ - bool authenticated; - char *token; - - /* TLS only */ -# ifdef HAVE_GNUTLS_GNUTLS_H - gnutls_session_t *tls_session; - bool tls_handshake_complete; -# endif -}; - -enum pcmk__client_flags { - pcmk__client_proxied = 0x00001, /* ipc_proxy code only */ - pcmk__client_privileged = 0x00002, /* root or cluster user */ -}; - -struct pcmk__client_s { - uint pid; - - uid_t uid; - gid_t gid; - - char *id; - char *name; - char *user; - - /* Provided for server use (not used by library) */ - /* @TODO merge options, flags, and kind (reserving lower bits for server) */ - long long options; - - int request_id; - uint32_t flags; - void *userdata; - - int event_timer; - GQueue *event_queue; - - /* Depending on the value of kind, only some of the following - * will be populated/valid - */ - enum pcmk__client_type kind; - - qb_ipcs_connection_t *ipcs; /* IPC */ - - struct pcmk__remote_s *remote; /* TCP/TLS */ - - unsigned int queue_backlog; /* IPC queue length after last flush */ - unsigned int queue_max; /* Evict client whose queue grows this big */ -}; - -guint pcmk__ipc_client_count(void); -void pcmk__foreach_ipc_client(GHFunc func, gpointer user_data); -void pcmk__foreach_ipc_client_remove(GHRFunc func, gpointer user_data); - -void pcmk__client_cleanup(void); - -pcmk__client_t *pcmk__find_client(qb_ipcs_connection_t *c); -pcmk__client_t *pcmk__find_client_by_id(const char *id); -const char *pcmk__client_name(pcmk__client_t *c); -const char *pcmk__client_type_str(enum pcmk__client_type client_type); - -pcmk__client_t *pcmk__new_unauth_client(void *key); -pcmk__client_t *pcmk__new_client(qb_ipcs_connection_t *c, uid_t uid, gid_t gid); -void pcmk__free_client(pcmk__client_t *c); -void pcmk__drop_all_clients(qb_ipcs_service_t *s); -bool pcmk__set_client_queue_max(pcmk__client_t *client, const char *qmax); - -void pcmk__ipc_send_ack_as(const char *function, int line, pcmk__client_t *c, - uint32_t request, uint32_t flags, const char *tag); -#define pcmk__ipc_send_ack(c, req, flags, tag) \ - pcmk__ipc_send_ack_as(__FUNCTION__, __LINE__, (c), (req), (flags), (tag)) - -int pcmk__ipc_prepare_iov(uint32_t request, xmlNode *message, - uint32_t max_send_size, - struct iovec **result, ssize_t *bytes); -int pcmk__ipc_send_xml(pcmk__client_t *c, uint32_t request, xmlNode *message, - uint32_t flags); -int pcmk__ipc_send_iov(pcmk__client_t *c, struct iovec *iov, uint32_t flags); -xmlNode *pcmk__client_data2xml(pcmk__client_t *c, void *data, - uint32_t *id, uint32_t *flags); - -int pcmk__client_pid(qb_ipcs_connection_t *c); - -void pcmk__serve_attrd_ipc(qb_ipcs_service_t **ipcs, - struct qb_ipcs_service_handlers *cb); -void pcmk__serve_fenced_ipc(qb_ipcs_service_t **ipcs, - struct qb_ipcs_service_handlers *cb); -qb_ipcs_service_t *pcmk__serve_controld_ipc(struct qb_ipcs_service_handlers *cb); - -void pcmk__serve_based_ipc(qb_ipcs_service_t **ipcs_ro, - qb_ipcs_service_t **ipcs_rw, - qb_ipcs_service_t **ipcs_shm, - struct qb_ipcs_service_handlers *ro_cb, - struct qb_ipcs_service_handlers *rw_cb); - -void pcmk__stop_based_ipc(qb_ipcs_service_t *ipcs_ro, - qb_ipcs_service_t *ipcs_rw, - qb_ipcs_service_t *ipcs_shm); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/include/crm_internal.h b/include/crm_internal.h index 882cad8..15f9d2b 100644 --- a/include/crm_internal.h +++ b/include/crm_internal.h @@ -26,7 +26,7 @@ # include # include -# include +# include # include # include diff --git a/lib/cib/cib_remote.c b/lib/cib/cib_remote.c index ed93700..a011810 100644 --- a/lib/cib/cib_remote.c +++ b/lib/cib/cib_remote.c @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include diff --git a/lib/common/ipc.c b/lib/common/ipc.c index 331a76f..3e4b0bd 100644 --- a/lib/common/ipc.c +++ b/lib/common/ipc.c @@ -35,9 +35,7 @@ #include /* indirectly: pcmk_err_generic */ #include #include -#include - -#include /* PCMK__SPECIAL_PID* */ +#include #define PCMK_IPC_VERSION 1 diff --git a/lib/common/mainloop.c b/lib/common/mainloop.c index e3640f5..10450e4 100644 --- a/lib/common/mainloop.c +++ b/lib/common/mainloop.c @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include diff --git a/lib/common/remote.c b/lib/common/remote.c index 76c594b..f645d49 100644 --- a/lib/common/remote.c +++ b/lib/common/remote.c @@ -28,7 +28,7 @@ #include #include -#include +#include #include #include #include diff --git a/lib/lrmd/lrmd_client.c b/lib/lrmd/lrmd_client.c index a2c7200..a6c023b 100644 --- a/lib/lrmd/lrmd_client.c +++ b/lib/lrmd/lrmd_client.c @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include diff --git a/lib/pacemaker/pcmk_sched_messages.c b/lib/pacemaker/pcmk_sched_messages.c index 9d013be..3d09a5e 100644 --- a/lib/pacemaker/pcmk_sched_messages.c +++ b/lib/pacemaker/pcmk_sched_messages.c @@ -20,7 +20,7 @@ #include #include -#include +#include gboolean show_scores = FALSE; gboolean show_utilization = FALSE; diff --git a/maint/mocked/based.c b/maint/mocked/based.c index 0d5fd2d..2cfad9f 100644 --- a/maint/mocked/based.c +++ b/maint/mocked/based.c @@ -23,7 +23,7 @@ #include #if 0 -#include "crm/common/ipcs_internal.h" /* pcmk__client_t */ +#include "crm/common/ipc_internal.h" /* pcmk__client_t */ #include "crm/common/xml.h" /* crm_xml_add */ #endif #include "crm/msg_xml.h" /* F_SUBTYPE */ diff --git a/maint/mocked/based.h b/maint/mocked/based.h index ef1dc95..c214c08 100644 --- a/maint/mocked/based.h +++ b/maint/mocked/based.h @@ -11,7 +11,7 @@ #include /* size_t */ #include /* bool */ -#include /* pcmk__client_t */ +#include /* pcmk__client_t */ struct module_s;