QlgGetpwuid_r()--Get User Information for User ID (using NLS-enabled path name)


  Syntax
 #include <sys/types.h>
 #include <pwd.h>

 int QlgGetpwuid_r(uid_t uid,
      struct qplg_passwd *pwd,
                    char *buffer,
                  size_t bufsize,
      struct qplg_passwd **result);
  Service Program Name: QSYPAPI

  Default Public Authority: *USE

  Threadsafe: Yes

The QlgGetpwuid_r() function updates the qplg_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 UID.


Parameters

UID
(Input) A pointer to a user ID.
pwd
(Input) A pointer to a struct qplg_passwd.
buffer
(Input) A pointer to a buffer from which memory is allocated to hold storage areas referenced by the structure qplg_passwd.
bufsize
(Input) The size of buffer in bytes.
result
(Input) A pointer to a location in which a pointer to the updated qplg_passwd structure is stored. If an error occurs or if the requested entry cannot be found, a NULL pointer is stored in this location.

The struct qplg_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
Qlg_Path_Name_T pw_dir Initial working directory
char * pw_shell Initial user program

See getpwuid_r()--Get User Information for User ID for more on the pwd, result and other parameters.


Authorities

*READ authority is required to the user profile associated with the UID.


Return Value

0
QlgGetpwuid_r() was successful.

Any other value
Failure: The return value contains an error number indicating the error.

Error Conditions

If QlgGetpwuid_r() is not successful, the error value usually indicates one of the following errors. Under some conditions, the value could indicate an error other than those listed here.

Error condition Additional information
[EAGAIN]

The user profile associated with the uid 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 UID was not found.

[ENOMEM]

The user profile associated with the UID has exceeded its storage limit or is unable to allocate memory.

[ENOSPC]

Machine storage limit exceeded.

[EPERM]

The calling job does not have *READ authority to the user profile associated with the UID.

[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.


Usage Notes

The path name is returned in the default IFS UNICODE CCSID.


Related Information


Example

See Code disclaimer information for information pertaining to code examples.

The following example gets the user database information for the uid of 22. The user name is MYUSER. The GID is 1012. The intial working directory is /home/MYUSER. The initial user program is *LIBL/QCMD.

#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>
#include <errno.h>

main()
{
  struct qplg_passwd pd;
  passwd ** tempPwdPtr;
  char pwdbuffer[200];
  int  pwdlinelen = sizeof(pwdbuffer);

  if ((QlgGetpwuid_r(22,&pd,pwdbuffer,pwdlinelen,tempPwdPtr))!=0)
     perror("QlgGetpwuid_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 working directory length is: %d\n",
             pd->pw_dir->Path_Length);
     printf("The initial working directory CCSID is : %d\n",
             pd->pw_dir->CCSID);
     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: 0
  The initial working directory length is: 24
  The initial working directory CCSID is : 13488
  The initial user program is: *LIBL/QCMD

API introduced: V5R1
Top | UNIX-Type APIs | APIs by category