top logo menu kitty mascot
AROS.ORG Developers Localization Bounties

envoy_accounts

Index


AccAddGroup() AccAddMember() AccAddUser() AccDeleteGroup()
AccDeleteUser() AccIDToGroup() AccIDToUser() AccMemberOf()
AccModifyGroup() AccModifyUser() AccNameToGroup() AccNameToUser()
AccNextGroup() AccNextMember() AccNextUser() AccRemoveMember()
AccSetPassword() AccVerifyUser() AccVerifyUserCrypt() AllocGroupInfo()
AllocUserInfo() ECrypt() FreeGroupInfo() FreeUserInfo()
IDToGroup() IDToUser() MemberOf() NameToGroup()
NameToUser() NextGroup() NextMember() NextUser()
VerifyUser() VerifyUserCrypt()    

AccAddGroup()

Synopsis

ULONG AccAddGroup(
         struct AuthorityInfo * authority,
         struct GroupInfo * group,
         struct Entity * server );

Function

Create a group on the Accounts Server.

Inputs

authority - Non-NULL AuthorityInfo containing NUL-terminated
            ai_UserName and clear-text ai_Password of the authorizer.
group - Non-NULL read/write proposed GroupInfo record.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, replacing *group with the assigned record.
On error, the caller's record is unchanged.

ACCERROR_NOAUTHORITY means failed authorizer authentication;
ACCERROR_NOPRIVS means insufficient rights or a read-only backend.
ACCERROR_GROUPEXISTS means an unavailable name;
ACCERROR_NOFREEGROUPS means the server cannot assign another ID.
ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server requires AdminGroups or AdminAll. It assigns a
new group ID and uses the authorizer's user ID as administrator,
ignoring those proposed fields. Flags are copied. Group flags are
not stored in the AROS backend's group file. An empty name
requests an available NewGroup, NewGroup2, ... name. The new group
starts with no explicit members. No local GroupInfo is allocated
for the caller.

Requires an authenticated authorizer and writable backend;
a read-only usergroup.library backend reports ACCERROR_NOPRIVS.
Success confirms the server's in-memory change, not durable storage:
later file-save errors are not reported to the caller. A transport
error does not prove that no change occurred. Query the server
before retrying a destructive request.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccAddMember()

Synopsis

ULONG AccAddMember(
         struct AuthorityInfo * authority,
         struct GroupInfo * group,
         struct UserInfo * user,
         struct Entity * server );

Function

Add a user to a group's explicit membership list.

Inputs

authority - Non-NULL AuthorityInfo containing NUL-terminated
            ai_UserName and clear-text ai_Password of the authorizer.
group - Non-NULL readable complete current GroupInfo record.
user - Non-NULL readable complete current UserInfo record.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success. Neither caller record is modified.

ACCERROR_NOAUTHORITY means failed authorizer authentication;
ACCERROR_NOPRIVS means insufficient rights or a read-only backend.
ENVOYERR_UNKNOWNGROUP or ENVOYERR_UNKNOWNUSER means a stale/missing
record. ACCERROR_USEREXISTS means membership already existed.
ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server permits AdminAll or the group's recorded admin
and matches all fields of both records. Membership is keyed by
user ID; users sharing an ID share this membership. This operation
does not change the user's primary group field.

Requires an authenticated authorizer and writable backend;
a read-only usergroup.library backend reports ACCERROR_NOPRIVS.
Success confirms the server's in-memory change, not durable storage:
later file-save errors are not reported to the caller. A transport
error does not prove that no change occurred. Query the server
before retrying a destructive request.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccAddUser()

Synopsis

ULONG AccAddUser(
         struct AuthorityInfo * authority,
         struct UserInfo * user,
         STRPTR password,
         struct Entity * server );

Function

Create a user on the Accounts Server.

Inputs

authority - Non-NULL AuthorityInfo containing NUL-terminated
            ai_UserName and clear-text ai_Password of the authorizer.
