getuserattr, IDtouser, nextuser, or putuserattr Subroutine

Purpose

Accesses the user information in the user database.

Library

Security Library (libc.a)

Syntax

#include <usersec.h>

int getuserattr (UserAttributeValueType)
char * User;
char * Attribute;
void * Value;
int  Type;

char *IDtouser( UID)
uid__t UID;

char *nextuser ( Mode Argument)
int ModeArgument;

int putuserattr (User, Attribute, Value, Type)
char *User;
char *Attribute;
void *Value;
int Type;

Description

Attention: These subroutines and the setpwent and setgrent subroutines should not be used simultaneously. The results can be unpredictable.

These subroutines access user information. Because of their greater granularity and extensibility, you should use them instead of the getpwent routines.

The getuserattr subroutine reads a specified attribute from the user database. If the database is not already open, this subroutine does an implicit open for reading. A call to the getuserattr subroutine for every new user verifies that the user exists.

Similarly, the putuserattr subroutine writes a specified attribute into the user database. If the database is not already open, this subroutine does an implicit open for reading and writing. Data changed by the putuserattr subroutine must be explicitly committed by calling the putuserattr subroutine with a Type parameter specifying SEC_COMMIT. Until all the data is committed, only these subroutines within the process return written data.

New entries in the user and group databases must first be created by invoking putuserattr with the SEC_NEW type.

The IDtouser subroutine translates a user ID into a user name.

The nextuser subroutine returns the next user in a linear search of the user database. The consistency of consecutive searches depends upon the underlying storage-access mechanism and is not guaranteed by this subroutine.

The setuserdb and enduserdb subroutines should be used to open and close the user database.

The enduserdb subroutine frees all memory allocated by the getuserattr subroutine.

Parameters

