#include <sys/types.h> #include <pwd.h> int getpwnam_r(const char *name, struct passwd *pwd, char *buffer, size_t bufsize, struct passwd **result);
The getpwnam_r() function updates the passwd structure pointed to by pwd and stores a pointer to that structure in the location pointed to by result. The structure contains an entry from the user database with a matching name.
The struct passwd, which is defined in the pwd.h header file, has the following elements:
char * | pw_name | User name |
uid_t | pw_uid | User ID |
uid_t | pw_gid | Group ID of the user's first group. If the user does not have a first group, the GID value will be set to 0. |
char * | pw_dir | Initial working directory. If the user does not have *READ authority to the user profile, the pw_dir pointer will be set to NULL. |
char * | pw_shell | Initial user program. If the user does not have *READ authority to the user profile, the pw_shell will be set to NULL. |
See QlgGetpwnam_r()--Get User Information for User
Name (using NLS-enabled path name) for a description and an example where
the path name is returned in any CCSID. Go to _r version
Note: Adopted authority is not used.
Error condition | Additional information |
---|---|
[EAGAIN] |
The user profile associated with the name is currently locked by another process. |
[EC2] |
Detected pointer that is not valid. |
[EINVAL] |
Value is not valid. Check the job log for messages. |
[ENOENT] |
The user profile associated with the name was not found. |
[ENOMEM] |
The user profile associated with the UID has exceeded its storage limit or is unable to allocate memory. |
[ERANGE] |
Insufficient storage was supplied through buffer and bufsize to contain the data to be referenced by the resulting group structure. |
[EUNKNOWN] |
Unknown system state. Check the job log for a CPF9872 message. If there is no message, verify that the home directory field in the user profile can be displayed. |
The following example gets the user database information for the user name of MYUSER. The UID is 22. The GID of MYUSER's first group is 1012. The initial directory is /home/MYUSER. The initial user program is *LIBL/QCMD.
Note: By using the code examples, you agree to the terms of the Code license and disclaimer information.
#include <sys/types.h> #include <pwd.h> #include <stdio.h> #include <errno.h> main() { struct passwd pd; struct passwd* pwdptr=&pd; struct passwd* tempPwdPtr; char pwdbuffer[200]; int pwdlinelen = sizeof(pwdbuffer); if ((getpwnam_r("MYUSER",pwdptr,pwdbuffer,pwdlinelen,&tempPwdPtr))!=0) perror("getpwnam_r() error."); else { printf("\nThe user name is: %s\n", pd.pw_name); printf("The user id is: %u\n", pd.pw_uid); printf("The group id is: %u\n", pd.pw_gid); printf("The initial directory is: %s\n", pd.pw_dir); printf("The initial user program is: %s\n", pd.pw_shell); } }Output:
The user name is: MYUSER The user ID is: 22 The group ID is: 1012 The initial directory is: /home/MYUSER The initial user program is: *LIBL/QCMD