user - Non-NULL read/write proposed UserInfo record.
password - NUL-terminated initial clear-text password, or NULL
           for no initial password.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, replacing *user with the assigned record.
On error, the caller's record is unchanged.

ACCERROR_NOAUTHORITY means failed authorizer authentication;
ACCERROR_NOPRIVS means insufficient rights or a read-only backend.
ACCERROR_USEREXISTS means an unavailable name;
ACCERROR_NOFREEUSERS means the server cannot assign another ID.
ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server requires AdminAll. It assigns the user ID rather
than using the proposed ID. An empty name requests an available
NewUser, NewUser2, ... name. The proposed primary group is retained.
A password is stored only when NeedsPassword is set and password
is nonempty. Other privilege flags are derived from server policy;
the returned record is authoritative. No local UserInfo storage is
allocated for the caller.

Requires an authenticated authorizer and writable backend;
a read-only usergroup.library backend reports ACCERROR_NOPRIVS.
Success confirms the server's in-memory change, not durable storage:
later file-save errors are not reported to the caller. A transport
error does not prove that no change occurred. Query the server
before retrying a destructive request.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccDeleteGroup()

Synopsis

ULONG AccDeleteGroup(
         struct AuthorityInfo * authority,
         struct GroupInfo * group,
         struct Entity * server );

Function

Delete a group and its explicit membership list.

Inputs

authority - Non-NULL AuthorityInfo containing NUL-terminated
            ai_UserName and clear-text ai_Password of the authorizer.
group - Non-NULL readable complete current GroupInfo record.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success. The caller's record is not modified or freed.

ACCERROR_NOAUTHORITY means failed authorizer authentication;
ACCERROR_NOPRIVS means insufficient rights or a read-only backend.
ENVOYERR_UNKNOWNGROUP means a stale/missing target.
ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server permits AdminAll or the group's recorded admin and
requires the complete target record to match. Deleting the group
does not delete its users or rewrite their primary group IDs.
Any surviving local copy of the group record is stale after success.

Requires an authenticated authorizer and writable backend;
a read-only usergroup.library backend reports ACCERROR_NOPRIVS.
Success confirms the server's in-memory change, not durable storage:
later file-save errors are not reported to the caller. A transport
error does not prove that no change occurred. Query the server
before retrying a destructive request.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccDeleteUser()

Synopsis

ULONG AccDeleteUser(
         struct AuthorityInfo * authority,
         struct UserInfo * user,
         struct Entity * server );

Function

Delete a user account and its stored group memberships.

Inputs

authority - Non-NULL AuthorityInfo containing NUL-terminated
            ai_UserName and clear-text ai_Password of the authorizer.
user - Non-NULL readable complete current UserInfo record.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success. The caller's record is not modified or freed.

ACCERROR_NOAUTHORITY means failed authorizer authentication;
ACCERROR_NOPRIVS means insufficient rights or a read-only backend.
ENVOYERR_UNKNOWNUSER means a stale/missing target.
ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server requires AdminAll, matches all fields of the target
and refuses deletion of protected root IDs. The backend removes
memberships and the user record; it does not remove home-directory
contents or update a group's administrator ID. Any surviving local
copy of the record is stale after success.

Requires an authenticated authorizer and writable backend;
a read-only usergroup.library backend reports ACCERROR_NOPRIVS.
Success confirms the server's in-memory change, not durable storage:
later file-save errors are not reported to the caller. A transport
error does not prove that no change occurred. Query the server
before retrying a destructive request.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccIDToGroup()

Synopsis

ULONG AccIDToGroup(
         UWORD groupID,
         struct GroupInfo * group,
         struct Entity * server );

Function

Look up a group record by numeric ID.

Inputs