Argument
Presently unused and must be specified as null.
Attribute
Specifies which attribute is read. The following possible attributes are defined in the usersec.h file:
S_CORECOMP
Core compression status. The attribute type is SEC_CHAR.
S_COREPATH
Core path specification status. The attribute type is SEC_CHAR.
S_COREPNAME
Core path specification location. The attribute type is SEC_CHAR.
S_CORENAMING
Core naming status. The attribute type is SEC_CHAR.
S_ID
User ID. The attribute type is SEC_INT.
S_PGID
Principle group ID. The attribute type is SEC_INT.
S_PGRP
Principle group name. The attribute type is SEC_CHAR.
S_GROUPS
Groups to which the user belongs. The attribute type is SEC_LIST.
S_ADMGROUPS
Groups for which the user is an administrator. The attribute type is SEC_LIST.
S_ADMIN
Administrative status of a user. The attribute type is SEC_BOOL.
S_AUDITCLASSES
Audit classes to which the user belongs. The attribute type is SEC_LIST.
S_AUTHSYSTEM
Defines the user's authentication method. The attribute type is SEC_CHAR.
S_HOME
Home directory. The attribute type is SEC_CHAR.
S_SHELL
Initial program run by a user. The attribute type is SEC_CHAR.
S_GECOS
Personal information for a user. The attribute type is SEC_CHAR.
S_USRENV
User-state environment variables. The attribute type is SEC_LIST.
S_SYSENV
Protected-state environment variables. The attribute type is SEC_LIST.
S_LOGINCHK
Specifies whether the user account can be used for local logins. The attribute type is SEC_BOOL.
S_HISTEXPIRE
Defines the period of time (in weeks) that a user cannot reuse a password. The attribute type is SEC_INT.
S_HISTSIZE
Specifies the number of previous passwords that the user cannot reuse. The attribute type is SEC_INT.
S_MAXREPEAT
Defines the maximum number of times a user can repeat a character in a new password. The attribute type is SEC_INT.
S_MINAGE
Defines the minimum age in weeks that the user's password must exist before the user can change it. The attribute type is SEC_INT.
S_PWDCHECKS
Defines the password restriction methods for this account. The attribute type is SEC_LIST.
S_MINALPHA
Defines the minimum number of alphabetic characters required in a new user's password. The attribute type is SEC_INT.
S_MINDIFF
Defines the minimum number of characters required in a new password that were not in the old password. The attribute type is SEC_INT.
S_MINLEN
Defines the minimum length of a user's password. The attribute type is SEC_INT.
S_MINOTHER
Defines the minimum number of non-alphabetic characters required in a new user's password. The attribute type is SEC_INT.
S_DICTION
Defines the password dictionaries for this account. The attribute type is SEC_LIST.
S_SUCHK
Specifies whether the user account can be accessed with the su command. Type SEC_BOOL.
S_REGISTRY
Defines the user's authentication registry. The attribute type is SEC_CHAR.
S_RLOGINCHK
Specifies whether the user account can be used for remote logins using the telnet or rlogin commands. The attribute type is SEC_BOOL.
S_DAEMONCHK
Specifies whether the user account can be used for daemon execution of programs and subsystems using the cron daemon or src. The attribute type is SEC_BOOL.
S_TPATH
Defines how the account may be used on the trusted path. The attribute type is SEC_CHAR. This attribute must be one of the following values:
nosak
The secure attention key is not enabled for this account.
notsh
The trusted shell cannot be accessed from this account.
always
This account may only run trusted programs.
on
Normal trusted-path processing applies.
S_TTYS
List of ttys that can or cannot be used to access this account. The attribute type is SEC_LIST.
S_SUGROUPS
Groups that can or cannot access this account. The attribute type is SEC_LIST.
S_EXPIRATION
Expiration date for this account is a string in the form MMDDhhmmyy, where MM is the month, DD is the day, hh is the hour in 0 to 24 hour notation, mm is the minutes past the hour, and yy is the last two digits of the year. The attribute type is SEC_CHAR. For more information about the password expiration, see the /etc/security/user file.
S_AUTH1
Primary authentication methods for this account. The attribute type is SEC_LIST.
S_AUTH2
Secondary authentication methods for this account. The attribute type is SEC_LIST.
S_UFSIZE
Process file size soft limit. The attribute type is SEC_INT.
S_UCPU
Process CPU time soft limit. The attribute type is SEC_INT.
S_UDATA
Process data segment size soft limit. The attribute type is SEC_INT.
S_USTACK
Process stack segment size soft limit. Type: SEC_INT.
S_URSS
Process real memory size soft limit. Type: SEC_INT.
S_UCORE
Process core file size soft limit. The attribute type is SEC_INT.
S_UNOFILE
Process file descriptor table size soft limit. The attribute type is SEC_INT.
S_PWD
Specifies the value of the passwd field in the /etc/passwd file. The attribute type is SEC_CHAR.
S_UMASK
File creation mask for a user. The attribute type is SEC_INT.
S_LOCKED
Specifies whether the user's account can be logged into. The attribute type is SEC_BOOL.
S_ROLES
Defines the administrative roles for this account. The attribute type is SEC_LIST.
S_UFSIZE_HARD
Process file size hard limit. The attribute type is SEC_INT.
S_UCPU_HARD
Process CPU time hard limit. The attribute type is SEC_INT.
S_UDATA_HARD
Process data segment size hard limit. The attribute type is SEC_INT.
S_USREXPORT
Specifies if the DCE registry can overwrite the local user information with the DCE user information during a DCE export operation. The attribute type is SEC_BOOL.
S_USTACK_HARD
Process stack segment size hard limit. Type: SEC_INT.
S_URSS_HARD
Process real memory size hard limit. Type: SEC_INT.
S_UCORE_HARD
Process core file size hard limit. The attribute type is SEC_INT.
S_UNOFILE_HARD
Process file descriptor table size hard limit. The attribute type is SEC_INT.
S_DOMAINS
The domains for the user. It can be one or more. The attribute type is SEC_LIST.
S_DFLT_ROLES
The default roles for the user. It can be one or more roles. The attribute type is SEC_LIST.
S_MINLOWERALPHA
Defines the minimum number of lowercase alphabetic characters required in a new user password. The attribute type is SEC_INT.
S_MINUPPERALPHA
Defines the minimum number of uppercase alphabetic characters required in a new user password. The attribute type is SEC_INT.
S_MINDIGIT
Defines the minimum number of digits required in a new user password. The attribute type is SEC_INT.
S_MINSPECIALCHAR
Defines the minimum number of special characters required in a new user's password. The attribute type is SEC_INT.
Note: These values are string constants that should be used by applications both for convenience and to permit optimization in latter implementations. Additional user-defined attributes may be used and will be stored in the format specified by the Type parameter.
Mode
Specifies the search mode. This parameter can be used to delimit the search to one or more user credentials databases. Specifying a non-null Mode value also implicitly rewinds the search. A null Mode value continues the search sequentially through the database. This parameter must include one of the following values specified as a bit mask; these are defined in the usersec.h file:
S_LOCAL
Locally defined users are included in the search.
S_SYSTEM
All credentials servers for the system are searched.
 
