pacemaker  1.1.16-94ff4df
Scalable High-Availability cluster resource manager
ipcs.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2013 Andrew Beekhof <andrew@beekhof.net>
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This software is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 #ifndef CRM_COMMON_IPCS__H
20 # define CRM_COMMON_IPCS__H
21 
22 # include <qb/qbipcs.h>
23 # ifdef HAVE_GNUTLS_GNUTLS_H
24 # undef KEYFILE
25 # include <gnutls/gnutls.h>
26 # endif
27 
28 # include <crm/common/ipc.h>
29 # include <crm/common/mainloop.h>
30 
31 typedef struct crm_client_s crm_client_t;
32 
36 # ifdef HAVE_GNUTLS_GNUTLS_H
37  CRM_CLIENT_TLS = 3,
38 # endif
39 };
40 
41 struct crm_remote_s {
42  /* Shared */
43  char *buffer;
44  size_t buffer_size;
45  size_t buffer_offset;
49 
50  /* CIB-only */
52  char *token;
53 
54  /* TLS only */
55 # ifdef HAVE_GNUTLS_GNUTLS_H
56  gnutls_session_t *tls_session;
57  bool tls_handshake_complete;
58 # endif
59 };
60 
62 {
63  crm_client_flag_ipc_proxied = 0x00001, /* ipc_proxy code only */
64  crm_client_flag_ipc_privileged = 0x00002, /* root or cluster user */
65 };
66 
67 struct crm_client_s {
68  uint pid;
69 
70  uid_t uid;
71  gid_t gid;
72 
73  char *id;
74  char *name;
75  char *user;
76 
77  long long options;
78 
81  void *userdata;
82 
84  GList *event_queue;
85 
86  /* Depending on the value of kind, only some of the following
87  * will be populated/valid
88  */
89  enum client_type kind;
90 
91  qb_ipcs_connection_t *ipcs; /* IPC */
92 
93  struct crm_remote_s *remote; /* TCP/TLS */
94 
95 };
96 
97 extern GHashTable *client_connections;
98 
99 void crm_client_init(void);
100 void crm_client_cleanup(void);
101 
102 crm_client_t *crm_client_get(qb_ipcs_connection_t * c);
103 crm_client_t *crm_client_get_by_id(const char *id);
104 const char *crm_client_name(crm_client_t * c);
105 
106 crm_client_t *crm_client_new(qb_ipcs_connection_t * c, uid_t uid, gid_t gid);
108 void crm_client_disconnect_all(qb_ipcs_service_t *s);
109 
111  const char *tag, const char *function, int line);
112 
113 /* when max_send_size is 0, default ipc buffer size is used */
114 ssize_t crm_ipc_prepare(uint32_t request, xmlNode * message, struct iovec ** result, uint32_t max_send_size);
115 ssize_t crm_ipcs_send(crm_client_t * c, uint32_t request, xmlNode * message, enum crm_ipc_flags flags);
116 ssize_t crm_ipcs_sendv(crm_client_t * c, struct iovec *iov, enum crm_ipc_flags flags);
117 xmlNode *crm_ipcs_recv(crm_client_t * c, void *data, size_t size, uint32_t * id, uint32_t * flags);
118 
119 int crm_ipcs_client_pid(qb_ipcs_connection_t * c);
120 
121 #endif
void crm_client_destroy(crm_client_t *c)
Definition: ipc.c:348
client_type
Definition: ipcs.h:33
size_t buffer_offset
Definition: ipcs.h:45
void crm_client_disconnect_all(qb_ipcs_service_t *s)
Definition: ipc.c:271
mainloop_io_t * source
Definition: ipcs.h:48
uid_t uid
Definition: ipcs.h:70
uint32_t flags
Definition: ipcs.h:80
qb_ipcs_connection_t * ipcs
Definition: ipcs.h:91
uint32_t size
Definition: internal.h:52
int request_id
Definition: ipcs.h:79
xmlNode * crm_ipcs_recv(crm_client_t *c, void *data, size_t size, uint32_t *id, uint32_t *flags)
Definition: ipc.c:405
struct mainloop_io_s mainloop_io_t
Definition: mainloop.h:35
char * buffer
Definition: ipcs.h:43
struct crm_remote_s * remote
Definition: ipcs.h:93
crm_client_t * crm_client_get(qb_ipcs_connection_t *c)
Definition: ipc.c:204
char * user
Definition: ipcs.h:75
Wrappers for and extensions to glib mainloop.
void crm_client_init(void)
Definition: ipc.c:249
char * token
Definition: ipcs.h:52
void crm_ipcs_send_ack(crm_client_t *c, uint32_t request, uint32_t flags, const char *tag, const char *function, int line)
Definition: ipc.c:716
void gnutls_session_t
Definition: cib_remote.c:52
GList * event_queue
Definition: ipcs.h:84
ssize_t crm_ipcs_send(crm_client_t *c, uint32_t request, xmlNode *message, enum crm_ipc_flags flags)
Definition: ipc.c:691
int auth_timeout
Definition: ipcs.h:46
void * userdata
Definition: ipcs.h:81
long long options
Definition: ipcs.h:77
uint pid
Definition: ipcs.h:68
int event_timer
Definition: ipcs.h:83
size_t buffer_size
Definition: ipcs.h:44
gid_t gid
Definition: ipcs.h:71
crm_client_t * crm_client_get_by_id(const char *id)
Definition: ipc.c:215
crm_client_flags
Definition: ipcs.h:61
GHashTable * client_connections
Definition: ipc.c:201
#define uint32_t
Definition: stdint.in.h:158
char data[0]
Definition: internal.h:58
ssize_t crm_ipc_prepare(uint32_t request, xmlNode *message, struct iovec **result, uint32_t max_send_size)
Definition: ipc.c:539
void crm_client_cleanup(void)
Definition: ipc.c:258
char * id
Definition: ipcs.h:73
int crm_ipcs_client_pid(qb_ipcs_connection_t *c)
Definition: ipc.c:395
Wrappers for and extensions to libqb IPC.
const char * crm_client_name(crm_client_t *c)
Definition: ipc.c:235
bool authenticated
Definition: ipcs.h:51
crm_client_t * crm_client_new(qb_ipcs_connection_t *c, uid_t uid, gid_t gid)
Definition: ipc.c:294
int tcp_socket
Definition: ipcs.h:47
char * name
Definition: ipcs.h:74
crm_ipc_flags
Definition: ipc.h:41
ssize_t crm_ipcs_sendv(crm_client_t *c, struct iovec *iov, enum crm_ipc_flags flags)
Definition: ipc.c:618
uint64_t flags
Definition: remote.c:121