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 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.
-
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
- 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.
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 |