HP OpenVMS System Services Reference Manual
 
 
 
$ACM
 
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 HP 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
  
 
  
  |