groupID - 16-bit numeric group ID.
group - Non-NULL writable struct GroupInfo.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, with *group replaced by the returned record.
The AROS server returns ENVOYERR_UNKNOWNGROUP when no match exists.
On any error, *group is unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server returns the first record with this ID in its
name-ordered list. IDs can be shared by multiple records in the
backend; an ID lookup is therefore not a unique-name lookup.
This is a lookup, not authentication.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccIDToUser()

Synopsis

ULONG AccIDToUser(
         UWORD userID,
         struct UserInfo * user,
         struct Entity * server );

Function

Look up a user record by numeric ID.

Inputs

userID - 16-bit numeric user ID.
user - Non-NULL writable struct UserInfo.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, with *user replaced by the returned record.
The AROS server returns ENVOYERR_UNKNOWNUSER when no match exists.
On any error, *user is unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server returns the first record with this ID in its
name-ordered list. IDs can be shared by multiple records in the
backend; an ID lookup is therefore not a unique-name lookup.
This is a lookup, not authentication.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccMemberOf()

Synopsis

ULONG AccMemberOf(
         struct GroupInfo * group,
         struct UserInfo * user,
         struct Entity * server );

Function

Check whether a user is a member of a group on the Accounts Server.

Inputs

group - Non-NULL readable current GroupInfo record.
user - Non-NULL readable current UserInfo record.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero means membership was found. With the AROS server,
ENVOYERR_UNKNOWNMEMBER means no membership; ENVOYERR_UNKNOWNGROUP
or ENVOYERR_UNKNOWNUSER means the supplied record did not match.
Neither caller record is modified.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

Supply complete, unchanged records from successful lookups.
The AROS server checks all record fields, not just the IDs. A
stale record is not interchangeable with a current one. Membership
is checked against the server's membership list.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccModifyGroup()

Synopsis

ULONG AccModifyGroup(
         struct AuthorityInfo * authority,
         struct GroupInfo * newGroup,
         struct GroupInfo * group,
         struct Entity * server );

Function

Request changes to an existing group record.

Inputs

authority - Non-NULL AuthorityInfo containing NUL-terminated
            ai_UserName and clear-text ai_Password of the authorizer.
newGroup - Non-NULL readable proposed GroupInfo record.
group - Non-NULL read/write complete current GroupInfo record.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, replacing *group with the returned record.
On error, *group is unchanged. Separate newGroup storage is not
modified.

ACCERROR_NOAUTHORITY means failed authorizer authentication;
ACCERROR_NOPRIVS means insufficient rights or a read-only backend.
ENVOYERR_UNKNOWNGROUP means a stale/missing target;
ACCERROR_GROUPEXISTS means a conflicting name.
ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server permits AdminAll or the group's recorded admin.
It updates name, group ID, admin ID and flags; an empty proposed
name leaves the existing name unchanged. The full current record
must match. Changing the group ID does not rewrite users' primary
group IDs, and the backend does not check for a conflicting numeric
group ID. Coordinate such changes explicitly.
Group flags are not represented in the AROS backend's group file
and are not preserved by saving and reloading that file.

Requires an authenticated authorizer and writable backend;
a read-only usergroup.library backend reports ACCERROR_NOPRIVS.
Success confirms the server's in-memory change, not durable storage:
later file-save errors are not reported to the caller. A transport
error does not prove that no change occurred. Query the server
before retrying a destructive request.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccModifyUser()

Synopsis

ULONG AccModifyUser(
         struct AuthorityInfo * authority,
         struct UserInfo * newUser,
         struct UserInfo * user,
         struct Entity * server );

Function

Request changes to an existing user record.

Inputs

authority - Non-NULL AuthorityInfo containing NUL-terminated
            ai_UserName and clear-text ai_Password of the authorizer.
newUser - Non-NULL readable proposed UserInfo record.
user - Non-NULL read/write complete current UserInfo record.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, replacing *user with the returned record.
On error, *user is unchanged. Separate newUser storage is not
modified.

