![]() |
HP OpenVMS systems documentation |
This manual describes a set of routines that the HP OPENVMS operating system uses to control resources, to allow process communication, to control I/O, and to perform other such operating system functions.
Revision/Update Information:
This manual supersedes the
HP OpenVMS System Services Reference Manual, Version 7.3-1
Software Version: OpenVMS Version 7.3-2
Hewlett-Packard Company
Palo Alto, California
© Copyright 2003 Hewlett-Packard Development Company, L.P.
Microsoft®, MS-DOS®, Visual C++®, Windows®, and Windows NT® are U.S. registered trademarks of Microsoft Corporation.
Intel and Intel Inside are trademarks or registered trademarks of Intel Corporation in the U.S. and other countries and are used under license. Pentium® is a U.S. registered trademark of Intel Corporation.
Motif and OSF/1 are trademarks of The Open Group in the U.S. and other countries. UNIX® is a registered trademark of The Open Group.
The information contained herein is subject to change without notice. The only warranties for HP products and services are set forth in the express warranty statements accompanying such products and services. Nothing herein should be construed as constituting an additional warranty. HP shall not be liable for technical or editorial errors or omissions contained herein.
Proprietary computer software. Valid license from HP required for possession, use or copying. Consistent with FAR 12.211 and 12.212, Commercial Computer Software, Computer Software Documentation, and Technical Data for Commercial Items are licensed to the U.S. Government under vendor's standard commercial license.
ZK4527
The HP OpenVMS documentation set is available on CD-ROM.
| Contents | Index |
This manual is intended for system and application programmers who want to call system services.
As of Version 7.0, the HP OpenVMS Alpha operating system provides support for 64-bit virtual memory addresses. This support makes the 64-bit virtual address space defined by the Alpha architecture available to the OpenVMS Alpha operating system and to application programs. In the 64-bit virtual address space, both process-private and system virtual address space extend beyond 2 GB. By using 64-bit address features, programmers can create images that map and access data beyond the previous limits of 32-bit virtual addresses.
New OpenVMS system services are available, and many existing services have been enhanced to manage 64-bit address space. The system services descriptions in this manual indicate the services that accept 64-bit addresses. A list of the OpenVMS system services that accept 64-bit addresses is available in the OpenVMS Programming Concepts Manual.
The following section briefly describes how 64-bit addressing support affects OpenVMS system services. For complete information about OpenVMS Alpha 64-bit addressing features, refer to the OpenVMS Programming Concepts Manual.
32-Bit System Service
A 32-bit system service only supports 32-bit addresses on any of its arguments that specify addresses. If passed by value on OpenVMS Alpha, a 32-bit virtual address is actually a 64-bit address that is sign-extended from 32 bits.64-Bit Friendly Interface
A 64-bit friendly interface can be called with all 64-bit addresses. A 32-bit system service interface is 64-bit friendly if, without a change in the interface, it needs no modification to handle 64-bit addresses. The internal code that implements the system service might need modification, but the system service interface will not.64-Bit System Service
A 64-bit system service is defined to accept all address arguments as 64-bit addresses (not necessarily 32-bit sign-extended values). A 64-bit system service also uses the entire 64 bits of all virtual addresses passed to it.
The 64-bit system services include the _64 suffix for services that accept 64-bit addresses by reference. For promoted services, this suffix distinguishes the 64-bit capable version from its 32-bit counterpart. For new services, it is a visible reminder that a 64-bit-wide address cell will be read/written. |
The OpenVMS system services that do not support 64-bit addresses and all user-written system services that are not explicitly enhanced to accept 64-bit addresses receive sign-extension checking. Any argument passed to these services that is not properly sign-extended causes the error status SS$_ARG_GTR_32_BITS to be returned.
The OpenVMS Programming Concepts Manual contains useful information for anyone who wants to call system services.
High-level language programmers can find additional information about calling system services in the language reference manual and language user's guide provided with the OpenVMS language.
Application developers using XA-compliant or other resource managers should refer to the OpenVMS Programming Concepts Manual.
The following documents might also be useful:
For additional information about HP OpenVMS products and services, visit the following World Wide Web address:
http://www.hp.com/products/openvms |
HP welcomes your comments on this manual. Please send comments to either of the following addresses:
| Internet | openvmsdoc@hp.com |
| Postal Mail |
Hewlett-Packard Company
OSSG Documentation Group, ZKO3-4/U08 110 Spit Brook Rd. Nashua, NH 03062-2698 |
For information about how to order additional documentation, visit the following World Wide Web address:
http://www.hp.com/go/openvms/doc/order |
The following conventions are used in this manual:
| Ctrl/ x | A sequence such as Ctrl/ x indicates that you must hold down the key labeled Ctrl while you press another key or a pointing device button. |
| PF1 x | A sequence such as PF1 x indicates that you must first press and release the key labeled PF1 and then press and release another key or a pointing device button. |
| [Return] |
In examples, a key name enclosed in a box indicates that you press a
key on the keyboard. (In text, a key name is not enclosed in a box.)
In the HTML version of this document, this convention appears as brackets, rather than a box. |
| ... |
A horizontal ellipsis in examples indicates one of the following
possibilities:
|
|
.
. . |
A vertical ellipsis indicates the omission of items from a code example or command format; the items are omitted because they are not important to the topic being discussed. |
| ( ) | In command format descriptions, parentheses indicate that you must enclose choices in parentheses if you specify more than one. |
| [ ] | In the HP OpenVMS System Services Reference Manual, brackets generally indicate default arguments. If an argument is optional, it is specified as such in the argument text. |
| | | In command format descriptions, vertical bars separate choices within brackets or braces. Within brackets, the choices are optional; within braces, at least one choice is required. Do not type the vertical bars on the command line. |
| { } | In command format descriptions, braces indicate required choices; you must choose at least one of the items listed. Do not type the braces on the command line. |
| bold type | Bold type represents the introduction of a new term. It also represents the name of an argument, an attribute, or a reason. |
| italic type | Italic type indicates important information, complete titles of manuals, or variables. Variables include information that varies in system output (Internal error number), in command lines (/PRODUCER= name), and in command parameters in text (where dd represents the predefined code for the device type). |
| UPPERCASE TYPE | Uppercase type indicates a command, the name of a routine, the name of a file, or the abbreviation for a system privilege. |
| Example | This typeface indicates code examples, command examples, and interactive screen displays. In text, this type also identifies URLs, UNIX commands and pathnames, PC-based commands and folders, and certain elements of the C programming language. |
| - | A hyphen at the end of a command format description, command line, or code line indicates that the command or statement continues on the following line. |
| numbers | All numbers in text are assumed to be decimal unless otherwise noted. Nondecimal radixes---binary, octal, or hexadecimal---are explicitly indicated. |
Condition values returned by system services not only indicate whether the service completed successfully, but can also provide other information. While the usual condition value indicating success is SS$_NORMAL, other values are also defined. For example, the condition value SS$_BUFFEROVERF, which is returned when a character string returned by a service is longer than the buffer provided to receive it, is a success code, but it also provides additional information.
Warning returns and some error returns indicate that the service may have performed some, but not all, of the requested function.
The particular condition values that each service can return are described in the Condition Values Returned section of each individual service description.
|
OpenVMS usage:
type: access: mechanism: |
cond_value
longword (unsigned) write only by value |
Longword condition value. All system services (except $EXIT) return by immediate value a condition value in R0.
Ends a transaction by aborting it.
SYS$ABORT_TRANS [efn] ,[flags] ,iosb [,[astadr] ,[astprm] ,[tid] ,[reason] ,[bid]]
int sys$abort_trans (unsigned int efn, unsigned int flags, struct _iosb *iosb,...);
efn
OpenVMS usage: ef_number type: longword (unsigned) access: read only mechanism: by value
Number of the event flag that is set when the service completes. If this argument is omitted, event flag 0 is used.flags
OpenVMS usage: mask_longword type: longword (unsigned) access: read only mechanism: by value
Flags specifying options for the service. The flags argument is a longword bit mask in which each bit corresponds to an option flag. The $DDTMDEF macro defines symbolic names for these option flags, described in Table SYS-1. All undefined bits must be 0. If this argument is omitted, no flags are used.
Table SYS-1 $ABORT_TRANS Option Flags Flag Description DDTM$M_NOWAIT Set this flag to indicate that the service should return to the caller without waiting for final cleanup. Note that $ABORT_TRANSW with the DDTM$M_NOWAIT flag set is not equivalent to $ABORT_TRANS. $ABORT_TRANS returns when the operation has been queued. The former does not return until the operation has been initiated. The latter returns as soon as the operation has been queued. The full range of status values may be returned from a nowait call. DDTM$M_SYNC Set this flag to specify that successful synchronous completion is to be indicated by returning SS$_SYNCH. When SS$_SYNCH is returned, the AST routine is not called, the event flag is not set, and the I/O status block is not filled in. iosb
OpenVMS usage: io_status_block type: quadword (unsigned) access: write only mechanism: by reference
I/O status block in which the following information is returned:
- The completion status of the service, returned as a condition value. See the Condition Values Returned section.
- An abort reason code that gives one reason why the transaction aborted, if the completion status of the service is SS$_NORMAL.
Note that, if there are multiple reasons why the transaction aborted, the abort reason code returned in the I/O status block might not be the same as the abort reason code passed in the reason argument. The DECdtm transaction manager returns one of the reasons in the I/O status block. It may return different reasons to different branches of the transaction.
For example, if the call to $ABORT_TRANS gives DDTM$_ABORTED as the reason and the transaction timeout expires at about the same time as the call to $ABORT_TRANS, then either the DDTM$_TIMEOUT or DDTM$_ABORTED reason code can be returned in the I/O status block.The $DDTMMSGDEF macro defines symbolic names for abort reason codes, which are defined in Table SYS-2:
Table SYS-2 Abort Reason Codes Symbolic Name Description DDTM$_ABORTED The application aborted the transaction without giving a reason. DDTM$_COMM_FAIL A communications link failed. DDTM$_INTEGRITY A resource manager integrity constraint check failed. DDTM$_LOG_FAIL A write operation to the transaction log failed. DDTM$_ORPHAN_BRANCH An unauthorized branch caused failure. DDTM$_PART_SERIAL A resource manager serialization check failed. DDTM$_PART_TIMEOUT The timeout specified by a resource manager expired. DDTM$_SEG_FAIL A process or image terminated. DDTM$_SERIALIZATION A DECdtm transaction manager serialization check failed. DDTM$_SYNC_FAIL The transaction was not globally synchronized; an authorized branch was not added to the transaction. DDTM$_TIMEOUT The timeout specified on $START_TRANS expired. DDTM$_UNKNOWN The reason is unknown. DDTM$_VETOED A resource manager was unable to commit the transaction. The following diagram shows the structure of the I/O status block:
| OpenVMS usage: | ast_procedure |
| type: | procedure value |
| access: | call without stack unwinding |
| mechanism: | by reference |
| OpenVMS usage: | user_arg |
| type: | longword (unsigned) |
| access: | read only |
| mechanism: | by value |
| OpenVMS usage: | trans_id |
| type: | octaword (unsigned) |
| access: | read only |
| mechanism: | by reference |
If this argument is omitted, $ABORT_TRANS aborts the default transaction of the calling process.
| OpenVMS usage: | cond_value |
| type: | longword (unsigned) |
| access: | read only |
| mechanism: | by value |
The default value for this argument is DDTM$_ABORTED.
| OpenVMS usage: | branch_id |
| type: | octaword (unsigned) |
| access: | read only |
| mechanism: | by reference |
The default value of this argument is zero, which is the BID of the branch that started the transaction.
The Abort Transaction service ends a transaction by aborting it.The $ABORT_TRANS system service:
- Initiates abort processing for the specified transaction, if it has not already been initiated.
If abort processing has not already been initiated, the DECdtm transaction manager instructs the resource managers to abort (roll back) the transaction operations so that none of those operations ever take effect. It delivers an abort event to each RM participant in the transaction that is associated with an RMI that requested abort events.- Removes the specified branch from the specified transaction in this process.
Preconditions for the successful completion of $ABORT_TRANS include:
- If the BID is zero, the calling process must have started the transaction.
- If the BID is nonzero, the calling process must contain the specified branch of the specified transaction.
- If the BID is nonzero, the tid argument must not be omitted. If you explicitly pass the BID, you must also explicitly pass the TID.
$ABORT_TRANS may fail for various reasons, including:
- The preconditions were not met.
- There has already been a call to $ABORT_TRANS, $END_TRANS, or $END_BRANCH for the specified branch.
Postconditions on successful completion of $ABORT_TRANS are listed in Table SYS-3:
Table SYS-3 Postconditions When$ABORT_TRANS Completes Successfully Postcondition Meaning The transaction is ended. If DDTM$M_NOWAIT is clear:
- The TID of the transaction is invalid; calls to any DECdtm system services except $GETDTI and $SETDTI that pass the TID will fail, and calls to resource managers that pass the TID will fail.
- The transaction no longer has any application or RM participants on the local node.
- All communications about the transaction between the local DECdtm transaction manager and other DECdtm transaction managers are finished (including the final "cleanup" acknowledgment).
The outcome of the transaction is abort. None of the operations of the transaction will ever take effect. DECdtm quotas are returned. If DDTM$M_NOWAIT is clear, all quotas allocated for the transaction by calls on the local node to DECdtm services are now returned. The transaction is not the default transaction of the calling process. If DDTM$M_NOWAIT is clear, then, if the transaction was the default transaction of the calling process, it is now no longer the default. $ABORT_TRANS will not complete successfully (that is, the event flag will not be set, the AST routine will not be called, and the I/O status block will not be filled in) until all branches on the local node have been removed from the transaction. Thus this call to $ABORT_TRANS cannot complete successfully until every authorized and synchronized branch on the local node has initiated a call to $END_TRANS, $END_BRANCH, or $ABORT_TRANS.
$ABORT_TRANS must deliver notification ASTs to resource managers participating in the transaction. Therefore it will not complete successfully while the calling process is either:
- In an access mode that is more privileged than the DECdtm calls made by any resource manager participating in the transaction. RMS journaling calls DECdtm in executive mode. Oracle Rdb and Oracle CODASYL DBMS call DECdtm in user mode.
- At AST level in the same access mode as the least privileged DECdtm calls made by any resource manager participating in the transaction.
For example, if Oracle Rdb is a participant in the transaction, $ABORT_TRANS will not complete successfully while the calling process is in supervisor, executive, or kernel mode, or while the calling process is at AST level.
Note that successful completion of $ABORT_TRANS is not indefinitely postponed by network failure.
None
ASTLM
$ABORT_TRANSW, $ACK_EVENT, $ADD_BRANCH, $ADD_BRANCHW, $CREATE_UID, $DECLARE_RM, $DECLARE_RMW, $END_BRANCH, $END_BRANCHW, $END_TRANS, $END_TRANSW, $FORGET_RM, $FORGET_RMW, $GETDTI, $GETDTIW, $GET_DEFAULT_TRANS, $JOIN_RM, $JOIN_RMW, $SETDTI, $SETDTIW, $SET_DEFAULT_TRANS, $SET_DEFAULT_TRANSW, $START_BRANCH, $START_BRANCHW, $START_TRANS, $START_TRANSW, $TRANS_EVENT, $TRANS_EVENTW
SS$_NORMAL If this was returned in R0, the request was successfully queued. If it was returned in the I/O status block, the service completed successfully. SS$_SYNCH The service completed successfully and synchronously (returned only if the DDTM$M_SYNC flag is set). SS$_ACCVIO An argument was not accessible by the caller. SS$_BADPARAM The options flags were invalid or the tid argument was omitted and the bid argument was not zero. SS$_BADREASON The abort reason code was invalid. SS$_CURTIDCHANGE The tid argument was omitted and a call to change the default transaction of the calling process was in progress. SS$_EXASTLM The process AST limit (ASTLM) was exceeded. SS$_ILLEFC The event flag number was invalid. SS$_INSFARGS A required argument was missing. SS$_INSFMEM There was insufficient system dynamic memory for the operation. SS$_NOCURTID An attempt was made to abort the default transaction (the tid argument was omitted), but the calling process did not have a default transaction. SS$_NOLOG The local node did not have a transaction log. SS$_NOSUCHBID The calling process did not contain the branch identified by the BID passed in the bid argument (possibly because there has already been a call to $ABORT_TRANS, $END_TRANS, or $END_BRANCH for that branch). This error is returned only if the bid argument is not zero.
SS$_NOSUCHTID A transaction with the specified transaction identifier does not exist. SS$_NOTORIGIN A bid of zero was specified and the calling process did not start the transaction. SS$_TPDISABLED The TP_SERVER process was not running on the local node. SS$_WRONGSTATE Commit processing for the transaction had already started. This can occur if bid is zero or the specified branch was unsynchronized.
Ends a transaction by aborting it.$ABORT_TRANSW always waits for the request to complete before returning to the caller. Other than this, it is identical to $ABORT_TRANS.
Do not call $ABORT_TRANSW from AST level, or from an access mode that is more privileged than the DECdtm calls made by any resource manager participant in the transaction. If you do, the $ABORT_TRANSW service will wait indefinitely.
SYS$ABORT_TRANSW [efn] ,[flags] ,iosb [,[astadr] ,[astprm] ,[tid] ,[reason] ,[bid]]
int sys$abort_transw (unsigned int efn, unsigned int flags, struct _iosb *iosb,...);
Acknowledges an event reported to a Resource Manager (RM) participant or Resource Manager instance (RMI).
SYS$ACK_EVENT [flags] ,report_id ,report_reply [,[reason] ,[beftime] ,[afttime] ,[part_name] ,[rm_context], [timout]]
int sys$ack_event (unsigned int flags, unsigned int report_id, int report_reply,...);
flags
OpenVMS usage: mask_longword type: longword (unsigned) access: read only mechanism: by value
Reserved to HP. This argument must be zero.report_id
OpenVMS usage: identifier type: longword (unsigned) access: read only mechanism: by value
The identifier of the event report being acknowledged by this call to $ACK_EVENT.report_reply
OpenVMS usage: cond_value type: longword (unsigned) access: read only mechanism: by value
Acknowledgment code appropriate to the event being acknowledged by this call to $ACK_EVENT. The following tables give the valid acknowledgment codes for the various events. The title of each table gives the event, and in brackets, its event code. The event code is passed in the event report block (see $DECLARE_RM).Acknowledgment of prepare or one-phase commit events gives a vote on the outcome of the transaction---either to commit or to abort. The tables for these events have a column labeled "Vote". A "yes" vote means that the RM participant wants to commit the transaction, while a "no" vote means that the RM participant cannot commit. The transaction will be committed only if all participants vote "yes".
Table SYS-4 Replies to an Abort Event Report (DDTM$K_ABORT) report_reply Description SS$_FORGET RM participant guarantees that the effects of its transaction operations will never be detected by any transaction that commits. Side effects:
On successful completion of the call to $ACK_EVENT, the RM participant is removed from the transaction, and the ASTLM quota consumed by the call to $JOIN_RM or $ACK_EVENT that added it to the transaction is returned.
DECdtm also releases any application threads that are waiting for the transaction to end (necessary but not sufficient condition). Any call to $END_TRANS, $END_BRANCH, or $ABORT_TRANS on a node for a transaction whose outcome is abort is not allowed to complete until after all abort event reports delivered to RM participants on that node have been acknowledged.
Table SYS-5 Replies to a Commit Event Report (DDTM$K_COMMIT) report_reply Description SS$_FORGET Allows the DECdtm transaction manager to forget the RM participant. The RM participant must not give this reply until it has either:
If the RM participant is associated with a nonvolatile RMI, then at some point after receiving this reply, the DECdtm transaction manager will delete the name of the RM participant from the transaction database. After SS$_FORGET replies have been given for all the RM participants in a transaction, that transaction ceases to be recoverable (some time after all these replies are given, the transaction is deleted from the transaction database). A subsequent call to $GETDTI can lead the resource manager to wrongly assume that the transaction had aborted.
- Completed the commit processing for its transaction operations.
- Safely stored enough information to ensure that this commit processing will inevitably complete (for example, logged that the transaction has committed in a private log).
If there is a failure after this reply is sent, a recoverable resource manager must be able to rely on its own safely stored information to determine if any of the commit processing associated with the RM participant needs to be restarted.
Side effects:
On successful completion of the call to $ACK_EVENT, the RM participant is removed from the transaction, and the ASTLM quota consumed by the call to $JOIN_RM or $ACK_EVENT that added it to the transaction is returned.
DECdtm also releases any application threads that are waiting for the transaction to end (necessary but not sufficient condition). Any call to $END_TRANS or $END_BRANCH on a node for a transaction whose outcome is commit cannot complete successfully until all commit event reports delivered to RM participants on that node have been acknowledged.
SS$_REMEMBER The RM participant requires that the DECdtm transaction manager stores its name and the outcome of the transaction (commit) in the transaction database. Note that for an RM participant associated with a volatile RMI, SS$_REMEMBER is treated in the same way as SS$_FORGET. Side effects:
On successful completion of the call to $ACK_EVENT, the RM participant is removed from the transaction, and the ASTLM quota consumed by the call to $JOIN_RM or $ACK_EVENT that added it to the transaction is returned.
DECdtm also releases any application threads that are waiting for the transaction to end (necessary but not sufficient condition). Any call to $END_TRANS or $END_BRANCH on a node for a transaction whose outcome is commit cannot complete successfully until all commit event reports delivered to RM participants on that node have been acknowledged.
Table SYS-6 Replies to a One-phase Commit Event Report (DDTM$K_ONE_PHASE_COMMIT) report_reply Vote Meaning SS$_NORMAL Yes The RM participant decided to commit the transaction, and has safely stored enough information to be able to keep this guarantee even if there is a recoverable failure, caused, for example, by a node crash. The DECdtm transaction manager does not log any information about the transaction.
Side effects:
On successful completion of the call to $ACK_EVENT, the RM participant is removed from the transaction, the transaction is ended, and the ASTLM quota consumed by the call to $JOIN_RM or $ACK_EVENT that added the RM participant to the transaction is returned.
DECdtm also allows the call to $END_TRANS to complete (necessary and sufficient condition).
SS$_PREPARED Yes RM participant decided not to accept the opportunity to decide the outcome of the transaction. It has performed only prepare processing for the transaction and requires full two-phase commit processing. This is equivalent to voting SS$_PREPARED on a prepare event. The RM participant can either commit or abort the operations of the transaction, and guarantees that it will abide by the DECdtm transaction manager's decision on whether the transaction (and therefore these operations) are committed or aborted.
A recoverable resource manager must not give this vote until it has safely stored enough information to be able to keep this guarantee even if there is a recoverable failure, caused, for example, by a node crash.
The DECdtm transaction manager will decide the outcome of the transaction, then inform the resource manager of the decision with a commit or abort event report delivered to the RM participant (assuming that it is associated with an RMI that requested these event reports).
Note that an application or other failure can cause the DECdtm transaction manager to decide to abort the transaction.
SS$_VETO No RM participant requires that the transaction be aborted and guarantees that the effects of that transaction on its resources will never be detected by any transaction that commits. The reason argument gives the reason why the RM participant is aborting the transaction. The DECdtm transaction manager does not log any information about the transaction.
Side effects:
On successful completion of the call to $ACK_EVENT, the RM participant is removed from the transaction, the transaction is ended, and the ASTLM quota consumed by the call to $JOIN_RM or $ACK_EVENT that added the RM participant to the transaction is returned.
DECdtm also allows the call to $END_TRANS to complete (necessary and sufficient condition).
Table SYS-7 Replies to a Prepare Event Report (DDTM$K_PREPARE) report_reply Vote Meaning SS$_FORGET Yes This is called a read-only vote. It is an optimization that allows an RM participant to vote "yes" and not receive a commit or abort event report. Side effects:
On successful completion of the call to $ACK_EVENT, the RM participant is removed from the transaction, and the ASTLM quota consumed by the call to $JOIN_RM or $ACK_EVENT that added it to the transaction is returned.
SS$_PREPARED Yes The RM participant can either commit or abort the operations of the transaction, and guarantees that it will abide by the DECdtm transaction manager's decision on whether the transaction (and therefore these operations) are committed or aborted. In other words, the RM participant guarantees that the behavior of its resources will never be inconsistent with that decision, insofar as that behavior is detected by any transactions that commit. A recoverable resource manager must not give this vote until it has safely stored enough information to be able to keep this guarantee even if there is a recoverable failure, caused, for example, by a node crash.
The DECdtm transaction manager will decide the outcome of the transaction, then inform the resource manager of the decision with a commit or abort event report delivered to the RM participant (assuming that it is associated with an RMI that requested these event reports) or, in the event of a failure, using the resource manager's recovery mechanism.
SS$_VETO No RM participant requires that the transaction be aborted. The reason argument gives the reason why the RM participant is aborting the transaction. The RM participant guarantees that the effects of its transaction operations will never be detected by any transaction that commits.
Side effects:
The DECdtm transaction manager will deliver an abort event report for the transaction to the RM participant.
Table SYS-8 Replies to a Default Transaction Started Event Report (DDTM$K_STARTED_DEFAULT) report_reply Description SS$_NORMAL Adds a new RM participant running in the calling process to the transaction to which a new branch is being added. The new RM participant is associated with the RMI to which the default transaction started event was reported. The part_name and rm_context arguments specify the name of the new RM participant and its context. Side effects:
The postconditions on successful completion of the call to $ACK_EVENT are the same as those for $JOIN_RM.
DECdtm also allows the call to $START_TRANS or $START_BRANCH that is adding the new branch to complete (necessary but not sufficient condition). That call cannot complete successfully until all default transaction-started event reports delivered to RMIs in that process have been acknowledged.
SS$_FORGET Acknowledgment of the event report. Side effects:
DECdtm allows the call to $START_TRANS or $START_BRANCH that is adding the new branch to complete (necessary but not sufficient condition).
That call cannot complete successfully until all default transaction-started event reports delivered to RMIs in that process have been acknowledged.
Table SYS-9 Replies to a Nondefault Transaction Started Event Report (DDTM$K_STARTED_NONDEFAULT) report_reply Description SS$_NORMAL Adds a new RM participant running in the calling process to the transaction to which a new branch is being added. The new RM participant is associated with the RMI to which the nondefault transaction started event was reported. The part_name and rm_context arguments specify the name of the new RM participant and its context. Side effects:
The postconditions on successful completion of the call to $ACK_EVENT are the same as those for $JOIN_RM.
DECdtm also allows the call to $START_TRANS or $START_BRANCH that is adding the new branch to complete (necessary but not sufficient condition). That call cannot complete successfully until all default transaction-started event reports delivered to RMIs in that process have been acknowledged.
SS$_FORGET Acknowledgment of the event report. Side effects:
DECdtm allows the call to $START_TRANS or $START_BRANCH that is adding the new branch to complete (necessary but not sufficient condition).
That call cannot complete successfully until all default transaction-started event reports delivered to RMIs in that process have been acknowledged.
reason
OpenVMS usage: cond_value type: longword (unsigned) access: read only mechanism: by value
A code that gives the reason why the RM participant is aborting the transaction.This argument is ignored unless the value in the report_reply argument is SS$_VETO and the event being acknowledged is a prepare or one-phase commit event.
The $DDTMMSGDEF macro defines symbolic names for abort reason codes described in Table SYS-10. The default value for this argument is DDTM$_VETOED.
Table SYS-10 Abort Reason Codes Symbolic Name Description DDTM$_ABORTED Application aborted the transaction without giving a reason. DDTM$_COMM_FAIL Transaction aborted because a communications link failed. DDTM$_INTEGRITY Transaction aborted because a resource manager integrity constraint check failed. DDTM$_LOG_FAIL Transaction aborted because an attempt to write to the transaction log failed. DDTM$_ORPHAN_BRANCH Transaction aborted because it had an unauthorized branch. DDTM$_PART_SERIAL Transaction aborted because a resource manager serialization check failed. DDTM$_PART_TIMEOUT Transaction aborted because a resource manager timeout expired. DDTM$_SEG_FAIL Transaction aborted because a process or image terminated. DDTM$_SERIALIZATION Transaction aborted because a serialization check failed. DDTM$_SYNC_FAIL Transaction aborted because a branch had been authorized for it but had not been added to it. DDTM$_TIMEOUT Transaction aborted because its timeout expired. DDTM$_UNKNOWN Transaction aborted; reason unknown. DDTM$_VETOED Transaction aborted because a resource manager was unable to commit it. beftime
OpenVMS usage: utc_date_time type: octaword (unsigned) access: read only mechanism: by reference
Reserved to HP.afttime
OpenVMS usage: utc_date_time type: octaword (unsigned) access: read only mechanism: by reference
Reserved to HP.part_name
OpenVMS usage: char_string type: character-coded text string access: read only mechanism: by descriptor--fixed-length string descriptor
The name of the new RM participant that is added to the transaction by this call to $ACK_EVENT. This argument is ignored unless the event being acknowledged is of type Transaction Started and the value of the report_reply argument is SS$_NORMAL.If this argument is omitted (the default) or its value is zero, the name of the new RM participant is the same of that of the RMI with which it is associated.
The string passed in this argument must be no longer than 32 characters.
To ensure smooth operation in a mixed-network environment, refer to the chapter entitled Managing DECdtm Services in the HP OpenVMS System Manager's Manual, for information on defining node names.
rm_context
OpenVMS usage: userarg type: longword (unsigned) access: read only mechanism: by value
The context associated with the new RM participant. This argument is ignored unless the value of the report_reply argument is SS$_NORMAL, and the event being acknowledged is of type Transaction Started.The context of the new RM participant is passed in the event reports subsequently delivered to that RM participant.
The context is used to pass information specific to the new RM participant from the main line code into the event handler specified in the call to $DECLARE_RM that created the RMI with which the new RM participant is associated.
If this argument is omitted (the default) or is zero, the context associated with the new RM participant is the same of that of the RMI with which it is associated.
timout
OpenVMS usage: date_time type: quadword (unsigned) access: read only mechanism: by reference
Reserved to HP.
The $ACK_EVENT system service:
- Acknowledges an event report delivered by the DECdtm transaction manager to an RM participant or RMI in the calling process.
Every event report delivered by the DECdtm transaction manager to an RM participant or RMI must be acknowledged by a call to $ACK_EVENT specifying the identifier of the event report. This acknowledgment need not come from AST context. The caller of $ACK_EVENT must be in the same access mode as, or a more privileged access mode than, that in which the event handler AST was delivered.
The DECdtm transaction manager may deliver multiple event reports to an RMI, but delivers only one event report at a time to an RM participant. For example, if a prepare event report has been delivered to an RM participant, and the transaction is aborted while the RM participant is doing its prepare processing, then the DECdtm transaction manager does not deliver an abort event report to that RM participant until it has acknowledged the prepare event report by a call to $ACK_EVENT.
After acknowledging the event report, the RMI or RM participant should no longer access the event report block.- Adds a new RM participant to a transaction, if the event being acknowledged is of type Transaction Started and the value of the report_reply argument is SS$_NORMAL.
Note that the new RM participant cannot be the coordinator of the transaction.- Removes an RM participant from a transaction if the event being acknowledged is one of the events listed in the following table and the report_reply argument is as listed in this table:
Event report_reply Abort SS$_FORGET Commit SS$_FORGET or SS$_REMEMBER Prepare SS$_FORGET or SS$_VETO One-phase commit SS$_NORMAL or SS$_VETO
None
None
$ABORT_TRANS, $ABORT_TRANSW, $ADD_BRANCH, $ADD_BRANCHW, $CREATE_UID, $DECLARE_RM, $DECLARE_RMW, $END_BRANCH, $END_BRANCHW, $END_TRANS, $END_TRANSW, $FORGET_RM, $FORGET_RMW, $GETDTI, $GETDTIW, $GET_DEFAULT_TRANS, $JOIN_RM, $JOIN_RMW, $SETDTI, $SETDTIW, $SET_DEFAULT_TRANS, $SET_DEFAULT_TRANSW, $START_BRANCH, $START_BRANCHW, $START_TRANS, $START_TRANSW, $TRANS_EVENT, $TRANS_EVENTW
SS$_NORMAL The request was successful. SS$_ACCVIO An argument was not accessible to the caller. SS$_BADPARAM Either the options flags were invalid, or the reply passed in the report_reply argument was invalid for the type of event being acknowledged. SS$_BADREASON The abort reason code passed in the reason argument was invalid. SS$_EXASTLM The process AST limit (ASTLM) was exceeded. SS$_ILLEFC The event flag number was invalid. SS$_INSFARGS A required argument was missing. SS$_INSFMEM There was insufficient system dynamic memory for the operation. SS$_INVBUFLEN The string passed in the part_name argument was too long. SS$_NOSUCHREPORT Either an event report with the specified report identifier had not been delivered to any RM participant or RMI in the calling process, or that event report had already been acknowledged. SS$_WRONGACMODE The caller was in a less privileged access mode than that of the RMI whose event handler was used to deliver the event report that is being acknowledged by this call to $ACK_EVENT.
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.
SYS$ACM [efn], func, [context], itmlst, acmsb, [astadr], [astprm]
int sys$acm (unsigned int efn, unsigned int func, struct _acmecb **context, void *itmlst, struct _acmesb *acmsb, void (*astadr)(__unknown_params), int astprm);
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_codeFunction modifiers have symbolic names of the following format:
ACME$M_modifierThe 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:
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:
|
| 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. |
| 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. |
| 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 |
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.
| OpenVMS usage: | acm_status_block |
| type: | octaword array of 4 longwords |
| access: | write only |
| mechanism: | by 32- or 64-bit reference |
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.
| OpenVMS usage: | ast_procedure |
| type: | procedure value |
| access: | call without stack unwinding |
| mechanism: | by 32- or 64-bit reference |
| OpenVMS usage: | user_arg |
| type: | quadword (unsigned) |
| access: | read only |
| mechanism: | by value |
| 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.
Function Modifiers This section describes the various function modifiers for the function codes supported by the $ACM service.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
In either case, a handle to the resulting persona will be returned as specified by item code ACME$_PERSONA_HANDLE_OUT.
When a new persona is created, the ISS$_PRIMARY_EXTENSION designator indicates which persona extension representing the domain of interpretation was responsible for authenticating the user.
On a subsequent call $ACM will use that designator to guide processing of the ACME$M_DEFAULT_PRINCIPAL function modifier, for instance when there is an ACME$_FC_CHANGE_PASSWORD request.
ACME$_FC_CHANGE_PASSWORD
The ACME$_FC_CHANGE_PASSWORD function performs a password change operation. All aspects of the ACME$FC_CHANGE_PASSWORD function can also be performed as part of the ACME$_FC_AUTHENTICATE_PRINCIPAL function. Some degree of the ACME$_FC_AUTHENTICATE_PRINCIPAL function is also performed as part of ACME$_FC_CHANGE_PASSWORD to ensure the identity of the user changing the password. The primary and secondary passwords can be changed independently.This function requires the ACME$_NEW_PASSWORD_FLAGS item code.
ACME$_FC_EVENT
The ACME$_FC_EVENT function provides a simple logging feature that can be used to generate certain events related to the policy of a domain of interpretation. To log an event, supply the desired "event type" item code followed by the appropriate "data" item codes pertaining to the "target" domain of interpretation.To determine what event processing might be available, refer to the documentation provided by the vendors of the supporting ACME agents.
ACME$_FC_FREE_CONTEXT
The ACME$_FC_FREE_CONTEXT function is used to terminate iterative processing of a request. The address of the ACM communications buffer associated with the request must be specified using the context argument.ACME$_FC_QUERY
The ACME$_FC_QUERY function provides a simple key-based query feature that can be used to obtain certain information related to the policy of a domain of interpretation. To look up an item of information, supply the desired "key" item code followed by the appropriate "data" item code.To determine what query processing might be available, refer to the documentation provided by the vendors of the supporting ACME agents.
ACME$_FC_RELEASE_CREDENTIALS
The ACME$_FC_RELEASE_CREDENTIALS function removes credentials for a particular domain of interpretation from the specified persona. When the domain of interpretation is specified as "VMS", all non-native credentials are released and the persona is deleted. The "VMS" credentials cannot be removed from either the currently active or the process' natural persona. Thus, you cannot use the $ACM service to delete these personae.
Table SYS-11 indicates which Function Modifiers are applicable to the various Function Codes:
| Function Codes | ||||||
|---|---|---|---|---|---|---|
| Function Modifiers | Authenticate Principal | Change Password | Event | Free Context | Query | Release Credentials |
| ACME$M_ACQUIRE_CREDENTIALS | IP | |||||
| ACME$M_COPY_PERSONA | <> | |||||
| ACME$M_DEFAULT_PRINCIPAL | <> | <> | ||||
| ACME$M_FOREIGN_POLICY_HINTS | SR | |||||
| ACME$M_MERGE_PERSONA | <> | |||||
| ACME$M_NOAUDIT | SR | |||||
| ACME$M_NOAUTHORIZATION | SR | |||||
| ACME$M_OVERRIDE_MAPPING | IR | |||||
| ACME$M_TIMEOUT | ||||||
| ACME$M_UCS2_4 | <> | <> | <> | <> | <> | |
<> ---Permitted
IP---IMPERSONATE Privilege Required for the MAPPED _VMS _USERNAME to differ from the one current when the initial call to $ACM is made
IR---IMPERSONATE Privilege Required to override default values
SR---SECURITY Privilege Required
ACME$M_ACQUIRE_CREDENTIALS
The ACME$M_ACQUIRE_CREDENTIALS function modifier requests credentials be acquired during a successful authentication.ACME$M_COPY_PERSONA
The ACME$M_COPY_PERSONA function modifier requests acquired credentials be attached to a copy of the persona specified with item code ACME$_PERSONA_HANDLE_IN.ACME$M_DEFAULT_PRINCIPAL
The ACME$M_DEFAULT_PRINCIPAL specifies that the principal name and target domain of interpretation should be taken from the input persona, such as for changing the password of the logged-in user or reauthenticating the logged-in user.ACME$M_FOREIGN_POLICY_HINTS
The ACME$M_FOREIGN_POLICY_HINTS function modifier indicates ACME agents should honor the ACME$M_NOAUDIT and ACME$M_NOAUTHORIZATION function modifiers for non-VMS domains of interpretation.ACME$M_MERGE_PERSONA
The ACME$M_MERGE_PERSONA function modifier requests acquired credentials be attached to the persona specified with item code ACME$_PERSONA_HANDLE_IN.ACME$M_NOAUDIT
The ACME$M_NOAUDIT function modifier indicates that auditing actions should not be performed. Unless the ACME$M_FOREIGN_POLICY_HINTS function modifier is also specified, this modifier applies only to the VMS domain of interpretation.ACME$M_NOAUTHORIZATION
The ACME$M_NOAUTHORIZATION function modifier indicates authorization restrictions, such as the enforcement of modal constraints, should not apply. This provides a mechanism for performing pure authentication operations. Unless the ACME$M_FOREIGN_POLICY_HINTS function modifier is also specified, this modifier applies only to the VMS domain of interpretation.ACME$M_OVERRIDE_MAPPING
The ACME$M_OVERRIDE_MAPPING function modifier allows for the acquisition of non-VMS credentials during a persona merge or copy operation. This occurs when an externally authorized principal name maps to an OpenVMS user name that differs from the user name associated with the native (VMS) credentials. By default, mixing credentials is prohibited.ACME$M_TIMEOUT
The ACME$M_TIMEOUT modifier indicates that the caller requests timeout processing. The timeout interval is specified by the ACME$_TIMEOUT_INTERVAL item code.Timeout processing is always enforced for non-privileged callers. Privileged callers (those running in exec mode or kernel mode or possessing SECURITY privilege) must explicitly specify ACME$M_TIMEOUT for timeout processing to be enforced.
ACME$M_UCS2_4
The ACME$M_UCS2_4 function modifier indicates item codes that specify string values use a 4-byte UCS-2 (Unicode) representation rather than 8-bit ASCII.
Item codes are 16-bit unsigned values and are encoded as follows:
The item codes can be categorized in three different ways and are described as follows:
See the Item Codes section for a description of the common item codes and their data formats.
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. Common Item Codes This section describes the common item codes for the function codes supported by the $ACM service.
The item code space is partitioned into common items and ACME-specific items. ACME-specific items are used to request information that is unique to a particular domain of interpretation. The item codes described in this section fall into the common item code space.
Table SYS-12 indicates which Common Item Codes are applicable to the various Function Codes:
| Function Codes | ||||||
|---|---|---|---|---|---|---|
| Item Codes | Authenticate Principal | Change Password | Event | Free Context | Query | Release Credentials |
| ACME$_ACCESS_MODE | <> | |||||
| ACME$_ACCESS_PORT (U) | IR | IR | ||||
| ACME$_AUTH_MECHANISM | <> | |||||
| ACME$_AUTHENTICATING_DOI_ID (O) | <> | <> | ||||
| ACME$_AUTHENTICATING_DOI_NAME (U,O) | <> | <> | ||||
| ACME$_CHAIN | <> | <> | <> | <> | <> | |
| ACME$_CHALLENGE_DATA | IR | |||||
| ACME$_CONTEXT_ACME_ID (U) | <> | <> | ||||
| ACME$_CONTEXT_ACME_NAME | <> | <> | ||||
| ACME$_CREDENTIALS_NAME (U) | <>++ | |||||
| ACME$_CREDENTIALS_TYPE | <>++ | |||||
| ACME$_DIALOGUE_SUPPORT | <> | <> | ||||
| ACME$_EVENT_DATA_IN | <> | |||||
| ACME$_EVENT_DATA_OUT (O) | <> | |||||
| ACME$_EVENT_TYPE | <> | |||||
| ACME$_LOCALE (U) | <> | <> | ||||
| ACME$_LOGON_INFORMATION (O) | <> | |||||
| ACME$_LOGON_TYPE | IR | |||||
| ACME$_MAPPED_VMS_USERNAME (U,O) | <> | <> | ||||
| ACME$_MAPPING_ACME_ID (O) | <> | <> | ||||
| ACME$_MAPPING_ACME_NAME (U,O) | <> | <> | ||||
| ACME$_NEW_PASSWORD_1 (U) | <> | <> | ||||
| ACME$_NEW_PASSWORD_2 (U) | <> | <> | ||||
| ACME$_NEW_PASSWORD_FLAGS | <> | <> | ||||
| ACME$_NEW_PASSWORD_SYSTEM (U) | SR | SR | ||||
| ACME$_NULL | <> | <> | <> | <> | <> | |
| ACME$_PASSWORD_1 (U) | <> | <> | ||||
| ACME$_PASSWORD_2 (U) | <> | <> | ||||
| ACME$_PASSWORD_SYSTEM (U) | <> | <> | ||||
| ACME$_PERSONA_HANDLE_IN | <> | |||||
| ACME$_PERSONA_HANDLE_OUT (O) | <> | |||||
| ACME$_PHASE_TRANSITION (O) | ||||||
| ACME$_PRINCIPAL_NAME_IN (U) | <> | <> | ||||
| ACME$_PRINCIPAL_NAME_OUT (U,O) | <> | <> | ||||
| ACME$_QUERY_DATA (O) | <>+ | |||||
| ACME$_QUERY_KEY_TYPE | <>+ | |||||
| ACME$_QUERY_KEY_VALUE | <>+ | |||||
| ACME$_QUERY_TYPE | <>+ | |||||
| ACME$_REMOTE_HOST_ADDRESS | IR | IR | ||||
| ACME$_REMOTE_HOST_ADDRESS_TYPE | IR | IR | ||||
| ACME$_REMOTE_HOST_FULLNAME (U) | IR | IR | ||||
| ACME$_REMOTE_HOST_NAME (U) | IR | IR | ||||
| ACME$_REMOTE_USERNAME (U) | IR | IR | ||||
| ACME$_RESPONSE_DATA | <> | |||||
| ACME$_SERVER_NAME_IN (U) | <> | |||||
| ACME$_SERVER_NAME_OUT (U,O) | <> | |||||
| ACME$_SERVICE_NAME (U) | IR | IR | IR | IR | IR | IR |
| ACME$_TARGET_DOI_ID | <> | <> | <>++ | <>++ | ||
| ACME$_TARGET_DOI_NAME (U) | <> | <> | <>++ | <>++ | ||
| ACME$_TIMEOUT_INTERVAL | ||||||
<> ---Permitted
IR---IMPERSONATE Privilege Required to override default values
SR---SECURITY Privilege Required
O---Output item code
U---Subject to Unicode Conversion
ACME$_ACCESS_MODE
The ACME$_ACCESS_MODE item code is an input item code. It specifies the access mode at which a new persona, resulting from credential acquisition processing, is to be created. The buffer must contain a longword value specifying the access mode.The $PSLDEF macro defines the following symbols for the four access modes:
PSL$C_KERNEL
PSL$C_EXEC
PSL$C_SUPER
PSL$C_USERThe most privileged access mode used is the access mode of the caller. The specified access mode and the access mode of the caller are compared. The less privileged of the two access modes becomes the access mode at which the persona is created.
ACME$_ACCESS_PORT
The ACME$_ACCESS_PORT item code is an input item code. It specifies the name of local device (for example, a terminal) applicable to an authentication request. The buffer must contain a case-insensitive name string.If not specified, $ACM passes the name string contained in the PCB$T_TERMINAL field of the process control block for the process, or, if that is empty, for the nearest ancestor process (if any) where the PCB$T_TERMINAL field is not empty.
ACME$_AUTH_MECHANISM
The ACME$_AUTH_MECHANISM item code is an input item code. It specifies the authentication mechanism applicable to an authentication request. The buffer must contain a longword value specifying the desired mechanism code. If not specified, the authenticating domain of interpretation applies its default mechanism.The $ACMEDEF macro defines the following symbols for the standard mechanism types:
ACMEMECH$K_CHALLENGE_RESPONSE
ACMEMECH$K_PASSWORDIndividual ACME agents may define their own authentication mechanisms specific to their domain of interpretation.
ACME$_AUTHENTICATING_DOI_ID
The ACME$_AUTHENTICATING_DOI_ID item code is an output item code. It specifies the buffer to receive the agent ID of the domain of interpretation that successfully authenticated the principal.ACME$_AUTHENTICATING_DOI_NAME
The ACME$_AUTHENTICATING_DOI_NAME item code is an output item code. It specifies the buffer to receive the name of the domain of interpretation that successfully authenticated the principal.The maximum data returned for this item code is the number of characters represented by the symbol, ACME$K_MAXCHAR_DOI_NAME, so a caller's buffer should be at least that long, with the number of bytes allocated dependent on whether the ACME$M_UCS2_4 function code modifier was specified on the call to $ACM[W].
ACME$_CHAIN
The ACME$_CHAIN item code is an input item code. It specifies the address of the next item list segment to process immediately after processing the current list segment.The buffer address field in the item descriptor specifies the address of the next item list segment to be processed. The ACME$_CHAIN item code must be last in the item list segment; $ACM treats this as the logical end of the current item list segment. Any item list entries following the ACME$_CHAIN item code are ignored.
On the Alpha platform, both 32-bit and 64-bit item lists can be chained together.
ACME$_CHALLENGE_DATA
The ACME$_CHALLENGE_DATA item code is an input item code. It specifies the challenge data that was used as the basis for generating the response data specified by the ACME$_RESPONSE_DATA item code. The meaning of this data is specific to the domain of interpretation for which it is used.If this item code is specified, the ACME$_AUTH_MECHANISM and ACME$_RESPONSE_DATA item codes must also be specified. (The VMS domain of interpretation does not support this mechanism type.)
ACME$_CONTEXT_ACME_ID
The ACME$_CONTEXT_ACME_ID item code is an input item code. It establishes the ACME agent context within which ACME-specific item codes are interpreted. This item code has an effect on the parsing of the list of ACME-specific item codes, and takes effect immediately. It is in effect until the next instance of code ACME$_CONTEXT_ACME_ID, code ACME$_CONTEXT_ACME_NAME, code ACME$_TARGET_DOI_ID, or code ACME$_TARGET_DOI_NAME. The buffer must contain a longword value specifying the agent ID of an ACME agent.ACME$_CONTEXT_ACME_NAME
The ACME$_CONTEXT_ACME_NAME item code is an input item code. It establishes the ACME agent context within which ACME-specific item codes are interpreted. This item code has an effect on the parsing of the list of ACME-specific item codes, and takes effect immediately. It is in effect until the next instance of code ACME$_CONTEXT_ACME_ID, code ACM