Type
Specifies the type of attribute expected. Valid types are defined in the usersec.h file and include:
SEC_INT
The format of the attribute is an integer.

For the getuserattr subroutine, the user should supply a pointer to a defined integer variable. For the putuserattr subroutine, the user should supply an integer.

SEC_CHAR
The format of the attribute is a null-terminated character string.

For the getuserattr subroutine, the user should supply a pointer to a defined character pointer variable. For the putuserattr subroutine, the user should supply a character pointer.

SEC_LIST
The format of the attribute is a series of concatenated strings, each null-terminated. The last string in the series is terminated by two successive null characters.

For the getuserattr subroutine, the user should supply a pointer to a defined character pointer variable. For the putuserattr subroutine, the user should supply a character pointer.

SEC_BOOL
The format of the attribute from getuserattr is an integer with the value of either 0 (false) or 1 (true). The format of the attribute for putuserattr is a null-terminated string containing one of the following strings: true, false, yes, no, always, or never.

For the getuserattr subroutine, the user should supply a pointer to a defined integer variable. For the putuserattr subroutine, the user should supply a character pointer.

SEC_COMMIT
For the putuserattr subroutine, this value specified by itself indicates that changes to the named user are to be committed to permanent storage. The Attribute and Value parameters are ignored. If no user is specified, the changes to all modified users are committed to permanent storage.
SEC_DELETE
The corresponding attribute is deleted from the database.
SEC_NEW
Updates all the user database files with the new user name when using the putuserattr subroutine.
 
UID
Specifies the user ID to be translated into a user name.
User
Specifies the name of the user for which an attribute is to be read.
Value
Specifies a buffer, a pointer to a buffer, or a pointer to a pointer depending on the Attribute and Type parameters. See the Type parameter for more details.

Security

Item Description
Files Accessed:  
Mode File
rw /etc/passwd
rw /etc/group
rw /etc/security/user
rw /etc/security/limits
rw /etc/security/group
rw /etc/security/environ

Return Values

If successful, the getuserattr subroutine and the putuserattr subroutine return 0. Otherwise, a value of -1 is returned and the errno global variable is set to indicate the error.

If successful, the IDtouser and the nextuser subroutines return a character pointer to a buffer containing the requested user name. Otherwise, a null pointer is returned and the errno global variable is set to indicate the error.

Error Codes

If any of these subroutines fail, the following is returned:

Item Description
EACCES Access permission is denied for the data request.
If the getuserattr subroutine or the getuserattrs subroutine fail, the following is returned:
Item Description
EIO Failed to access remote user database.

If the getuserattr and putuserattr subroutines fail, one or more of the following is returned:

Item Description
ENOENT The specified User parameter does not exist.
EINVAL The Attribute parameter does not contain one of the defined attributes or null.
EINVAL The Value parameter does not point to a valid buffer or to valid data for this type of attribute. Limited testing is possible and all errors may not be detected.
EPERM Operation is not permitted.
ENOATTR The specified attribute is not defined for this user.

If the IDtouser subroutine fails, one or more of the following is returned:

Item Description
ENOENT The specified User parameter does not exist

If the nextuser subroutine fails, one or more of the following is returned:

Item Description
EINVAL The Mode parameter is not one of null, S_LOCAL, or S_SYSTEM.
EINVAL The Argument parameter is not null.
ENOENT The end of the search was reached.

Files

Item Description
/etc/passwd Contains user IDs.