ACCERROR_NOAUTHORITY means failed authorizer authentication;
ACCERROR_NOPRIVS means insufficient rights or a read-only backend.
ENVOYERR_UNKNOWNUSER means a stale/missing target;
ACCERROR_USEREXISTS means a conflicting name.
ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server matches the current record in full. AdminAll may
change the name, primary group and password-required state; a user
with AdminName may rename themselves. The numeric user ID is not
changed. An empty proposed name leaves the existing name unchanged.
Clearing NeedsPassword removes the stored password and unlocks the
account. Other flags are derived from server policy, not copied as
arbitrary privilege bits; setting NeedsPassword does not create a
password. Use the returned record, not the proposal, afterwards.
Renaming retains any existing password token. Since ECrypt()
includes the username, reset the password after a rename when
using the stored Envoy-token authentication backend.

Requires an authenticated authorizer and writable backend;
a read-only usergroup.library backend reports ACCERROR_NOPRIVS.
Success confirms the server's in-memory change, not durable storage:
later file-save errors are not reported to the caller. A transport
error does not prove that no change occurred. Query the server
before retrying a destructive request.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccNameToGroup()

Synopsis

ULONG AccNameToGroup(
         STRPTR groupName,
         struct GroupInfo * group,
         struct Entity * server );

Function

Look up a group record by name.

Inputs

groupName - Non-NULL NUL-terminated group name.
group - Non-NULL writable struct GroupInfo.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, with *group replaced by the returned record.
The AROS server returns ENVOYERR_UNKNOWNGROUP when no match exists.
On any error, *group is unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server compares names case-insensitively. This is a
lookup, not authentication.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccNameToUser()

Synopsis

ULONG AccNameToUser(
         STRPTR userName,
         struct UserInfo * user,
         struct Entity * server );

Function

Look up a user record by name.

Inputs

userName - Non-NULL NUL-terminated user name.
user - Non-NULL writable struct UserInfo.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, with *user replaced by the returned record.
The AROS server returns ENVOYERR_UNKNOWNUSER when no match exists.
On any error, *user is unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server compares names case-insensitively. This is a
lookup, not authentication.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccNextGroup()

Synopsis

ULONG AccNextGroup(
         struct GroupInfo * group,
         struct Entity * server );

Function

Enumerate group records maintained by the Accounts Server.

Inputs

group - Non-NULL read/write struct GroupInfo. Zero the whole record
        before the first call. For each subsequent call, pass the
        complete record returned by the previous successful call.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, replacing *group with the next record.
ENVOYERR_LASTGROUP at the end of the AROS server's list, or if the
previous record no longer matches. On any error, including end
of list, the caller's record remains unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server starts when the name is empty and ID is zero.
Otherwise it matches name, ID and all remaining fields before
advancing in case-insensitive name order. Editing the cursor record
or changing the server database can end enumeration early. There
is no snapshot across calls.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccNextMember()

Synopsis

ULONG AccNextMember(
         struct GroupInfo * group,
         struct UserInfo * user,
         struct Entity * server );

Function

Enumerate the users belonging to a group on the Accounts Server.

Inputs

group - Non-NULL readable current GroupInfo record.
user - Non-NULL read/write UserInfo cursor. Zero the whole record
       to start; subsequently use the previous successful result.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, replacing *user with the next member's record.
The AROS server returns ENVOYERR_UNKNOWNGROUP for a mismatched
group or ENVOYERR_LASTMEMBER at the end, for a mismatched cursor,
or when the cursor no longer belongs to the group. On any error,
*user is unchanged. The group record is never modified.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server checks complete records and enumerates the group's
stored member IDs in ascending order, skipping IDs without a user
record. If an ID is shared by users, its first name-ordered record
is returned. There is no snapshot across calls.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccNextUser()

Synopsis

ULONG AccNextUser(
         struct UserInfo * user,
         struct Entity * server );

Function

Enumerate user records maintained by the Accounts Server.

Inputs

user - Non-NULL read/write struct UserInfo. Zero the whole record
        before the first call. For each subsequent call, pass the
        complete record returned by the previous successful call.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, replacing *user with the next record.
