pacemaker  2.0.4-2deceaa
Scalable High-Availability cluster resource manager
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Typedefs | Enumerations | Functions
ipc.h File Reference

Wrappers for and extensions to libqb IPC. More...

#include <sys/uio.h>
#include <qb/qbipcc.h>
#include <crm/common/xml.h>
Include dependency graph for ipc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define create_reply(request, xml_response_data)   create_reply_adv(request, xml_response_data, __FUNCTION__);
 
#define create_request(task, xml_data, host_to, sys_to, sys_from, uuid_from)   create_request_adv(task, xml_data, host_to, sys_to, sys_from, uuid_from, __FUNCTION__)
 

Typedefs

typedef struct crm_ipc_s crm_ipc_t
 

Enumerations

enum  crm_ipc_flags {
  crm_ipc_flags_none = 0x00000000, crm_ipc_compressed = 0x00000001, crm_ipc_proxied = 0x00000100, crm_ipc_client_response = 0x00000200,
  crm_ipc_server_event = 0x00010000, crm_ipc_server_free = 0x00020000, crm_ipc_proxied_relay_response = 0x00040000, crm_ipc_server_info = 0x00100000,
  crm_ipc_server_error = 0x00200000
}
 

Functions

xmlNode * create_reply_adv (xmlNode *request, xmlNode *xml_response_data, const char *origin)
 
xmlNode * create_request_adv (const char *task, xmlNode *xml_data, const char *host_to, const char *sys_to, const char *sys_from, const char *uuid_from, const char *origin)
 
crm_ipc_tcrm_ipc_new (const char *name, size_t max_size)
 
bool crm_ipc_connect (crm_ipc_t *client)
 Establish an IPC connection to a Pacemaker component. More...
 
void crm_ipc_close (crm_ipc_t *client)
 
void crm_ipc_destroy (crm_ipc_t *client)
 
void pcmk_free_ipc_event (struct iovec *event)
 Free an I/O vector created by pcmk__ipc_prepare_iov() More...
 
int crm_ipc_send (crm_ipc_t *client, xmlNode *message, enum crm_ipc_flags flags, int32_t ms_timeout, xmlNode **reply)
 Send an IPC XML message. More...
 
int crm_ipc_get_fd (crm_ipc_t *client)
 
bool crm_ipc_connected (crm_ipc_t *client)
 
int crm_ipc_ready (crm_ipc_t *client)
 Check whether an IPC connection is ready to be read. More...
 
long crm_ipc_read (crm_ipc_t *client)
 
const char * crm_ipc_buffer (crm_ipc_t *client)
 
uint32_t crm_ipc_buffer_flags (crm_ipc_t *client)
 
const char * crm_ipc_name (crm_ipc_t *client)
 
unsigned int crm_ipc_default_buffer_size (void)
 
int crm_ipc_is_authentic_process (int sock, uid_t refuid, gid_t refgid, pid_t *gotpid, uid_t *gotuid, gid_t *gotgid)
 Check the authenticity of the IPC socket peer process. More...
 
xmlNode * create_hello_message (const char *uuid, const char *client_name, const char *major_version, const char *minor_version)
 

Detailed Description

Wrappers for and extensions to libqb IPC.

Definition in file ipc.h.

Macro Definition Documentation

#define create_reply (   request,
  xml_response_data 
)    create_reply_adv(request, xml_response_data, __FUNCTION__);

Definition at line 29 of file ipc.h.

#define create_request (   task,
  xml_data,
  host_to,
  sys_to,
  sys_from,
  uuid_from 
)    create_request_adv(task, xml_data, host_to, sys_to, sys_from, uuid_from, __FUNCTION__)

Definition at line 32 of file ipc.h.

Typedef Documentation

typedef struct crm_ipc_s crm_ipc_t

Definition at line 58 of file ipc.h.

Enumeration Type Documentation

Enumerator
crm_ipc_flags_none 
crm_ipc_compressed 
crm_ipc_proxied 
crm_ipc_client_response 
crm_ipc_server_event 
crm_ipc_server_free 
crm_ipc_proxied_relay_response 
crm_ipc_server_info 
crm_ipc_server_error 

Definition at line 39 of file ipc.h.

Function Documentation

xmlNode* create_hello_message ( const char *  uuid,
const char *  client_name,
const char *  major_version,
const char *  minor_version 
)

Definition at line 1811 of file ipc.c.

xmlNode* create_reply_adv ( xmlNode *  request,
xmlNode *  xml_response_data,
const char *  origin 
)

