summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libc/getgrent.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libc/getgrent.c')
-rw-r--r--c/src/lib/libc/getgrent.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/c/src/lib/libc/getgrent.c b/c/src/lib/libc/getgrent.c
index e4fc0fe474..104b0a317f 100644
--- a/c/src/lib/libc/getgrent.c
+++ b/c/src/lib/libc/getgrent.c
@@ -21,6 +21,9 @@
#include <string.h>
#include <limits.h>
+#include <rtems/libio_.h>
+
+
static struct group gr_group; /* password structure */
static FILE *group_fp;
@@ -47,11 +50,14 @@ int getgrnam_r(
)
{
FILE *fp;
+ rtems_user_env_t * aux=rtems_current_user_env; /* save */
init_etc_passwd_group();
+ rtems_current_user_env=&rtems_global_user_env; /* set root */
if ((fp = fopen ("/etc/group", "r")) == NULL) {
errno = EINVAL;
+ rtems_current_user_env=aux; /* restore */
return -1;
}
@@ -66,11 +72,13 @@ int getgrnam_r(
if (!strcmp (groupname, name)) {
fclose (fp);
*result = grp;
+ rtems_current_user_env=aux; /* restore */
return 0;
}
}
fclose (fp);
errno = EINVAL;
+ rtems_current_user_env=aux; /* restore */
return -1;
}
@@ -96,11 +104,15 @@ int getgrgid_r(
)
{
FILE *fp;
+ rtems_user_env_t * aux=rtems_current_user_env; /* save */
+
init_etc_passwd_group();
+ rtems_current_user_env=&rtems_global_user_env; /* set root */
if ((fp = fopen ("/etc/group", "r")) == NULL) {
errno = EINVAL;
+ rtems_current_user_env=aux; /* restore */
return -1;
}
@@ -116,11 +128,13 @@ int getgrgid_r(
if (gid == gr_group.gr_gid) {
fclose (fp);
*result = grp;
+ rtems_current_user_env=aux; /* restore */
return 0;
}
}
fclose (fp);
errno = EINVAL;
+ rtems_current_user_env=aux; /* restore */
return -1;
}
@@ -160,12 +174,15 @@ struct group *getgrent( void )
void
setgrent ()
{
+ rtems_user_env_t * aux=rtems_current_user_env; /* save */
init_etc_passwd_group();
+ rtems_current_user_env=&rtems_global_user_env; /* set root */
if (group_fp != NULL)
fclose (group_fp);
group_fp = fopen ("/etc/group", "r");
+ rtems_current_user_env=aux; /* restore */
}
void