18.2.25. PMIx_Get_credential
PMIx_Get_credential, PMIx_Get_credential_nb — Request a security
credential from the PMIx server library or the host environment.
18.2.25.1. SYNOPSIS
#include <pmix.h>
pmix_status_t PMIx_Get_credential(const pmix_info_t info[], size_t ninfo,
pmix_byte_object_t *credential);
pmix_status_t PMIx_Get_credential_nb(const pmix_info_t info[], size_t ninfo,
pmix_credential_cbfunc_t cbfunc,
void *cbdata);
18.2.25.1.1. Python Syntax
from pmix import *
foo = PMIxClient()
# ... after a successful foo.init() ...
# the directives is a list of Python ``pmix_info_t`` dictionaries
pydirs = [{'key': PMIX_TIMEOUT,
'value': {'value': 10, 'val_type': PMIX_INT}}]
rc, cred = foo.get_credential(pydirs)
# on success, cred is a dictionary with 'bytes' and 'size' members
18.2.25.2. INPUT PARAMETERS
info: Pointer to an array of pmix_info_t(5) structures conveying directives that qualify the operation (see DIRECTIVES). ANULLvalue is supported when no directives are desired.ninfo: Number of elements in theinfoarray.
18.2.25.3. OUTPUT PARAMETERS
credential(blocking form): Address of apmix_byte_object_twithin which the credential is returned. The credential is opaque to the caller — it is returned as a byte object to support arbitrary binary formats, and no information about its source is provided. On success the object’sbytesbuffer is allocated by the library; the caller is responsible for releasing it withPMIX_BYTE_OBJECT_DESTRUCTwhen done.
The non-blocking form replaces credential with a callback:
cbfunc: Callback function of type pmix_credential_cbfunc_t invoked with the final status, the returned credential, and any accompanying information once the request completes.cbdata: Opaque pointer that is passed, unmodified, tocbfunc.
18.2.25.4. DESCRIPTION
Request a credential from the PMIx server library or the host environment. The credential is returned as a pmix_byte_object_t(5) to support potential binary formats — it is therefore opaque to the caller, and no information as to the source of the credential is provided.
PMIx_Get_credential is the blocking form: it does not return until the
credential is available (or the operation fails or times out). On success the
credential is returned in the caller-provided credential object.
PMIx_Get_credential_nb is the non-blocking form: it returns immediately, and
the provided cbfunc is invoked with the final status once the request
completes. This version is generally preferred in scenarios where the host
environment may have to contact a remote credential service, since it allows the
system to return additional information (for example, the identity of the issuing
agent) outside of the credential itself and visible to the application. That
information is delivered to cbfunc in its info array, which is owned by
the PMIx library and must not be released or altered by the receiving party.
As with all non-blocking PMIx APIs, callers of PMIx_Get_credential_nb must
keep the info array valid until cbfunc is invoked.
The request is serviced by the host environment if it supports the operation;
otherwise, the PMIx library attempts to generate the credential itself using an
internal security (psec) plugin. A client or tool that is not connected to a
local server, and a server whose host provides no credential support, are both
handled by the internal plugins.
18.2.25.5. DIRECTIVES
The following attributes are relevant to this operation. There are no required attributes; implementations may internally integrate with a security environment (for example, contacting a munge server).
PMIX_CRED_TYPE(char*) — a prioritized, comma-delimited list of desired credential types, for use in environments where multiple authentication mechanisms may be available. When returned in the callback, a string identifier of the credential type that was actually provided.PMIX_TIMEOUT(int) — maximum time, in seconds, to wait for a credential before timing out and returning an error. Optional for host environments that support the operation.
Implementations that support the operation but cannot directly process the
request pass the caller’s attributes to the host environment; in that case the
PMIX_USERID and PMIX_GRPID attributes are required to be included in the
array passed from the PMIx library to the host.
18.2.25.6. RETURN VALUE
For the blocking form, PMIX_SUCCESS indicates that the credential was returned
in the provided credential object. For the non-blocking form, a return of
PMIX_SUCCESS indicates only that the request was accepted for processing; the
final status, credential, and any information are delivered to cbfunc. If the
non-blocking form returns any value other than PMIX_SUCCESS, cbfunc will
not be called.
PMIX_SUCCESS— the credential has been (or, for the non-blocking form, will be) returned.PMIX_ERR_NOT_AVAILABLE— the operation cannot be serviced because the library’s progress engine has been stopped.PMIX_ERR_INIT— the PMIx library has not been initialized.
If the connection to the local server is lost while a non-blocking request is
outstanding, cbfunc is invoked with a status of PMIX_ERR_COMM_FAILURE.
Any other negative value indicates an appropriate error condition. PMIx error
constants are defined in pmix_common.h.
18.2.25.7. NOTES
The credential is opaque and is understandable only by a service compatible with
its issuer. The information array delivered to the non-blocking callback is owned
by the PMIx library and must not be released or modified by the caller; it is
unrelated to the info array passed into the call.