Store extended information about a client connection
#include <sys/neutrino.h> int ConnectClientInfoExt( int scoid, struct _client_info ** info, int flags );
- 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().
- 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.
- Zero or more of the following:
- _NTO_CLIENTINFO_GETGROUPS — get the supplementary group IDs
Use the -l c option to qcc to link against this library. This library is usually included automatically.
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.
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.
- pid_t pid
- The client's process ID.
- pid_t sid
- Used internally by Qnet.
- _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 — used internally.
- _NTO_CI_FULL_GROUPS — indicates that the client information contains the full group list. Set by ConnectClientInfoExt(), but not ConnectClientInfo().
- struct _cred_info cred
- The user and group ID credentials; 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.
This list doesn't include the primary group ID (unless it was also added as a supplementary group).
0, or -1 if an error occurred (errno is set).
- A fault occurred when the kernel tried to access the buffers provided.
- The process doesn't have a connection scoid.