getspent(), getspent_r()
Get an entry from the shadow password database
Synopsis:
#include <sys/types.h>
#include <shadow.h>
struct spwd* getspent( void );
struct spwd* getspent_r( struct spwd* result,
char* buffer,
size_t buflen );
Arguments:
These arguments apply only to getspent_r():
- result
- A pointer to an spwd structure where the function can store the entry. For more information about this structure, see putspent().
- buffer
- A block of memory that the function can use to allocate storage referenced by the spwd structure. You can determine the maximum size needed for this buffer by calling sysconf() with an argument of _SC_GETPW_R_SIZE_MAX.
- bufsize
- The size of the block that buffer points to, in characters.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The getspent() and getspent_r() functions return the next entry from the shadow password database. The getspent() function uses a static buffer that's overwritten by each call.
Returns:
The getspent() function returns a pointer to a struct spwd object containing the next entry from the shadow password database. When getspent() is first called, the database is opened, and it remains open until either a NULL is returned to signify end-of-file, or endspent() is called.
Errors:
- ENOMEM
- There's insufficient memory to complete the request.
In addition to the errno settings listed above, a call to getspent() can result in errno being set by any of the following functions:
Examples:
#include <stdio.h>
#include <stdlib.h>
#include <pwd.h>
#include <shadow.h>
/*
* This program reads login names from standard input and
* checks to see if each is a valid name. If not, the entire
* contents of the password database are printed.
*/
int main(int argc, char** argv)
{
struct spwd* sp;
char buf[80];
setpwent();
while( gets( buf ) != NULL ) {
if( ( sp = getspnam( buf ) ) != ( struct spwd * )0 ) {
printf( "Valid login name is: %s\n", sp->sp_namp );
} else {
setspent();
while( ( sp=getspent( ) ) != ( struct spwd * )0 )
printf( "%s\n", sp->sp_namp );
}
}
endspent();
return(EXIT_SUCCESS);
}
Classification:
Safety: | |
---|---|
Cancellation point | Yes |
Signal handler | No |
Thread | No |
Safety: | |
---|---|
Cancellation point | Yes |
Signal handler | No |
Thread | Yes |