mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 23:23:13 +00:00
Password and group routines added by Ralf Corsepius <corsepiu@faw.uni-ulm.de>.
This commit is contained in:
119
c/src/exec/libcsupport/src/getgrent.c
Normal file
119
c/src/exec/libcsupport/src/getgrent.c
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <grp.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
static struct group gr_group; /* password structure */
|
||||
static FILE *group_fp;
|
||||
|
||||
static char groupname[8];
|
||||
static char password[1024];
|
||||
static char groups[1024];
|
||||
static char *gr_mem[16] = { } ;
|
||||
|
||||
struct group *
|
||||
getgrnam (name)
|
||||
const char *name;
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/group", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
if (!strcmp (groupname, name))
|
||||
{
|
||||
fclose (fp);
|
||||
return &gr_group;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct group *
|
||||
getgrgid (gid_t gid)
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/group", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
|
||||
if (gid == gr_group.gr_gid)
|
||||
{
|
||||
fclose (fp);
|
||||
return &gr_group;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct group *
|
||||
getgrent ()
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if (group_fp == NULL)
|
||||
return NULL;
|
||||
|
||||
if (fgets (buf, sizeof (buf), group_fp) == NULL)
|
||||
return NULL;
|
||||
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
return &gr_group;
|
||||
}
|
||||
|
||||
void
|
||||
setgrent ()
|
||||
{
|
||||
if (group_fp != NULL)
|
||||
fclose (group_fp);
|
||||
|
||||
group_fp = fopen ("/etc/group", "r");
|
||||
}
|
||||
|
||||
void
|
||||
endgrent ()
|
||||
{
|
||||
if (group_fp != NULL)
|
||||
fclose (group_fp);
|
||||
}
|
||||
129
c/src/exec/libcsupport/src/getpwent.c
Normal file
129
c/src/exec/libcsupport/src/getpwent.c
Normal file
@@ -0,0 +1,129 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <pwd.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
static struct passwd pw_passwd; /* password structure */
|
||||
static FILE *passwd_fp;
|
||||
|
||||
static char logname[8];
|
||||
static char password[1024];
|
||||
static char comment[1024];
|
||||
static char gecos[1024];
|
||||
static char dir[1024];
|
||||
static char shell[1024];
|
||||
|
||||
struct passwd *
|
||||
getpwnam (name)
|
||||
const char *name;
|
||||
{
|
||||
FILE *fp;
|
||||
int uid, gid;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
if (!strcmp (logname, name))
|
||||
{
|
||||
fclose (fp);
|
||||
return &pw_passwd;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct passwd *
|
||||
getpwuid (uid_t uid)
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
if (uid == pw_passwd.pw_uid)
|
||||
{
|
||||
fclose (fp);
|
||||
return &pw_passwd;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct passwd *
|
||||
getpwent ()
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if (passwd_fp == NULL)
|
||||
return NULL;
|
||||
|
||||
if (fgets (buf, sizeof (buf), passwd_fp) == NULL)
|
||||
return NULL;
|
||||
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
return &pw_passwd;
|
||||
}
|
||||
|
||||
void
|
||||
setpwent ()
|
||||
{
|
||||
if (passwd_fp != NULL)
|
||||
fclose (passwd_fp);
|
||||
|
||||
passwd_fp = fopen ("/etc/passwd", "r");
|
||||
}
|
||||
|
||||
void
|
||||
endpwent ()
|
||||
{
|
||||
if (passwd_fp != NULL)
|
||||
fclose (passwd_fp);
|
||||
}
|
||||
@@ -44,7 +44,10 @@ DIRECTORY_SCAN_PIECES=\
|
||||
opendir closedir readdir rewinddir scandir seekdir telldir getcwd
|
||||
|
||||
MALLOC_PIECES=\
|
||||
malloc __brk __sbrk \
|
||||
malloc __brk __sbrk
|
||||
|
||||
PASSWORD_GROUP_PIECES=\
|
||||
getpwent getgwent
|
||||
|
||||
LIBC_GLUE_PIECES=\
|
||||
__gettod __times \
|
||||
@@ -78,6 +81,7 @@ C_PIECES=\
|
||||
$(LIBC_GLUE_PIECES) \
|
||||
$(BASE_FS_PIECES) \
|
||||
$(MALLOC_PIECES) \
|
||||
$(PASSWORD_GROUP_PIECES) \
|
||||
$(TERMIOS_PIECES) \
|
||||
$(SYSTEM_CALL_PIECES) \
|
||||
$(DIRECTORY_SCAN_PIECES) \
|
||||
|
||||
119
c/src/lib/libc/getgrent.c
Normal file
119
c/src/lib/libc/getgrent.c
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <grp.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
static struct group gr_group; /* password structure */
|
||||
static FILE *group_fp;
|
||||
|
||||
static char groupname[8];
|
||||
static char password[1024];
|
||||
static char groups[1024];
|
||||
static char *gr_mem[16] = { } ;
|
||||
|
||||
struct group *
|
||||
getgrnam (name)
|
||||
const char *name;
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/group", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
if (!strcmp (groupname, name))
|
||||
{
|
||||
fclose (fp);
|
||||
return &gr_group;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct group *
|
||||
getgrgid (gid_t gid)
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/group", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
|
||||
if (gid == gr_group.gr_gid)
|
||||
{
|
||||
fclose (fp);
|
||||
return &gr_group;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct group *
|
||||
getgrent ()
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if (group_fp == NULL)
|
||||
return NULL;
|
||||
|
||||
if (fgets (buf, sizeof (buf), group_fp) == NULL)
|
||||
return NULL;
|
||||
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
return &gr_group;
|
||||
}
|
||||
|
||||
void
|
||||
setgrent ()
|
||||
{
|
||||
if (group_fp != NULL)
|
||||
fclose (group_fp);
|
||||
|
||||
group_fp = fopen ("/etc/group", "r");
|
||||
}
|
||||
|
||||
void
|
||||
endgrent ()
|
||||
{
|
||||
if (group_fp != NULL)
|
||||
fclose (group_fp);
|
||||
}
|
||||
129
c/src/lib/libc/getpwent.c
Normal file
129
c/src/lib/libc/getpwent.c
Normal file
@@ -0,0 +1,129 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <pwd.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
static struct passwd pw_passwd; /* password structure */
|
||||
static FILE *passwd_fp;
|
||||
|
||||
static char logname[8];
|
||||
static char password[1024];
|
||||
static char comment[1024];
|
||||
static char gecos[1024];
|
||||
static char dir[1024];
|
||||
static char shell[1024];
|
||||
|
||||
struct passwd *
|
||||
getpwnam (name)
|
||||
const char *name;
|
||||
{
|
||||
FILE *fp;
|
||||
int uid, gid;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
if (!strcmp (logname, name))
|
||||
{
|
||||
fclose (fp);
|
||||
return &pw_passwd;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct passwd *
|
||||
getpwuid (uid_t uid)
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
if (uid == pw_passwd.pw_uid)
|
||||
{
|
||||
fclose (fp);
|
||||
return &pw_passwd;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct passwd *
|
||||
getpwent ()
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if (passwd_fp == NULL)
|
||||
return NULL;
|
||||
|
||||
if (fgets (buf, sizeof (buf), passwd_fp) == NULL)
|
||||
return NULL;
|
||||
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
return &pw_passwd;
|
||||
}
|
||||
|
||||
void
|
||||
setpwent ()
|
||||
{
|
||||
if (passwd_fp != NULL)
|
||||
fclose (passwd_fp);
|
||||
|
||||
passwd_fp = fopen ("/etc/passwd", "r");
|
||||
}
|
||||
|
||||
void
|
||||
endpwent ()
|
||||
{
|
||||
if (passwd_fp != NULL)
|
||||
fclose (passwd_fp);
|
||||
}
|
||||
119
cpukit/libcsupport/src/getgrent.c
Normal file
119
cpukit/libcsupport/src/getgrent.c
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <grp.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
static struct group gr_group; /* password structure */
|
||||
static FILE *group_fp;
|
||||
|
||||
static char groupname[8];
|
||||
static char password[1024];
|
||||
static char groups[1024];
|
||||
static char *gr_mem[16] = { } ;
|
||||
|
||||
struct group *
|
||||
getgrnam (name)
|
||||
const char *name;
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/group", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
if (!strcmp (groupname, name))
|
||||
{
|
||||
fclose (fp);
|
||||
return &gr_group;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct group *
|
||||
getgrgid (gid_t gid)
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/group", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
|
||||
if (gid == gr_group.gr_gid)
|
||||
{
|
||||
fclose (fp);
|
||||
return &gr_group;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct group *
|
||||
getgrent ()
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if (group_fp == NULL)
|
||||
return NULL;
|
||||
|
||||
if (fgets (buf, sizeof (buf), group_fp) == NULL)
|
||||
return NULL;
|
||||
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%s\n",
|
||||
groupname, password, &gr_group.gr_gid,
|
||||
groups);
|
||||
gr_group.gr_name = groupname;
|
||||
gr_group.gr_passwd = password;
|
||||
gr_group.gr_mem = gr_mem ;
|
||||
|
||||
return &gr_group;
|
||||
}
|
||||
|
||||
void
|
||||
setgrent ()
|
||||
{
|
||||
if (group_fp != NULL)
|
||||
fclose (group_fp);
|
||||
|
||||
group_fp = fopen ("/etc/group", "r");
|
||||
}
|
||||
|
||||
void
|
||||
endgrent ()
|
||||
{
|
||||
if (group_fp != NULL)
|
||||
fclose (group_fp);
|
||||
}
|
||||
129
cpukit/libcsupport/src/getpwent.c
Normal file
129
cpukit/libcsupport/src/getpwent.c
Normal file
@@ -0,0 +1,129 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <pwd.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
static struct passwd pw_passwd; /* password structure */
|
||||
static FILE *passwd_fp;
|
||||
|
||||
static char logname[8];
|
||||
static char password[1024];
|
||||
static char comment[1024];
|
||||
static char gecos[1024];
|
||||
static char dir[1024];
|
||||
static char shell[1024];
|
||||
|
||||
struct passwd *
|
||||
getpwnam (name)
|
||||
const char *name;
|
||||
{
|
||||
FILE *fp;
|
||||
int uid, gid;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
if (!strcmp (logname, name))
|
||||
{
|
||||
fclose (fp);
|
||||
return &pw_passwd;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct passwd *
|
||||
getpwuid (uid_t uid)
|
||||
{
|
||||
FILE *fp;
|
||||
char buf[1024];
|
||||
|
||||
if ((fp = fopen ("/etc/passwd", "r")) == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (fgets (buf, sizeof (buf), fp))
|
||||
{
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
if (uid == pw_passwd.pw_uid)
|
||||
{
|
||||
fclose (fp);
|
||||
return &pw_passwd;
|
||||
}
|
||||
}
|
||||
fclose (fp);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct passwd *
|
||||
getpwent ()
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if (passwd_fp == NULL)
|
||||
return NULL;
|
||||
|
||||
if (fgets (buf, sizeof (buf), passwd_fp) == NULL)
|
||||
return NULL;
|
||||
|
||||
sscanf (buf, "%[^:]:%[^:]:%d:%d:%[^:]:%[^:]:%s\n",
|
||||
logname, password, &pw_passwd.pw_uid,
|
||||
&pw_passwd.pw_gid, comment, gecos,
|
||||
dir, shell);
|
||||
pw_passwd.pw_name = logname;
|
||||
pw_passwd.pw_passwd = password;
|
||||
pw_passwd.pw_comment = comment;
|
||||
pw_passwd.pw_gecos = gecos;
|
||||
pw_passwd.pw_dir = dir;
|
||||
pw_passwd.pw_shell = shell;
|
||||
|
||||
return &pw_passwd;
|
||||
}
|
||||
|
||||
void
|
||||
setpwent ()
|
||||
{
|
||||
if (passwd_fp != NULL)
|
||||
fclose (passwd_fp);
|
||||
|
||||
passwd_fp = fopen ("/etc/passwd", "r");
|
||||
}
|
||||
|
||||
void
|
||||
endpwent ()
|
||||
{
|
||||
if (passwd_fp != NULL)
|
||||
fclose (passwd_fp);
|
||||
}
|
||||
Reference in New Issue
Block a user