ConnectClientInfoExt()

Store extended information about a client connection

Synopsis:

#include <sys/neutrino.h>

int ConnectClientInfoExt( int scoid,
                          struct _client_info ** info,
                          int flags );

Arguments:

scoid
A server connection ID that identifies the client process that you want to get information about. This client is typically a process that's made a connection to the server to try to access a resource. You can get it from the _msg_info argument to MsgReceivev() or MsgInfo().
info
The address of a location where the function can store a pointer to a _client_info structure that the function can fill with information about the client. For more information, see below.
flags
Zero or more of the following:
  • _NTO_CLIENTINFO_GETGROUPS — get the supplementary group IDs

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

This call gets information about a client connection identified by scoid, allocates a buffer, stores the information in the buffer, and stores a pointer to the buffer in the location that info points to. Use ClientInfoExtFree() to free this buffer.

A server uses this function to determine whether or not a client has permission to access a resource. For example, in a resource manager, it would be called on an open() connection request.

The ConnectClientInfoExt() function is an extended version of ConnectClientInfo() that can handle more than NGROUPS_MAX supplementary groups.

_client_info structure

The _client_info structure has at least the following members:

uint32_t nd
The client's node ID.
pid_t pid
The client's process ID.
pid_t sid
Used internally by Qnet.
struct _cred_info cred
The user and group ID credentials; see below.

uint32_t nd

The nd (node descriptor) is a temporary numeric description of a remote node; ND_LOCAL_NODE (or 0) is the descriptor for the local node. For more information, see the Qnet Networking chapter of the System Architecture guide.

To: Use this function:
Compare two nd objects ND_NODE_CMP()
Convert a nd to text netmgr_ndtostr()
Convert text to a nd netmgr_strtond()

_cred_info structure

The cred member of the _client_info is a _cred_info structure that includes at least the following members:

uid_t ruid
The real user ID of the sending process.
uid_t euid
The effective user ID of the sending process.
uid_t suid
The saved user ID of the sending process.
gid_t rgid
The real group ID of the sending process.
gid_t egid
The effective group ID of the sending process.
gid_t sgid
The saved group ID of the sending process.
uint32_t ngroups
The number of groups actually stored in grouplist.
gid_t grouplist[]
The supplementary group IDs of the sending process.
Note: This list doesn't include the primary group ID (unless it was also added as a supplementary group).

Returns:

0, or -1 if an error occurred (errno is set).

Errors:

EFAULT
A fault occurred when the kernel tried to access the buffers provided.
EINVAL
The process doesn't have a connection scoid.

Classification:

QNX Neutrino

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes