SECURE_RPC(3NSL) Networking Services Library Functions SECURE_RPC(3NSL)

NAME


secure_rpc, authdes_getucred, authdes_seccreate, getnetname,
host2netname, key_decryptsession, key_encryptsession, key_gendes,
key_setsecret, key_secretkey_is_set, netname2host, netname2user,
user2netname - library routines for secure remote procedure calls

SYNOPSIS


cc [ flag... ] file... -lnsl [ library...]
#include <rpc/rpc.h>
#include <sys/types.h>
int authdes_getucred(const struct authdes_cred *adc, uid_t *uidp,
gid_t *gidp, short *gidlenp, gid_t *gidlist);


AUTH *authdes_seccreate(const char *name, const uint_t window,
const char *timehost, ckey);


int getnetname(char name [MAXNETNAMELEN+1]);


int host2netname(char name [MAXNETNAMELEN+1], const char *host,
const char *domain);


int key_decryptsession(const char *remotename, des_block *deskey);


int key_encryptsession(const char *remotename, des_block *deskey);


int key_gendes(des_block *deskey);


int key_setsecret(const char *key);


int key_secretkey_is_set(void)


int netname2host(const char *name, char *host, const int hostlen);


int netname2user(const char *name, uid_t *uidp, gid_t *gidp, int *gidlenp,
gid_t *gidlist [NGRPS]);


int user2netname(char name [MAXNETNAMELEN+1], const uid_t uid,
const char *domain);


DESCRIPTION


The RPC library functions allow C programs to make procedure calls on
other machines across the network.


RPC supports various authentication flavors. Among them are:

AUTH_NONE
No authentication (none).


AUTH_SYS
Traditional UNIX-style authentication.


AUTH_DES
DES encryption-based authentication.


The authdes_getucred() and authdes_seccreate() functions implement
the AUTH_DES authentication style. The keyserver daemon keyserv(8)
must be running for the AUTH_DES authentication system to work and
keylogin(1) must have been run. The AUTH_DES style of authentication
is discussed here. For information about the AUTH_NONE and AUTH_SYS
flavors of authentication, refer to rpc_clnt_auth(3NSL). See
rpc(3NSL) for the definition of the AUTH data structure.


The following functions documented on this page are MT-Safe. For the
MT-levels of other authentication styles, see relevant man pages.

authdes_getucred()
This is the first of two functions that
interface to the RPC secure authentication
system AUTH_DES. The second is the
authdes_seccreate() function. The
authdes_getucred() function is used on the
server side to convert an AUTH_DES
credential, which is operating system
independent, to an AUTH_SYS credential. The
authdes_getucred() function returns 1 if it
succeeds, 0 if it fails.

The *uidp parameter is set to the user's
numerical ID associated with adc. The *gidp
parameter is set to the numerical ID of the
user's group. The *gidlist parameter
contains the numerical IDs of the other
groups to which the user belongs. The
*gidlenp parameter is set to the number of
valid group ID entries specified by the
*gidlist parameter.

The authdes_getucred() function fails if
the authdes_cred structure was created with
the netname of a host. In such a case,
netname2host() should be used to get the
host name from the host netname in the
authdes_cred structure.


authdes_seccreate()
The second of two AUTH_DES authentication
functions, the authdes_seccreate() function
is used on the client side to return an
authentication handle that enables the use
of the secure authentication system. The
first field, name, specifies the network
name netname of the owner of the server
process. The field usually represents a
hostname derived from the host2netname()
utility, but the field might also represent
a user name converted with the
user2netname() utility.

The second field, window, specifies the
validity of the client credential in
seconds. If the difference in time between
the client's clock and the server's clock
exceeds window, the server rejects the
client's credentials and the clock will
have to be resynchronized. A small window
is more secure than a large one, but
choosing too small a window increases the
frequency of resynchronization due to clock
drift.

The third parameter, timehost, is the
host's name and is optional. If timehost is
NULL, the authentication system assumes
that the local clock is always in sync with
the timehost clock and does not attempt
resynchronization. If a timehost is
supplied, the system consults the remote
time service whenever resynchronization is
required. The timehost parameter is usually
the name of the host on which the server is
running.

The final parameter, ckey, is also
optional. If ckey is NULL, the
authentication system generates a random
DES key to be used for the encryption of
credentials. If ckey is supplied, it is
used for encryption.

If authdes_seccreate() fails, it returns
NULL.


getnetname()
This function returns the unique, operating
system independent netname of the caller in
the fixed-length array name. The function
returns 1 if it succeeds and 0 if it fails.


host2netname()
This function converts a domain-specific
hostname host to an operating system
independent netname. The function returns 1
if it succeeds and 0 if it fails. The
host2netname() function is the inverse of
the netname2host() function. If the domain
is NULL, host2netname() uses the default
domain name of the machine. If host is
NULL, it defaults to that machine itself.
If domain is NULL and host is an NIS name
such as myhost.sun.example.com, the
host2netname() function uses the domain
sun.example.com rather than the default
domain name of the machine.


key_decryptsession()
This function is an interface to the
keyserver daemon, which is associated with
RPC's secure authentication system
(AUTH_DES authentication). User programs
rarely need to call key_decryptsession() or
the associated functions
key_encryptsession(), key_gendes(), and
key_setsecret().

The key_decryptsession() function takes a
server netname remotename and a DES key
deskey, and decrypts the key by using the
public key of the server and the secret key
associated with the effective UID of the
calling process. The key_decryptsession()
function is the inverse of
key_encryptsession() function.


key_encryptsession()
This function is a keyserver interface that
takes a server netname remotename and a DES
key deskey, and encrypts the key using the
public key of the server and the secret key
associated with the effective UID of the
calling process. If the keyserver does not
have a key registered for the UID, it falls
back to using the secret key for the
netname nobody unless this feature has been
disabled. See keyserv(8). The
key_encryptsession() function is the
inverse of key_decryptsession() function.
The key_encryptsession() function returns 0
if it succeeds, -1 if it fails.


key_gendes()
This is a keyserver interface function used
to ask the keyserver for a secure
conversation key. Selecting a conversion
key at random is generally not secure
because the common ways of choosing random
numbers are too easy to guess. The
key_gendes() function returns 0 if it
succeeds, -1 if it fails.


key_setsecret()
This is a keyserver interface function used
to set the key for the effective UID of the
calling process. This function returns 0 if
it succeeds, -1 if it fails.


key_secretkey_is_set()
This is a keyserver interface function used
to determine if a key has been set for the
effective UID of the calling process. If
the keyserver has a key stored for the
effective UID of the calling process, the
key_secretkey_is_set() function returns 1.
Otherwise it returns 0.


netname2host()
This function converts an operating system
independent netname name to a domain-
specific hostname host. The hostlen
parameter is the maximum size of host. The
netname2host() function returns 1 if it
succeeds and 0 if it fails. The function is
the inverse of the host2netname() function.


netname2user()
This function converts an operating system
independent netname to a domain-specific
user ID. The netname2user() function
returns 1 if it succeeds and 0 if it
fails.The function is the inverse of the
user2netname() function.

The *uidp parameter is set to the user's
numerical ID associated with name. The
*gidp parameter is set to the numerical ID
of the user's group. The gidlist parameter
contains the numerical IDs of the other
groups to which the user belongs. The
*gidlenp parameter is set to the number of
valid group ID entries specified by the
gidlist parameter.


user2netname()
This function converts a domain-specific
username to an operating system independent
netname. The user2netname() function
returns 1 if it succeeds and 0 if it fails.
The function is the inverse of
netname2user() function.


ATTRIBUTES


See attributes(7) for descriptions of the following attributes:


+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT-Level | MT-Safe |
+---------------+-----------------+

SEE ALSO


chkey(1), keylogin(1), rpc(3NSL), rpc_clnt_auth(3NSL), attributes(7),
keyserv(8), newkey(8)

April 9, 2016 SECURE_RPC(3NSL)

tribblix@gmail.com :: GitHub :: Privacy