getgrnam_r()--Get Group Information Using Group Name


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

 int getgrnam_r(const char *name, struct group *grp,  
 char *buffer, size_t bufsize, struct group
**result);  
  Service Program Name: QSYPAPI

  Default Public Authority: *USE

  Threadsafe: Yes

The getgrnam_r() function updates the group structure pointed to by grp and stores a pointer to that structure in the location pointed to by result. The structure contains an entry from the user database with matching name.


Parameters

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

The struct group, which is defined in the grp.h header file, has the following elements:

char * gr_name Name of the group
gid_t gr_gid Group ID
char ** gr_mem A null-terminated list of pointers to the individual member profile names. If the group profile does not have any members or if the caller does not have *READ authority to the group profile, the list will be empty.

Authorities

*READ authority is required to the user profile associated with the name. If the user does not have *READ authority, only the name of the group and the group ID values are returned.


Return Value

0
getgrnam_r was successful.
Any other value
Failure: The return value contains an error number indicating the error.

Error Conditions

If getgrnam_r() is not successful, the return 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 name is currently locked by another process.

[EC2]

Detected pointer that is not valid.

[EDAMAGE]

The user profile associated with the group name or an internal system object is damaged.

[EINVAL]

Value is not valid. Check the job log for messages.

[ENOENT]

The user profile associated with the name was not found or the profile name specified is not a group profile.

[ERANGE]

Insufficient storage was supplied by 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.


Related Information


Example

See Code disclaimer information for information pertaining to code examples.

The following example gets the group information for the group GROUP1. The gid is 91. There are two group members, CLIFF and PATRICK.

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

main()
{ short int lp;
  struct group grp;
  struct group * grpptr=&grp;
  struct group * tempGrpPtr;
  char grpbuffer[200];
  int  grplinelen = sizeof(grpbuffer);

  if ((getgrnam_r("GROUP1",grpptr,grpbuffer,grplinelen,&tempGrpPtr))!=0)
     perror("getgrnam_r() error.");
  else
  {
     printf("\nThe group name is: %s\n", grp.gr_name);
     printf("The gid         is: %u\n", grp.gr_gid);
     for (lp = 1; NULL != *(grp.gr_mem); lp++, (grp.gr_mem)++)
        printf("Group Member %d is: %s\n", lp, *(grp.gr_mem));
  }

}

Output:

  The group name is: GROUP1
  The gid        is: 91
  Group member 1 is: CLIFF
  Group member 2 is: PATRICK

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