diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/exec/libcsupport/src/getgrent.c | 193 |
1 files changed, 0 insertions, 193 deletions
diff --git a/c/src/exec/libcsupport/src/getgrent.c b/c/src/exec/libcsupport/src/getgrent.c deleted file mode 100644 index 104b0a317f..0000000000 --- a/c/src/exec/libcsupport/src/getgrent.c +++ /dev/null @@ -1,193 +0,0 @@ -/* - * 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$ - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#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> - -#include <rtems/libio_.h> - - -static struct group gr_group; /* password structure */ -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 password[1024]; -static char groups[1024]; -static char *gr_mem[16] = { } ; - -extern void init_etc_passwd_group(void); - -int getgrnam_r( - const char *name, - struct group *grp, - char *buffer, - size_t bufsize, - struct group **result -) -{ - 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; - } - - while (fgets (buffer, bufsize, fp)) { - sscanf (buffer, "%[^:]:%[^:]:%d:%s\n", - groupname, password, (int *) &grp->gr_gid, - groups); - grp->gr_name = groupname; - grp->gr_passwd = password; - grp->gr_mem = gr_mem ; - - 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; -} - -struct group *getgrnam( - const char *name -) -{ - char buf[1024]; - struct group *g; - - if ( getgrnam_r( name, &gr_group, buf, 1024, &g ) ) - return NULL; - - return g; -} - -int getgrgid_r( - gid_t gid, - struct group *grp, - char *buffer, - size_t bufsize, - struct group **result -) -{ - 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; - } - - while (fgets (buffer, bufsize, fp)) { - sscanf (buffer, "%[^:]:%[^:]:%d:%s\n", - groupname, password, (int *) &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); - *result = grp; - rtems_current_user_env=aux; /* restore */ - return 0; - } - } - fclose (fp); - errno = EINVAL; - rtems_current_user_env=aux; /* restore */ - return -1; -} - -struct group *getgrgid ( - gid_t gid -) -{ - char buf[1024]; - struct group *g; - - if ( getgrgid_r( gid, &gr_group, buf, 1024, &g ) ) - return NULL; - - return g; -} - -struct group *getgrent( void ) -{ - 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, (int *) &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 () -{ - 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 -endgrent () -{ - if (group_fp != NULL) - fclose (group_fp); -} |