ENVOYERR_LASTUSER at the end of the AROS server's list, or if the
previous record no longer matches. On any error, including end
of list, the caller's record remains unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server starts when the name is empty and ID is zero.
Otherwise it matches name, ID and all remaining fields before
advancing in case-insensitive name order. Editing the cursor record
or changing the server database can end enumeration early. There
is no snapshot across calls.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccRemoveMember()

Synopsis

ULONG AccRemoveMember(
         struct AuthorityInfo * authority,
         struct GroupInfo * group,
         struct UserInfo * user,
         struct Entity * server );

Function

Remove a user from a group's explicit membership list.

Inputs

authority - Non-NULL AuthorityInfo containing NUL-terminated
            ai_UserName and clear-text ai_Password of the authorizer.
group - Non-NULL readable complete current GroupInfo record.
user - Non-NULL readable complete current UserInfo record.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success. Neither caller record is modified.

ACCERROR_NOAUTHORITY means failed authorizer authentication;
ACCERROR_NOPRIVS means insufficient rights or a read-only backend.
ENVOYERR_UNKNOWNGROUP or ENVOYERR_UNKNOWNUSER means a stale/missing
record. ENVOYERR_UNKNOWNMEMBER means membership was absent.
ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server permits AdminAll or the group's recorded admin
and matches all fields of both records. Membership is keyed by
user ID; users sharing an ID share this membership. This operation
does not change the user's primary group field.

Requires an authenticated authorizer and writable backend;
a read-only usergroup.library backend reports ACCERROR_NOPRIVS.
Success confirms the server's in-memory change, not durable storage:
later file-save errors are not reported to the caller. A transport
error does not prove that no change occurred. Query the server
before retrying a destructive request.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccSetPassword()

Synopsis

ULONG AccSetPassword(
         struct AuthorityInfo * authority,
         struct UserInfo * user,
         STRPTR password,
         struct Entity * server );

Function

Set or remove a user password on the Accounts Server.

Inputs

authority - Non-NULL AuthorityInfo containing NUL-terminated
            ai_UserName and clear-text ai_Password of the authorizer.
user - Non-NULL readable complete current UserInfo record.
password - NUL-terminated new clear-text password, or NULL/empty
           to remove the password.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success. The caller's user record is not modified.

ACCERROR_NOAUTHORITY means failed authorizer authentication;
ACCERROR_NOPRIVS means insufficient rights or a read-only backend.
ENVOYERR_UNKNOWNUSER means the complete target record did not match.
ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server permits AdminAll, or a user changing their own
password with AdminPassword. Setting a password also unlocks the
account; NULL or an empty string removes its password. Requery the
user record afterwards because flags may have changed. The new
password and authority password are sent as clear text by this API.

Requires an authenticated authorizer and writable backend;
a read-only usergroup.library backend reports ACCERROR_NOPRIVS.
Success confirms the server's in-memory change, not durable storage:
later file-save errors are not reported to the caller. A transport
error does not prove that no change occurred. Query the server
before retrying a destructive request.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccVerifyUser()

Synopsis

ULONG AccVerifyUser(
         STRPTR userName,
         STRPTR password,
         struct UserInfo * user,
         struct Entity * server );

Function

Ask the Accounts Server to authenticate a user and, on success,
return the user's record. This does not change the caller's local
credentials or establish a login session.

Inputs

userName - Non-NULL NUL-terminated username.
password - NUL-terminated clear-text password,
           or NULL for an empty value.
user - Non-NULL writable struct UserInfo.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, with *user replaced by the returned record.
On any error, *user is unchanged. The AROS server reports
ENVOYERR_UNKNOWNUSER for an unknown/locked user or failed
authentication; these cases are not distinguished.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The password is placed in the request as clear text by this API.
The AROS server applies its configured authentication policy.
An unlocked account without UFLAGF_NeedsPassword accepts any
password token.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AccVerifyUserCrypt()