Definition at line 133 of file ipc.c.

xmlNode* create_request_adv ( const char *  task,
xmlNode *  xml_data,
const char *  host_to,
const char *  sys_to,
const char *  sys_from,
const char *  uuid_from,
const char *  origin 
)

Definition at line 88 of file ipc.c.

const char* crm_ipc_buffer ( crm_ipc_t client)

Definition at line 1420 of file ipc.c.

uint32_t crm_ipc_buffer_flags ( crm_ipc_t client)

Definition at line 1427 of file ipc.c.

void crm_ipc_close ( crm_ipc_t client)

Definition at line 1225 of file ipc.c.

bool crm_ipc_connect ( crm_ipc_t client)

Establish an IPC connection to a Pacemaker component.

Parameters
[in]clientConnection instance obtained from crm_ipc_new()
Returns
TRUE on success, FALSE otherwise (in which case errno will be set; specifically, in case of discovering the remote side is not authentic, its value is set to ECONNABORTED).

Definition at line 1158 of file ipc.c.

bool crm_ipc_connected ( crm_ipc_t client)

Definition at line 1277 of file ipc.c.

unsigned int crm_ipc_default_buffer_size ( void  )

Definition at line 71 of file ipc.c.

void crm_ipc_destroy ( crm_ipc_t client)

Definition at line 1240 of file ipc.c.

int crm_ipc_get_fd ( crm_ipc_t client)

Definition at line 1263 of file ipc.c.

int crm_ipc_is_authentic_process ( int  sock,
uid_t  refuid,
gid_t  refgid,
pid_t *  gotpid,
uid_t *  gotuid,
gid_t *  gotgid 
)

Check the authenticity of the IPC socket peer process.

If everything goes well, peer's authenticity is verified by the means of comparing against provided referential UID and GID (either satisfies), and the result of this check can be deduced from the return value. As an exception, detected UID of 0 ("root") satisfies arbitrary provided referential daemon's credentials.

Parameters
[in]sockIPC related, connected Unix socket to check peer of
[in]refuidreferential UID to check against
[in]refgidreferential GID to check against
[out]gotpidto optionally store obtained PID of the peer (not available on FreeBSD, special value of 1 used instead, and the caller is required to special case this value respectively)
[out]gotuidto optionally store obtained UID of the peer
[out]gotgidto optionally store obtained GID of the peer
Returns
0 if IPC related socket's peer is not authentic given the referential credentials (see above), 1 if it is, negative value on error (generally expressing -errno unless it was zero even on nonhappy path, -pcmk_err_generic is returned then; no message is directly emitted)
Note
While this function is tolerant on what constitutes authorized IPC daemon process (its effective user matches UID=0 or refuid, or at least its group matches refgid), either or both (in case of UID=0) mismatches on the expected credentials of such peer process shall be investigated at the caller when value of 1 gets returned there, since higher-than-expected privileges in respect to the expected/intended credentials possibly violate the least privilege principle and may pose an additional risk (i.e. such accidental inconsistency shall be eventually fixed).

Definition at line 1672 of file ipc.c.

const char* crm_ipc_name ( crm_ipc_t client)

Definition at line 1441 of file ipc.c.

crm_ipc_t* crm_ipc_new ( const char *  name,
size_t  max_size 
)

Definition at line 1128 of file ipc.c.

long crm_ipc_read ( crm_ipc_t client)

Definition at line 1373 of file ipc.c.

int crm_ipc_ready ( crm_ipc_t client)

Check whether an IPC connection is ready to be read.

Parameters
[in]clientConnection to check
Returns
Positive value if ready to be read, 0 if not ready, -errno on error

Definition at line 1309 of file ipc.c.

int crm_ipc_send ( crm_ipc_t client,
xmlNode *  message,
enum crm_ipc_flags  flags,
int32_t  ms_timeout,
xmlNode **  reply 
)

Send an IPC XML message.

Parameters
[in]clientConnection to IPC server
[in]messageXML message to send
[in]flagsBitmask of crm_ipc_flags
[in]ms_timeoutGive up if not sent within this much time (5 seconds if 0, or no timeout if negative)
[out]replyReply from server (or NULL if none)
Returns
Negative errno on error, otherwise size of reply received in bytes if reply was needed, otherwise number of bytes sent

Definition at line 1515 of file ipc.c.

void pcmk_free_ipc_event ( struct iovec *  event)

Free an I/O vector created by pcmk__ipc_prepare_iov()

Parameters
[in]eventI/O vector to free

Definition at line 464 of file ipc.c.