ConnectClientInfo(), ConnectClientInfo_r()

Store information about a client connection

Synopsis:

#include <sys/neutrino.h>

int ConnectClientInfo( int scoid,
                       struct _client_info * info
                       int ngroups );

int ConnectClientInfo_r( int scoid,
                         struct _client_info * info
                         int ngroups );

Arguments:

scoid
A server connection ID that identifies the client process that you want to get information about, or -1 to get information about the calling process. 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
A pointer to a _client_info structure that the function can fill with information about the client. For more information, see below.
ngroups
The size of the caller's grouplist in the credential part of the _client_info structure. If you make it smaller than NGROUPS_MAX, you might get information only about a subset of the groups.

Library:

libc

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

Description:

These calls get information about a client connection identified by scoid, and store it in the buffer that info points to.

Note: These functions can handle no more than NGROUPS_MAX supplementary groups. For more groups, use ConnectClientInfoExt() instead.

The ConnectClientInfo() and ConnectClientInfo_r() functions are identical except in the way they indicate errors. See the Returns section for details.

A server uses these functions 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.

_client_info structure

The _client_info structure has at least the following members:

uint32_t nd
The client's node descriptor, 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()
pid_t pid
The client's process ID.
pid_t sid
Used internally by Qnet.
flags
  • _NTO_CI_ENDIAN_BIG — the client is on a big-endian machine.
  • _NTO_CI_BKGND_PGRP — the client's process group is in the background.
  • _NTO_CI_ORPHAN_PGRP — the client's process group has been orphaned.
  • _NTO_CI_STOPPED — the client is stopped.
  • _NTO_CI_UNABLE — the client doesn't have the required abilities; see ConnectClientInfoAble(), procmgr_ability(), and procmgr_ability_create().
  • _NTO_CI_FULL_GROUPS — indicates that the client information contains the full group list. Set by ConnectClientInfoExt(), but not ConnectClientInfo().
struct _cred_info cred
A _cred_info structure that describes the user and group ID credentials of the sending process.

The ngroups argument to ConnectClientInfo() indicates the size of the grouplist array in the _cred_info structure. If the group array size is zero, the ngroups member of the _cred_info is set to the number of groups available.

Returns:

The only difference between these functions is the way they indicate errors:

ConnectClientInfo()
If an error occurs, the function returns -1 and sets errno. Any other value returned indicates success.
ConnectClientInfo_r()
EOK is returned on success. This function does NOT set errno. If an error occurs, the function can return any value in the Errors section.

Errors:

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

Classification:

QNX Neutrino

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