Synopsis

ULONG AccVerifyUserCrypt(
         STRPTR userName,
         STRPTR password,
         struct UserInfo * user,
         struct Entity * server );

Function

Ask the Accounts Server to authenticate a user and, on success,
return the user's record. This does not change the caller's local
credentials or establish a login session.

Inputs

userName - Non-NULL NUL-terminated username.
password - NUL-terminated 11-character token produced by ECrypt() for this username,
           or NULL for an empty value.
user - Non-NULL writable struct UserInfo.
server - Borrowed Accounts Server entity obtained through NIPC,
         valid until return, or NULL to use the per-task cached
         server selected by Envoy/AccountsServer (local by default).

Result

Zero on success, with *user replaced by the returned record.
On any error, *user is unchanged. The AROS server reports
ENVOYERR_UNKNOWNUSER for an unknown/locked user or failed
authentication; these cases are not distinguished.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server applies its configured authentication policy.
An unlocked account without UFLAGF_NeedsPassword accepts any
password token. A crypt token is sent as given, not computed by
this call.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

AllocGroupInfo()

Synopsis

struct GroupInfo * AllocGroupInfo();

Function

Allocate a zero-filled struct GroupInfo for account queries.

Inputs

None.

Result

A caller-owned pointer, or NULL if allocation fails. Release a
successful allocation with FreeGroupInfo().

Notes

Storage is allocated with MEMF_PUBLIC | MEMF_CLEAR. This allocates
only a local record; it does not create a server-side group, contact
the Accounts Server or reserve an account ID. The zero-filled record
can start NextGroup() enumeration. Call from task context.

AllocUserInfo()

Synopsis

struct UserInfo * AllocUserInfo();

Function

Allocate a zero-filled struct UserInfo for account queries.

Inputs

None.

Result

A caller-owned pointer, or NULL if allocation fails. Release a
successful allocation with FreeUserInfo().

Notes

Storage is allocated with MEMF_PUBLIC | MEMF_CLEAR. This allocates
only a local record; it does not create a server-side user, contact
the Accounts Server or reserve an account ID. The zero-filled record
can start NextUser() enumeration. Call from task context.

ECrypt()

Synopsis

STRPTR ECrypt(
         STRPTR buffer,
         STRPTR password,
         STRPTR username );

Function

Compute the legacy, username-dependent Envoy password token. The
first 12 password and username bytes participate; ASCII uppercase
letters in the username are folded to lowercase. The result has
11 characters followed by a NUL byte.

Inputs

buffer - Writable storage for at least 12 bytes, or NULL.
password - NUL-terminated clear-text password, or NULL for empty.
username - NUL-terminated username, or NULL for empty.

Result

buffer after writing the token, or NULL when buffer is NULL.
No output-size check is performed.

Notes

No allocation, server request or wait is performed. All buffers
remain caller-owned. This is the Envoy compatibility token format,
not reversible encryption. Bytes after the first 12 do not change
the token, but the input strings must still be NUL-terminated.

FreeGroupInfo()

Synopsis

void FreeGroupInfo(
         struct GroupInfo * group );

Function

Free a record allocated by AllocGroupInfo().

Inputs

group - Pointer returned by AllocGroupInfo(), or NULL.

Result

None. NULL has no effect.

Notes

Finish all uses of the record before freeing it. Its pointer is
invalid afterwards. This releases local storage only; it does not
delete the corresponding server-side group or contact the server.
Call from task context.

See also

AllocGroupInfo()


FreeUserInfo()

Synopsis

void FreeUserInfo(
         struct UserInfo * user );

Function

Free a record allocated by AllocUserInfo().

Inputs

user - Pointer returned by AllocUserInfo(), or NULL.

Result

None. NULL has no effect.

Notes

Finish all uses of the record before freeing it. Its pointer is
invalid afterwards. This releases local storage only; it does not
delete the corresponding server-side user or contact the server.
Call from task context.

