forked from Imagelibrary/rtems
Added code to initialize the /etc/group and /etc/passwd files.
This commit is contained in:
@@ -1,7 +1,14 @@
|
|||||||
/*
|
/*
|
||||||
|
* POSIX 1003.1b - 9.2.1 - Group Database Access Routines
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
* $Id$
|
* $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
@@ -14,11 +21,20 @@
|
|||||||
static struct group gr_group; /* password structure */
|
static struct group gr_group; /* password structure */
|
||||||
static FILE *group_fp;
|
static FILE *group_fp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The size of these buffers is arbitrary and there is no provision
|
||||||
|
* to protect any of them from overflowing. The scanf patterns
|
||||||
|
* need to be changed to prevent overflowing. In addition,
|
||||||
|
* the limits on these needs to be examined.
|
||||||
|
*/
|
||||||
|
|
||||||
static char groupname[8];
|
static char groupname[8];
|
||||||
static char password[1024];
|
static char password[1024];
|
||||||
static char groups[1024];
|
static char groups[1024];
|
||||||
static char *gr_mem[16] = { } ;
|
static char *gr_mem[16] = { } ;
|
||||||
|
|
||||||
|
extern void init_etc_passwd_group(void);
|
||||||
|
|
||||||
int getgrnam_r(
|
int getgrnam_r(
|
||||||
const char *name,
|
const char *name,
|
||||||
struct group *grp,
|
struct group *grp,
|
||||||
@@ -29,6 +45,8 @@ int getgrnam_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -76,6 +94,8 @@ int getgrgid_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -137,6 +157,8 @@ struct group *getgrent( void )
|
|||||||
void
|
void
|
||||||
setgrent ()
|
setgrent ()
|
||||||
{
|
{
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if (group_fp != NULL)
|
if (group_fp != NULL)
|
||||||
fclose (group_fp);
|
fclose (group_fp);
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* POSIX 1003.1b - 9.2.2 - User Database Access Routines
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
@@ -6,10 +16,19 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
static struct passwd pw_passwd; /* password structure */
|
static struct passwd pw_passwd; /* password structure */
|
||||||
static FILE *passwd_fp;
|
static FILE *passwd_fp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The size of these buffers is arbitrary and there is no provision
|
||||||
|
* to protect any of them from overflowing. The scanf patterns
|
||||||
|
* need to be changed to prevent overflowing. In addition,
|
||||||
|
* the limits on these needs to be examined.
|
||||||
|
*/
|
||||||
|
|
||||||
static char logname[8];
|
static char logname[8];
|
||||||
static char password[1024];
|
static char password[1024];
|
||||||
static char comment[1024];
|
static char comment[1024];
|
||||||
@@ -17,6 +36,50 @@ static char gecos[1024];
|
|||||||
static char dir[1024];
|
static char dir[1024];
|
||||||
static char shell[1024];
|
static char shell[1024];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize a useable but dummy /etc/passwd
|
||||||
|
*
|
||||||
|
* NOTE: Ignore all errors.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static char etc_passwd_initted = 0;
|
||||||
|
|
||||||
|
void init_etc_passwd_group(void)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if ( etc_passwd_initted )
|
||||||
|
return;
|
||||||
|
etc_passwd_initted = 1;
|
||||||
|
|
||||||
|
(void) mkdir( "/etc", S_IRWXU | S_IRWXG | S_IRWXO );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize /etc/passwd
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((fp = fopen ("/etc/passwd", "w")) == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fprintf( fp, "root:*:0:0:root,,,,:/tmp:/bin/false\n"
|
||||||
|
"rtems:*:1:1:RTEMS Application,,,,:/tmp:/bin/false\n" );
|
||||||
|
|
||||||
|
fclose( fp );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize /etc/group
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((fp = fopen ("/etc/group", "w")) == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fprintf( fp, "root::0:root\n"
|
||||||
|
"rtems::0:rtems\n" );
|
||||||
|
|
||||||
|
fclose( fp );
|
||||||
|
}
|
||||||
|
|
||||||
int getpwnam_r(
|
int getpwnam_r(
|
||||||
const char *name,
|
const char *name,
|
||||||
struct passwd *pwd,
|
struct passwd *pwd,
|
||||||
@@ -27,6 +90,8 @@ int getpwnam_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -78,6 +143,8 @@ int getpwuid_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -145,6 +212,8 @@ struct passwd *getpwent()
|
|||||||
|
|
||||||
void setpwent( void )
|
void setpwent( void )
|
||||||
{
|
{
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if (passwd_fp != NULL)
|
if (passwd_fp != NULL)
|
||||||
fclose (passwd_fp);
|
fclose (passwd_fp);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
/*
|
/*
|
||||||
|
* POSIX 1003.1b - 9.2.1 - Group Database Access Routines
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
* $Id$
|
* $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
@@ -14,11 +21,20 @@
|
|||||||
static struct group gr_group; /* password structure */
|
static struct group gr_group; /* password structure */
|
||||||
static FILE *group_fp;
|
static FILE *group_fp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The size of these buffers is arbitrary and there is no provision
|
||||||
|
* to protect any of them from overflowing. The scanf patterns
|
||||||
|
* need to be changed to prevent overflowing. In addition,
|
||||||
|
* the limits on these needs to be examined.
|
||||||
|
*/
|
||||||
|
|
||||||
static char groupname[8];
|
static char groupname[8];
|
||||||
static char password[1024];
|
static char password[1024];
|
||||||
static char groups[1024];
|
static char groups[1024];
|
||||||
static char *gr_mem[16] = { } ;
|
static char *gr_mem[16] = { } ;
|
||||||
|
|
||||||
|
extern void init_etc_passwd_group(void);
|
||||||
|
|
||||||
int getgrnam_r(
|
int getgrnam_r(
|
||||||
const char *name,
|
const char *name,
|
||||||
struct group *grp,
|
struct group *grp,
|
||||||
@@ -29,6 +45,8 @@ int getgrnam_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -76,6 +94,8 @@ int getgrgid_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -137,6 +157,8 @@ struct group *getgrent( void )
|
|||||||
void
|
void
|
||||||
setgrent ()
|
setgrent ()
|
||||||
{
|
{
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if (group_fp != NULL)
|
if (group_fp != NULL)
|
||||||
fclose (group_fp);
|
fclose (group_fp);
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* POSIX 1003.1b - 9.2.2 - User Database Access Routines
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
@@ -6,10 +16,19 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
static struct passwd pw_passwd; /* password structure */
|
static struct passwd pw_passwd; /* password structure */
|
||||||
static FILE *passwd_fp;
|
static FILE *passwd_fp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The size of these buffers is arbitrary and there is no provision
|
||||||
|
* to protect any of them from overflowing. The scanf patterns
|
||||||
|
* need to be changed to prevent overflowing. In addition,
|
||||||
|
* the limits on these needs to be examined.
|
||||||
|
*/
|
||||||
|
|
||||||
static char logname[8];
|
static char logname[8];
|
||||||
static char password[1024];
|
static char password[1024];
|
||||||
static char comment[1024];
|
static char comment[1024];
|
||||||
@@ -17,6 +36,50 @@ static char gecos[1024];
|
|||||||
static char dir[1024];
|
static char dir[1024];
|
||||||
static char shell[1024];
|
static char shell[1024];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize a useable but dummy /etc/passwd
|
||||||
|
*
|
||||||
|
* NOTE: Ignore all errors.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static char etc_passwd_initted = 0;
|
||||||
|
|
||||||
|
void init_etc_passwd_group(void)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if ( etc_passwd_initted )
|
||||||
|
return;
|
||||||
|
etc_passwd_initted = 1;
|
||||||
|
|
||||||
|
(void) mkdir( "/etc", S_IRWXU | S_IRWXG | S_IRWXO );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize /etc/passwd
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((fp = fopen ("/etc/passwd", "w")) == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fprintf( fp, "root:*:0:0:root,,,,:/tmp:/bin/false\n"
|
||||||
|
"rtems:*:1:1:RTEMS Application,,,,:/tmp:/bin/false\n" );
|
||||||
|
|
||||||
|
fclose( fp );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize /etc/group
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((fp = fopen ("/etc/group", "w")) == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fprintf( fp, "root::0:root\n"
|
||||||
|
"rtems::0:rtems\n" );
|
||||||
|
|
||||||
|
fclose( fp );
|
||||||
|
}
|
||||||
|
|
||||||
int getpwnam_r(
|
int getpwnam_r(
|
||||||
const char *name,
|
const char *name,
|
||||||
struct passwd *pwd,
|
struct passwd *pwd,
|
||||||
@@ -27,6 +90,8 @@ int getpwnam_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -78,6 +143,8 @@ int getpwuid_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -145,6 +212,8 @@ struct passwd *getpwent()
|
|||||||
|
|
||||||
void setpwent( void )
|
void setpwent( void )
|
||||||
{
|
{
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if (passwd_fp != NULL)
|
if (passwd_fp != NULL)
|
||||||
fclose (passwd_fp);
|
fclose (passwd_fp);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,14 @@
|
|||||||
/*
|
/*
|
||||||
|
* POSIX 1003.1b - 9.2.1 - Group Database Access Routines
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
* $Id$
|
* $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
@@ -14,11 +21,20 @@
|
|||||||
static struct group gr_group; /* password structure */
|
static struct group gr_group; /* password structure */
|
||||||
static FILE *group_fp;
|
static FILE *group_fp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The size of these buffers is arbitrary and there is no provision
|
||||||
|
* to protect any of them from overflowing. The scanf patterns
|
||||||
|
* need to be changed to prevent overflowing. In addition,
|
||||||
|
* the limits on these needs to be examined.
|
||||||
|
*/
|
||||||
|
|
||||||
static char groupname[8];
|
static char groupname[8];
|
||||||
static char password[1024];
|
static char password[1024];
|
||||||
static char groups[1024];
|
static char groups[1024];
|
||||||
static char *gr_mem[16] = { } ;
|
static char *gr_mem[16] = { } ;
|
||||||
|
|
||||||
|
extern void init_etc_passwd_group(void);
|
||||||
|
|
||||||
int getgrnam_r(
|
int getgrnam_r(
|
||||||
const char *name,
|
const char *name,
|
||||||
struct group *grp,
|
struct group *grp,
|
||||||
@@ -29,6 +45,8 @@ int getgrnam_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -76,6 +94,8 @@ int getgrgid_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
if ((fp = fopen ("/etc/group", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -137,6 +157,8 @@ struct group *getgrent( void )
|
|||||||
void
|
void
|
||||||
setgrent ()
|
setgrent ()
|
||||||
{
|
{
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if (group_fp != NULL)
|
if (group_fp != NULL)
|
||||||
fclose (group_fp);
|
fclose (group_fp);
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* POSIX 1003.1b - 9.2.2 - User Database Access Routines
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may be
|
||||||
|
* found in the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
@@ -6,10 +16,19 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
static struct passwd pw_passwd; /* password structure */
|
static struct passwd pw_passwd; /* password structure */
|
||||||
static FILE *passwd_fp;
|
static FILE *passwd_fp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The size of these buffers is arbitrary and there is no provision
|
||||||
|
* to protect any of them from overflowing. The scanf patterns
|
||||||
|
* need to be changed to prevent overflowing. In addition,
|
||||||
|
* the limits on these needs to be examined.
|
||||||
|
*/
|
||||||
|
|
||||||
static char logname[8];
|
static char logname[8];
|
||||||
static char password[1024];
|
static char password[1024];
|
||||||
static char comment[1024];
|
static char comment[1024];
|
||||||
@@ -17,6 +36,50 @@ static char gecos[1024];
|
|||||||
static char dir[1024];
|
static char dir[1024];
|
||||||
static char shell[1024];
|
static char shell[1024];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize a useable but dummy /etc/passwd
|
||||||
|
*
|
||||||
|
* NOTE: Ignore all errors.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static char etc_passwd_initted = 0;
|
||||||
|
|
||||||
|
void init_etc_passwd_group(void)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if ( etc_passwd_initted )
|
||||||
|
return;
|
||||||
|
etc_passwd_initted = 1;
|
||||||
|
|
||||||
|
(void) mkdir( "/etc", S_IRWXU | S_IRWXG | S_IRWXO );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize /etc/passwd
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((fp = fopen ("/etc/passwd", "w")) == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fprintf( fp, "root:*:0:0:root,,,,:/tmp:/bin/false\n"
|
||||||
|
"rtems:*:1:1:RTEMS Application,,,,:/tmp:/bin/false\n" );
|
||||||
|
|
||||||
|
fclose( fp );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize /etc/group
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((fp = fopen ("/etc/group", "w")) == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fprintf( fp, "root::0:root\n"
|
||||||
|
"rtems::0:rtems\n" );
|
||||||
|
|
||||||
|
fclose( fp );
|
||||||
|
}
|
||||||
|
|
||||||
int getpwnam_r(
|
int getpwnam_r(
|
||||||
const char *name,
|
const char *name,
|
||||||
struct passwd *pwd,
|
struct passwd *pwd,
|
||||||
@@ -27,6 +90,8 @@ int getpwnam_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -78,6 +143,8 @@ int getpwuid_r(
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
if ((fp = fopen ("/etc/passwd", "r")) == NULL) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -145,6 +212,8 @@ struct passwd *getpwent()
|
|||||||
|
|
||||||
void setpwent( void )
|
void setpwent( void )
|
||||||
{
|
{
|
||||||
|
init_etc_passwd_group();
|
||||||
|
|
||||||
if (passwd_fp != NULL)
|
if (passwd_fp != NULL)
|
||||||
fclose (passwd_fp);
|
fclose (passwd_fp);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user