HP OpenVMS System Services Reference Manual
$ACM (Alpha, I64)
The $ACM service provides a common interface to all functions supported
by the Authentication and Credential Management (ACM) authority.
The caller must specify the function code and any applicable function
modifiers and item codes for the requested operation.
The $ACM service completes asynchronously; for synchronous completion,
use the $ACMW form of the service.
Format
SYS$ACM [efn], func, [context], itmlst, acmsb, [astadr], [astprm]
C Prototype
int sys$acm (unsigned int efn, unsigned int func, struct _acmecb
**context, void *itmlst, struct _acmesb *acmsb, void
(*astadr)(__unknown_params), int astprm);
Arguments
efn
OpenVMS usage: |
ef_number |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
Number of the event flag that is set when the $ACM request completes.
The efn argument is a longword containing this number;
however, $ACM uses only the low-order byte.
When the request is queued, $ACM clears the specified event flag. Then,
when the request completes, the specified event flag is set.
func
OpenVMS usage: |
function_code |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
Function code and modifiers specifying the operation that $ACM is to
perform. The func argument is a longword containing
the function code, logically 'OR'ed together with the modifiers. For
some programming languages this may be defined as a record structure.
Function codes have symbolic names of the following format:
ACME$_FC_code
Function modifiers have symbolic names of the following format:
ACME$M_modifier
The language support mechanisms specific to each programming language
define the names of each function code and modifier. Only one function
code can be specified across a dialogue sequence of related calls to
$ACM.
Most function codes require or allow additional information to be
passed in the call. This information is passed using the
itmlst argument, which specifies a list of one or more
item descriptors. Each item descriptor in turn specifies an item code,
which either controls the action to be performed, or requests specific
information to be returned.
context
OpenVMS usage: |
context |
type: |
longword pointer (signed) |
access: |
modify |
mechanism: |
by 32- or 64-bit reference |
Address of a longword to receive the 32-bit address of an ACM
communications buffer.
$ACM uses the ACM communications buffer for dialogue functions
(ACME$_FC_AUTHENTICATE_PRINCIPAL and ACME$_FC_CHANGE_PASSWORD) to
request that the caller provide additional information in a subsequent
call.
The context argument on a continuation call must
contain the same ACM communications buffer address returned by $ACM on
the previous call. The itmlst provided on a
continuation call must contain entries to fulfill each of the input
item set entries in the ACM communications buffer returned by $ACM on
the previous call.
The longword specified must contain a -1 on the first call in a
dialogue sequence of related calls. If additional information is
required to complete the request, $ACM returns a pointer in the
context argument to an ACM communications buffer that
describes the information. To continue with the particular operation
call, $ACM again specifying the function argument
previously provided.
The ACM communications buffer is user readable, but not user writable.
It consists of a structure header, an item set, and a string buffer
segment. The item set is an array of item set entries, each describing
an item of information that is needed to complete the request or
information that can be reported to a human user.
$ACM presents the item set entries in the logical presentation order
for a sequential interface, so calling programs that give a sequential
view to the user should process the item set entries in that $ACM
order. More advanced GUI programs may use simultaneous presentation
with distinctive placement for various message types.
The following diagram depicts the overall format of an ACM
communications buffer:
ACM Communications Buffer
The following table defines the ACM communications buffer header fields:
Descriptor Field |
Definition |
ACMECB$Q_CONTEXT_ID
|
A quadword containing a value used internally by $ACM to uniquely bind
the ACM communications buffer to the associated request across
iterative calls.
|
ACMECB$W_SIZE
|
A word containing the size of the ACM communications structure.
|
ACMECB$W_REVISION_LEVEL
|
A word containing a value that identifies the revision level of the ACM
communications structure.
|
ACMECB$L_ACME_ID
|
A longword containing the agent ID of the ACME agent that initiated
this dialogue sequence.
|
ACMECB$L_ITEM_SET_COUNT
|
A longword containing the number of item set entries in the item set.
|
ACMECB$PS_ITEM_SET
|
A longword containing the 32-bit address of the item set. The item set
is an array of item set entries that describes the information needed
by $ACM to complete the particular request.
|
The following diagram depicts the format of an item set entry:
The following table defines the item set entry fields:
Descriptor Field |
Definition |
ACMEIS$L_FLAGS
|
A longword containing a mask of flags that indicates the interpretation
of the ACMEIS$Q_DATA_1 and ACMEIS$Q_DATA_2 quadword-sized 32-bit
descriptors and the method for processing.
Each flag has a symbolic name that the language support mechanisms
specific to each programming language define. The following list
describes the flags:
- ACMEDLOGFLG$V_INPUT
When clear:
- ACMEIS$W_MSG_TYPE contains the message type associated with this
output data.
- ACMEIS$Q_DATA_1 and ACMEIS$Q_DATA_2 are 32-bit descriptors that
specify text to be displayed to the caller.
An address of 0 in either descriptor indicates the calling program
should ignore that descriptor.
A length of 0 with a nonzero address in either descriptor indicates
the calling program should report a separation indication to the user
if that is appropriate for the type of human interface involved. A line
mode command interface, for instance, will display a blank line.
When set:
- ACMEDLOGFLG$V_NOECHO
When clear:
- ACMEIS$Q_DATA_2 is a 32-bit descriptor that specifies the "default"
answer that will be assumed by $ACM if the caller responds to this item
set entry with an item specifying a length of zero. $ACM provides this
"default" answer to the calling program to allow for distinctive
display appropriate to the type of interface being supported. For
example, traditional line-mode interfaces in VMS will include such a
default answer within square brackets when prompting, while a character
cell screen interface might pre-fill a field.
When set:
The flag ACMEDLOGFLG$V_NOECHO is ignored when ACMEDLOGFLG$V_INPUT
is clear.
|
ACMEIS$W_ITEM_CODE
|
A word containing the item code that identifies the nature of
information associated with the item set. This field defines the item
code to use when specifying the requested information in the
itmlst argument in the subsequent call to $ACM. A
sequence of item set entries containing the same item code reflects a
linked list of related information. An item set with the
ACMEDLOGFLG$V_INPUT flag set or a different item code indicates the end
of the related list.
|
ACMEIS$W_MAX_LENGTH
|
When ACMEDLOGFLG$V_INPUT is set:
A word containing the maximum length (in bytes) of any input data
being requested by this item set. For example, the maximum length of a
principal name string. A value of 0 indicates that the only item the
calling program can return to satisfy the item set entry is an item
specifying zero length. When the calling program returns such a zero
length item, it thereby indicates confirmation, as might be indicated
by a prompt such as "Indicate when you have read that text".
|
ACMEIS$W_MSG_TYPE
|
When ACMEDLOGFLG$V_INPUT is clear:
A word containing a value that categorizes the output messages
described by 32-bit descriptors ACMEIS$Q_DATA_1 and ACMEIS$Q_DATA_2.
The language support mechanisms specific to each programming
language define the following symbols for the standard message
categories:
ACMEMC$K_DIALOGUE_ALERT---Text related to the immediately
preceding input operation. The calling program should bring this text
to the attention of a user prior to handling the renewed input item set
entry that typically follows. This message category is used, for
example, to indicate that a new password the user has specified does
not conform to local security policy.
ACM$K_GENERAL---General text.
ACM$K_HEADER---Text displayed before a succession of Selections.
ACMEMC$K_MAIL_NOTICES---Text related to mail operations, typically
an indication that new mail is waiting.
ACMEMC$K_PASSWORD_NOTICES---Text indicating that password
expiration is imminent.
ACM$K_TRAILER---Text displayed after a succession of Selections.
ACM$K_SELECTION---Acceptable choices for responding to the
subsequent prompt.
ACM$K_SYSTEM_IDENTIFICATION---System identification text.
ACM$K_SYSTEM_NOTICES---Text displayed to a user before
authentication.
ACM$K_WELCOME_NOTICES---Text displayed to a user after
authentication.
ACM$K_LOGON_NOTICES---Logon and logfail statistics.
In addition to those standard message categories, individual ACME
agents may define their own categories, but the meanings of those
categories are useful only to callers of $ACM that are specifically
recognized by the ACME agent in question, since those are the only
callers of $ACM to which the ACME agent will deliver such ACME-specific
categories. Documentation of the ACME-specific codes used by the VMS
ACME is shown in the VMS ACME-specific Output Message Categories
section of this description.
Documentation of ACME-specific codes in general comes in the
documentation from the vendor of each ACME agent.
For documentation of ACME-specific codes for the VMS ACME, see the
VMS ACME-specific Item Codes section of this description.
|
ACMEIS$Q_DATA_1
|
A quadword containing a 32-bit descriptor that describes information
(prompt text or other data, as described under the prior entry for
ACMEDLOGFLG$V_INPUT) applicable to determining an appropriate response.
|
ACMEIS$Q_DATA_2
|
A quadword containing a 32-bit descriptor that describes information
(default answer, secondary prompt text or other data described under
the prior entries for ACMEDLOGFLG$V_INPUT and ACMEDLOGFLG$V_NOECHO)
applicable to determining an appropriate response.
|
itmlst
OpenVMS usage: |
32-bit item_list_3 or 64-bit item_list_64b |
type: |
longword (unsigned) for 32-bit; quadword (unsigned) for
64-bit |
access: |
read only |
mechanism: |
by 32- or 64-bit reference |
Item list specifying information to be used in performing the function
and requesting information to be returned. The itmlst
argument is the 32- or 64-bit address of a list of item descriptors,
describing an item of information. An item list in 32-bit format is
terminated by a longword of 0; an item list in 64-bit format is
terminated by a quadword of 0.
The item list can be composed of up to 32 segments, connected by a
chain item (using item code ACME$_CHAIN) at the end of all but the last
segment pointing to the start of the next segment. All item descriptors
in a single segment must be of the same format (32-bit or 64-bit), but
a single item list can contain a mixture of segments composed of 32-bit
item descriptors and segments composed of 64-bit item descriptors.
The following diagram depicts the 32-bit format of a single item
descriptor:
The following table defines the item descriptor fields for 32-bit item
list entries:
Descriptor Field |
Definition |
Buffer length
|
A word specifying the length of the buffer (in bytes); the buffer
either supplies information to $ACM or receives information from $ACM.
The required length of the buffer varies, depending on the item code
specified, and is specified in the description of each item code.
|
Item code
|
A word containing an item code, which identifies the nature of the
information supplied to $ACM or which is received from $ACM. Each item
code has a symbolic name; the language support mechanisms specific to
each programming language define these symbolic names.
|
Buffer address
|
A longword containing the 32-bit address of the buffer that specifies
or receives the information.
|
Return length address
|
A longword containing the 32-bit address of a word to receive the
length (in bytes) of information returned by $ACM. If specified as 0,
no length is returned. For input items the return length address is
ignored.
|
The following diagram depicts the 64-bit format of a single item
descriptor:
The following table defines the item descriptor fields for 64-bit item
list entries:
Descriptor Field |
Definition |
MBO
|
A word that must contain a 1. The MBO and MBMO fields are used to
distinguish 32-bit and 64-bit item list entries.
|
Item code
|
A word containing an item code, which identifies the nature of the
information supplied to $ACM or that is received from $ACM.
Common item codes have symbolic names (beginning with the
characters "ACME$_") defined by the language support mechanisms
specific to each programming language. Individual ACME agents may also
define additional item codes specific to the functions of those ACME
agents.
|
MBMO
|
A longword that must contain a -1. The MBMO and MBO fields are used to
distinguish 32-bit and 64-bit item list entries.
|
Buffer length
|
A quadword specifying the length of the buffer (in bytes); the buffer
either supplies information to $ACM or receives information from $ACM.
The required length of the buffer varies, depending on the item code,
and is specified in the description of each item code.
|
Buffer address
|
A quadword containing the 64-bit address of the buffer that specifies
or receives the information.
|
Return length address
|
A quadword containing the 64-bit address of a quadword to receive the
length (in bytes) of information returned by $ACM. If specified as 0,
no length is returned. For input items the return length address is
ignored.
|
In an item list, no ACME-specific item codes can be included in an item
list until the ACME Context has been set with one of the following
codes:
ACME$_CONTEXT_ACME_ID
ACME$_CONTEXT_ACME_NAME
You can also implicitly set the ACME Context with one of the following
codes:
ACME$_TARGET_DOI_ID
ACME$_TARGET_DOI_NAME
These codes are described in the OpenVMS Programming Concepts Manual.
acmsb
OpenVMS usage: |
acm_status_block |
type: |
octaword array of 4 longwords |
access: |
write only |
mechanism: |
by 32- or 64-bit reference |
ACM status block that is to receive the final completion status. The
acmsb argument is the 32- or 64-bit address of the ACM
status block.
The following diagram depicts the structure of an ACM status block:
The following table defines the ACM status block fields:
Descriptor Field |
Definition |
ACMESB$L_STATUS
|
A longword containing the generalized completion status for the
requested operation.
|
ACMESB$L_SECONDARY_STATUS
|
A longword containing status that may indicate a more detailed
description of a failure.
|
ACMESB$L_ACME_ID
|
A longword containing the agent ID of the ACME agent that reported
additional status. An agent ID of 0 indicates that no additional status
was reported.
|
ACMESB$L_ACME_STATUS
|
A longword containing additional status information. Aside from a few
cases of item list errors described in the following text, the
interpretation of this value is specific to the context of the
reporting ACME agent.
|
Upon request initiation, $ACM sets the value of all fields within the
ACM status block to 0. When the requested operation completes. The $ACM
service writes condition values into the ACMESB$L_STATUS and
ACMESB$L_SECONDARY_STATUS fields.
If the status in the ACMESB$L_STATUS field is ACME$_AUTHFAILURE, that
is the only result that should be displayed or otherwise made known to
a user. The status in ACMESB$L_SECONDARY_STATUS (when the caller has
the SECURITY privilege, or is calling from kernel or executive mode)
contains the detailed reason for the failure, which may be used for
purposes that do not disclose the code to the user, such as the process
termination code supplied to $DELPRC (but not the image exit code
supplied to $EXIT).
Otherwise, the status in ACMESB$L_SECONDARY_STATUS should be considered
as subsidiary to that in ACMESB$L_STATUS and used to form a chained
message, unless the two cells contain identical values.
In either case, the caller of $ACM[W] can rely on the success bit (bit
0) of the ACMESB$L_STATUS and the ACMESB$L_SECONDARY_STATUS field
having the same setting. Either both low-order bits will be set
(success) or both will be clear (failure).
The ACMESB$L_ACME_STATUS field is valid only when the contents of the
ACMESB$L_ACME_ID field are nonzero, indicating which ACME agent
supplied the (possibly zero) value in ACMESB$L_ACME_STATUS.
There is one special format for such data in ACMESB$L_ACME_STATUS. If
$ACM rejects the request because of a bad entry in the item list, then
ACMESB$L_STATUS contains one of the following codes:
SS$_BADPARAM
|
Incorrect contents for the item code
|
SS$_BADITMCOD
|
Incorrect item code for the function
|
SS$_BADBUFLEN
|
Incorrect length for the item code
|
If ACMESB$L_STATUS contains one of the listed returns, then
ACME$L_ACME_STATUS contains the item code from the incorrect item,
which is an aid to debugging.
In all other cases, the value delivered in ACME$L_ACME_STATUS is
specific to the ACME agent that failed the request. An ACME agent can
return a longword value that indicates additional information about the
operation. $ACM writes this value in the ACMESB$L_ACME_STATUS field of
the ACM status block.
In these cases, you can expect the success of a valid value (one where
ACMESB$L_ACME_ID is not zero) in field ACMESB$L_ACME_STATUS to match
the "success" bits (bit 0) in fields ACMESB$L_STATUS and
ACMESB$L_SECONDARY_STATUS, although what constitutes a "success" value
in ACMESB$L_ACME_STATUS is subject to that interpretation specified for
the ACME agent that set the value. In particular, the values in the
ACMESB$L_ACME_STATUS field from certain ACME Agents might not be a
VMS-style message code.
astadr
OpenVMS usage: |
ast_procedure |
type: |
procedure value |
access: |
call without stack unwinding |
mechanism: |
by 32- or 64-bit reference |
AST service routine to be executed when $ACM completes. The
astadr argument is the 32- or 64-bit address of this
routine. The AST routine executes at the same access mode as the caller
of the $ACM service.
astprm
OpenVMS usage: |
user_arg |
type: |
quadword (unsigned) |
access: |
read only |
mechanism: |
by value |
AST parameter to be passed to the AST service routine specified by the
astprm argument. The astprm argument
is the longword parameter.
Function Codes This section describes the various function codes
supported by the $ACM service and lists the function modifiers and item
codes relevant to each function:
Function Code |
Purpose |
ACME$_FC_AUTHENTICATE_PRINCIPAL
|
Perform authentication and provide credentials.
|
ACME$_FC_CHANGE_PASSWORD
|
Select a new password.
|
ACME$_FC_EVENT
|
Log an event to an ACME agent.
|
ACME$_FC_FREE_CONTEXT
|
Abandon a dialogue mode Authentication or Password Change before it has
completed.
|
ACME$_FC_QUERY
|
Retrieve information from an ACME agent.
|
ACME$_FC_RELEASE_CREDENTIALS
|
Give up some of the credentials from a persona.
|
See the Description section for information relating to the modes of
operation and privilege requirements.
ACME$_FC_AUTHENTICATE_PRINCIPAL
The ACME$_FC_AUTHENTICATE_PRINCIPAL function requests authentication of
a principal based on standard or site-specific authentication criteria
and optionally requests credentials authorized for that principal.
You can specify the principal name using the ACME$_PRINCIPAL_NAME item
code. If you do not specify it on the initial call to $ACM, the ACME
agents supporting $ACM will try to use another method for determining
the principal name. For example, traditional VMS autologin processing
determines a principal name based on your terminal name. Of if your
call to $ACM was in dialogue mode, the ACM communication buffer
returned may prompt you to supply a principal name.
You can also guide how your request is to be processed by directing it
toward a specific domain of interpretation (DOI) with either the
ACME$_TARGET_DOI_NAME or ACME$_TARGET_DOI_ID item code. Using that
technique ensures that your request will be handled by the ACME agents
that support the specified domain of interpretation. If that domain of
interpretation is not configured on the system at the time of your
call, however, your request will fail. Leaving the domain of
interpretation to be defaulted increases your chance of successful
authentication, but does not guarantee any particular set of
credentials beyond the normal VMS credentials.
When the domain of interpretation under which your request is handled
is anything other than VMS, the ACME agents that support that domain of
interpretation will indicate an OpenVMS user name to which the
principal name should be mapped. In this case, the OpenVMS user name
must correspond to a valid entry in the OpenVMS authorization database
(SYSUAF.DAT) that has the UAF$V_EXTAUTH flag set. (When the
IGNORE_EXTAUTH flag is set in system parameter SECURITY_POLICY, the
UAF$V_EXTAUTH flag requirement does not apply.)
The VMS ACME agent uses that OpenVMS user name to provide supplemental
authorization processing (for example, account disabled or expired, or
model restrictions) and to provide security profile and quota
information applicable after a successful authentication.
You can use the ACME$M_ACQUIRE_CREDENTIALS function modifier to specify
that, if your authentication call is successful, you want credentials
returned. $ACM will return those credentials via persona extensions
attached to a persona whose handle is returned to a location specified
by item code ACME$_PERSONA_HANDLE_OUT.
If you want that persona to be based on some persona you already have,
specify the existing persona handle with the item code
ACME$_PERSONA_HANDLE_IN and, in addition to the function modifier
ACME$M_ACQUIRE_CREDENTIALS, specify one of the following two function
modifiers:
- ACME$M_MERGE_PERSONA---Requests that additional credentials you
acquire be added into the existing persona
- ACME$M_COPY_PERSONA---Requests that additional credentials you
acquire be added into a copy of the existing persona
|