See also

AllocUserInfo()


IDToGroup()

Synopsis

ULONG IDToGroup(
         UWORD groupID,
         struct GroupInfo * group );

Function

Look up a group record by numeric ID.

Inputs

groupID - 16-bit numeric group ID.
group - Non-NULL writable struct GroupInfo.

Result

Zero on success, with *group replaced by the returned record.
The AROS server returns ENVOYERR_UNKNOWNGROUP when no match exists.
On any error, *group is unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server returns the first record with this ID in its
name-ordered list. IDs can be shared by multiple records in the
backend; an ID lookup is therefore not a unique-name lookup.
This is a lookup, not authentication.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.

IDToUser()

Synopsis

ULONG IDToUser(
         UWORD userID,
         struct UserInfo * user );

Function

Look up a user record by numeric ID.

Inputs

userID - 16-bit numeric user ID.
user - Non-NULL writable struct UserInfo.

Result

Zero on success, with *user replaced by the returned record.
The AROS server returns ENVOYERR_UNKNOWNUSER when no match exists.
On any error, *user is unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server returns the first record with this ID in its
name-ordered list. IDs can be shared by multiple records in the
backend; an ID lookup is therefore not a unique-name lookup.
This is a lookup, not authentication.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.

MemberOf()

Synopsis

ULONG MemberOf(
         struct GroupInfo * group,
         struct UserInfo * user );

Function

Check whether a user is a member of a group on the Accounts Server.

Inputs

group - Non-NULL readable current GroupInfo record.
user - Non-NULL readable current UserInfo record.

Result

Zero means membership was found. With the AROS server,
ENVOYERR_UNKNOWNMEMBER means no membership; ENVOYERR_UNKNOWNGROUP
or ENVOYERR_UNKNOWNUSER means the supplied record did not match.
Neither caller record is modified.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

Supply complete, unchanged records from successful lookups.
The AROS server checks all record fields, not just the IDs. A
stale record is not interchangeable with a current one. Membership
is checked against the server's membership list.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.

NameToGroup()

Synopsis

ULONG NameToGroup(
         STRPTR groupName,
         struct GroupInfo * group );

Function

Look up a group record by name.

Inputs

groupName - Non-NULL NUL-terminated group name.
group - Non-NULL writable struct GroupInfo.

Result

Zero on success, with *group replaced by the returned record.
The AROS server returns ENVOYERR_UNKNOWNGROUP when no match exists.
On any error, *group is unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server compares names case-insensitively. This is a
lookup, not authentication.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.

NameToUser()

Synopsis

ULONG NameToUser(
         STRPTR userName,
         struct UserInfo * user );

Function

Look up a user record by name.

Inputs

userName - Non-NULL NUL-terminated user name.
user - Non-NULL writable struct UserInfo.

Result

Zero on success, with *user replaced by the returned record.
The AROS server returns ENVOYERR_UNKNOWNUSER when no match exists.
On any error, *user is unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server compares names case-insensitively. This is a
lookup, not authentication.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.

NextGroup()

Synopsis

ULONG NextGroup(
         struct GroupInfo * group );

Function

Enumerate group records maintained by the Accounts Server.

Inputs

group - Non-NULL read/write struct GroupInfo. Zero the whole record
        before the first call. For each subsequent call, pass the
        complete record returned by the previous successful call.

Result

Zero on success, replacing *group with the next record.
ENVOYERR_LASTGROUP at the end of the AROS server's list, or if the
previous record no longer matches. On any error, including end
of list, the caller's record remains unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server starts when the name is empty and ID is zero.
Otherwise it matches name, ID and all remaining fields before
advancing in case-insensitive name order. Editing the cursor record
or changing the server database can end enumeration early. There
is no snapshot across calls.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.

NextMember()

Synopsis

ULONG NextMember(
         struct GroupInfo * group,
         struct UserInfo * user );

Function

Enumerate the users belonging to a group on the Accounts Server.

Inputs

group - Non-NULL readable current GroupInfo record.
user - Non-NULL read/write UserInfo cursor. Zero the whole record
       to start; subsequently use the previous successful result.

Result

Zero on success, replacing *user with the next member's record.
The AROS server returns ENVOYERR_UNKNOWNGROUP for a mismatched
group or ENVOYERR_LASTMEMBER at the end, for a mismatched cursor,
or when the cursor no longer belongs to the group. On any error,
*user is unchanged. The group record is never modified.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server checks complete records and enumerates the group's
stored member IDs in ascending order, skipping IDs without a user
record. If an ID is shared by users, its first name-ordered record
is returned. There is no snapshot across calls.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.

NextUser()

Synopsis

ULONG NextUser(
         struct UserInfo * user );

Function

Enumerate user records maintained by the Accounts Server.

Inputs

user - Non-NULL read/write struct UserInfo. Zero the whole record
        before the first call. For each subsequent call, pass the
        complete record returned by the previous successful call.

Result

Zero on success, replacing *user with the next record.
ENVOYERR_LASTUSER at the end of the AROS server's list, or if the
previous record no longer matches. On any error, including end
of list, the caller's record remains unchanged.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server starts when the name is empty and ID is zero.
Otherwise it matches name, ID and all remaining fields before
advancing in case-insensitive name order. Editing the cursor record
or changing the server database can end enumeration early. There
is no snapshot across calls.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.

VerifyUser()

Synopsis

ULONG VerifyUser(
         STRPTR userName,
         STRPTR password,
         struct UserInfo * user );

Function

Ask the Accounts Server to authenticate a user and, on success,
return the user's record. This does not change the caller's local
credentials or establish a login session.

Inputs

userName - Non-NULL NUL-terminated username.
password - NUL-terminated clear-text password,
           or NULL for an empty value.
user - Non-NULL writable struct UserInfo.

Result

Zero on success, with *user replaced by the returned record.
On any error, *user is unchanged. The AROS server reports
ENVOYERR_UNKNOWNUSER for an unknown/locked user or failed
authentication; these cases are not distinguished.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The password is placed in the request as clear text by this API.
The AROS server applies its configured authentication policy.
An unlocked account without UFLAGF_NeedsPassword accepts any
password token.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.

VerifyUserCrypt()

Synopsis

ULONG VerifyUserCrypt(
         STRPTR userName,
         STRPTR password,
         struct UserInfo * user );

Function

Ask the Accounts Server to authenticate a user and, on success,
return the user's record. This does not change the caller's local
credentials or establish a login session.

Inputs

userName - Non-NULL NUL-terminated username.
password - NUL-terminated 11-character token produced by ECrypt() for this username,
           or NULL for an empty value.
user - Non-NULL writable struct UserInfo.

Result

Zero on success, with *user replaced by the returned record.
On any error, *user is unchanged. The AROS server reports
ENVOYERR_UNKNOWNUSER for an unknown/locked user or failed
authentication; these cases are not distinguished.

ENVOYERR_NULLPTR denotes a missing required pointer;
ENVOYERR_NORESOURCES denotes an allocation or context failure.
Discovery, NIPC and server errors propagate unchanged; see
<envoy/errors.h> and <envoy/accounts.h>.

Notes

The AROS server applies its configured authentication policy.
An unlocked account without UFLAGF_NeedsPassword accepts any
password token. A crypt token is sent as given, not computed by
this call.

Synchronous task-context call; may block. The requested five-
second NIPC transaction timeout does not bound discovery, local
server waits or total execution time. Caller-owned data must remain
valid until return. Strings must be NUL-terminated; wire string
fields retain at most 31 characters. Do not close accounts.library
from this task while the request is pending.

The server is the per-task cached "Accounts Server" entity, on the
host selected by Envoy/AccountsServer through GetVar(), or local
when no host is selected. The library owns this cached link.