add directory gnu
This commit is contained in:
29
gnu/glibc/glibc-1.03/grp/Makefile
Normal file
29
gnu/glibc/glibc-1.03/grp/Makefile
Normal file
@@ -0,0 +1,29 @@
|
||||
# Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
||||
# This file is part of the GNU C Library.
|
||||
|
||||
# The GNU C Library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public License as
|
||||
# published by the Free Software Foundation; either version 2 of the
|
||||
# License, or (at your option) any later version.
|
||||
|
||||
# The GNU C Library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
# not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
# Cambridge, MA 02139, USA.
|
||||
|
||||
#
|
||||
# Sub-makefile for grp portion of the library.
|
||||
#
|
||||
subdir := grp
|
||||
|
||||
routines := grpopen grpread fgetgrent getgrent getgrgid getgrnam \
|
||||
initgroups setgroups
|
||||
|
||||
tests := testgrp
|
||||
|
||||
include ../Rules
|
||||
41
gnu/glibc/glibc-1.03/grp/fgetgrent.c
Normal file
41
gnu/glibc/glibc-1.03/grp/fgetgrent.c
Normal file
@@ -0,0 +1,41 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <grp.h>
|
||||
|
||||
|
||||
/* Read a group entry from STREAM. */
|
||||
struct group *
|
||||
DEFUN(fgetgrent, (stream), FILE *stream)
|
||||
{
|
||||
static PTR info = NULL;
|
||||
if (info == NULL)
|
||||
{
|
||||
info = __grpalloc();
|
||||
if (info == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return __grpread(stream, info);
|
||||
}
|
||||
67
gnu/glibc/glibc-1.03/grp/getgrent.c
Normal file
67
gnu/glibc/glibc-1.03/grp/getgrent.c
Normal file
@@ -0,0 +1,67 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <grp.h>
|
||||
|
||||
static FILE *stream = NULL;
|
||||
|
||||
/* Rewind the stream. */
|
||||
void
|
||||
DEFUN_VOID(setgrent)
|
||||
{
|
||||
if (stream != NULL)
|
||||
rewind(stream);
|
||||
}
|
||||
|
||||
|
||||
/* Close the stream. */
|
||||
void
|
||||
DEFUN_VOID(endgrent)
|
||||
{
|
||||
if (stream != NULL)
|
||||
{
|
||||
(void) fclose(stream);
|
||||
stream = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Read an entry from the stream. */
|
||||
struct group *
|
||||
DEFUN_VOID(getgrent)
|
||||
{
|
||||
static PTR info = NULL;
|
||||
if (info == NULL)
|
||||
{
|
||||
info = __grpalloc();
|
||||
if (info == NULL)
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
if (stream == NULL)
|
||||
{
|
||||
stream = __grpopen();
|
||||
if (stream == NULL)
|
||||
return(NULL);
|
||||
}
|
||||
|
||||
return(__grpread(stream, info));
|
||||
}
|
||||
50
gnu/glibc/glibc-1.03/grp/getgrgid.c
Normal file
50
gnu/glibc/glibc-1.03/grp/getgrgid.c
Normal file
@@ -0,0 +1,50 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <grp.h>
|
||||
|
||||
/* Search for an entry with a matching group ID. */
|
||||
struct group *
|
||||
DEFUN(getgrgid, (gid), register gid_t gid)
|
||||
{
|
||||
static PTR info = NULL;
|
||||
register FILE *stream;
|
||||
register struct group *g;
|
||||
|
||||
if (info == NULL)
|
||||
{
|
||||
info = __grpalloc();
|
||||
if (info == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
stream = __grpopen();
|
||||
if (stream == NULL)
|
||||
return NULL;
|
||||
|
||||
while ((g = __grpread(stream, info)) != NULL)
|
||||
if (g->gr_gid == (gid_t) gid)
|
||||
break;
|
||||
|
||||
(void) fclose(stream);
|
||||
return g;
|
||||
}
|
||||
50
gnu/glibc/glibc-1.03/grp/getgrnam.c
Normal file
50
gnu/glibc/glibc-1.03/grp/getgrnam.c
Normal file
@@ -0,0 +1,50 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <grp.h>
|
||||
|
||||
/* Search for an entry with a matching name. */
|
||||
struct group *
|
||||
DEFUN(getgrnam, (name), register CONST char *name)
|
||||
{
|
||||
static PTR info = NULL;
|
||||
register FILE *stream;
|
||||
register struct group *g;
|
||||
|
||||
if (info == NULL)
|
||||
{
|
||||
info = __grpalloc();
|
||||
if (info == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
stream = __grpopen();
|
||||
if (stream == NULL)
|
||||
return NULL;
|
||||
|
||||
while ((g = __grpread(stream, info)) != NULL)
|
||||
if (!strcmp(g->gr_name, name))
|
||||
break;
|
||||
|
||||
(void) fclose(stream);
|
||||
return g;
|
||||
}
|
||||
98
gnu/glibc/glibc-1.03/grp/grp.h
Normal file
98
gnu/glibc/glibc-1.03/grp/grp.h
Normal file
@@ -0,0 +1,98 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/*
|
||||
* POSIX Standard: 9.2.1 Group Database Access <grp.h>
|
||||
*/
|
||||
|
||||
#ifndef _GRP_H
|
||||
|
||||
#define _GRP_H 1
|
||||
#include <features.h>
|
||||
|
||||
#include <gnu/types.h>
|
||||
|
||||
|
||||
/* The group structure. */
|
||||
struct group
|
||||
{
|
||||
char *gr_name; /* Group name. */
|
||||
char *gr_passwd; /* Password. */
|
||||
__gid_t gr_gid; /* Group ID. */
|
||||
char **gr_mem; /* Member list. */
|
||||
};
|
||||
|
||||
|
||||
#if defined(__USE_SVID) || defined(__USE_GNU)
|
||||
#define __need_FILE
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
/* Return a new stream open on the group file. */
|
||||
extern FILE *EXFUN(__grpopen, (NOARGS));
|
||||
|
||||
/* Read a group entry from STREAM, filling in G.
|
||||
Return the `struct group' of G if successful, NULL on failure. */
|
||||
extern struct group *EXFUN(__grpread, (FILE *__stream, PTR __g));
|
||||
|
||||
/* Return a chunk of memory containing pre-initialized data for __grpread. */
|
||||
extern PTR EXFUN(__grpalloc, (NOARGS));
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__USE_SVID) || defined(__USE_MISC)
|
||||
/* Rewind the group-file stream. */
|
||||
extern void EXFUN(setgrent, (NOARGS));
|
||||
|
||||
/* Close the group-file stream. */
|
||||
extern void EXFUN(endgrent, (NOARGS));
|
||||
|
||||
/* Read an entry from the group-file stream, opening it if necessary. */
|
||||
extern struct group *EXFUN(getgrent, (NOARGS));
|
||||
#endif
|
||||
|
||||
#ifdef __USE_SVID
|
||||
/* Read a group entry from STREAM. */
|
||||
extern struct group *EXFUN(fgetgrent, (FILE *__stream));
|
||||
#endif
|
||||
|
||||
/* Search for an entry with a matching group ID. */
|
||||
extern struct group *EXFUN(getgrgid, (__gid_t __gid));
|
||||
|
||||
/* Search for an entry with a matching group name. */
|
||||
extern struct group *EXFUN(getgrnam, (CONST char *__name));
|
||||
|
||||
|
||||
#ifdef __USE_BSD
|
||||
|
||||
#define __need_size_t
|
||||
#include <stddef.h>
|
||||
|
||||
/* Set the group set for the current user to GROUPS (N of them). */
|
||||
extern int EXFUN(setgroups, (size_t __n, CONST __gid_t *groups));
|
||||
|
||||
/* Initialize the group set for the current user
|
||||
by reading the group database and using all groups
|
||||
of which USER is a member. Also include GROUP. */
|
||||
extern int EXFUN(initgroups, (CONST char *user, __gid_t group));
|
||||
|
||||
#endif /* Use BSD. */
|
||||
|
||||
|
||||
#endif /* grp.h */
|
||||
28
gnu/glibc/glibc-1.03/grp/grpopen.c
Normal file
28
gnu/glibc/glibc-1.03/grp/grpopen.c
Normal file
@@ -0,0 +1,28 @@
|
||||
/* Copyright (C) 1991 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <stdio.h>
|
||||
#include <grp.h>
|
||||
|
||||
/* Return a new stream open on the group file. */
|
||||
FILE *
|
||||
DEFUN_VOID(__grpopen)
|
||||
{
|
||||
return fopen("/etc/group", "r");
|
||||
}
|
||||
135
gnu/glibc/glibc-1.03/grp/grpread.c
Normal file
135
gnu/glibc/glibc-1.03/grp/grpread.c
Normal file
@@ -0,0 +1,135 @@
|
||||
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <grp.h>
|
||||
|
||||
/* This is the function that all the others are based on.
|
||||
The format of the group file is known only here. */
|
||||
|
||||
/* Structure containing info kept by each __grpread caller. */
|
||||
typedef struct
|
||||
{
|
||||
char *buf;
|
||||
size_t buflen;
|
||||
size_t max_members;
|
||||
char **members;
|
||||
struct group g;
|
||||
} grpread_info;
|
||||
|
||||
|
||||
/* Return a chunk of memory containing a pre-initialized `grpread_info'. */
|
||||
PTR
|
||||
DEFUN_VOID(__grpalloc)
|
||||
{
|
||||
grpread_info *info = (PTR) malloc (sizeof(grpread_info));
|
||||
if (info == NULL)
|
||||
return NULL;
|
||||
|
||||
info->buf = NULL;
|
||||
info->buflen = 0;
|
||||
|
||||
info->max_members = 5;
|
||||
info->members = (char **) malloc (5 * sizeof(char *));
|
||||
if (info->members == NULL)
|
||||
{
|
||||
free ((PTR) info);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
/* Read a group entry from STREAM, filling in G. */
|
||||
struct group *
|
||||
DEFUN(__grpread, (stream, g), FILE *stream AND PTR CONST g)
|
||||
{
|
||||
register grpread_info *CONST info = (grpread_info *) g;
|
||||
char *start, *end;
|
||||
register size_t i;
|
||||
|
||||
/* Idiocy checks. */
|
||||
if (stream == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
do
|
||||
if (__getline (&info->buf, &info->buflen, stream) == -1)
|
||||
return NULL;
|
||||
while (info->buf[0] == '#');
|
||||
|
||||
start = info->buf;
|
||||
end = strchr (start, ':');
|
||||
if (end == NULL)
|
||||
return NULL;
|
||||
*end = '\0';
|
||||
info->g.gr_name = start;
|
||||
|
||||
start = end + 1;
|
||||
end = strchr (start, ':');
|
||||
if (end == NULL)
|
||||
return NULL;
|
||||
*end = '\0';
|
||||
info->g.gr_passwd = start;
|
||||
|
||||
info->g.gr_gid = (gid_t) strtol (end + 1, &end, 10);
|
||||
if (*end != ':')
|
||||
return NULL;
|
||||
|
||||
i = 0;
|
||||
do
|
||||
{
|
||||
start = end + 1;
|
||||
end = strchr (start, ',');
|
||||
if (end == NULL)
|
||||
{
|
||||
end = strchr (start, '\n');
|
||||
if (end == start)
|
||||
break;
|
||||
if (end == NULL)
|
||||
return NULL;
|
||||
*end = '\0';
|
||||
end = NULL;
|
||||
}
|
||||
else
|
||||
*end = '\0';
|
||||
|
||||
if (i == info->max_members - 2)
|
||||
{
|
||||
info->max_members += 5;
|
||||
info->members = (char **)
|
||||
realloc ((PTR) info->members, info->max_members * sizeof (char *));
|
||||
if (info->members == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
info->members[i++] = start;
|
||||
} while (end != NULL);
|
||||
info->members[i] = NULL;
|
||||
info->g.gr_mem = info->members;
|
||||
|
||||
return &info->g;
|
||||
}
|
||||
65
gnu/glibc/glibc-1.03/grp/initgroups.c
Normal file
65
gnu/glibc/glibc-1.03/grp/initgroups.c
Normal file
@@ -0,0 +1,65 @@
|
||||
/* Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <grp.h>
|
||||
#include <limits.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
|
||||
/* Initialize the group set for the current user
|
||||
by reading the group database and using all groups
|
||||
of which USER is a member. Also include GROUP. */
|
||||
int
|
||||
DEFUN(initgroups, (user, group),
|
||||
CONST char *user AND gid_t group)
|
||||
{
|
||||
static PTR info = NULL;
|
||||
register FILE *stream;
|
||||
register struct group *g;
|
||||
gid_t groups[NGROUPS_MAX];
|
||||
register size_t n;
|
||||
|
||||
if (info == NULL)
|
||||
{
|
||||
info = __grpalloc();
|
||||
if (info == NULL)
|
||||
return -1;
|
||||
}
|
||||
|
||||
stream = __grpopen();
|
||||
if (stream == NULL)
|
||||
return -1;
|
||||
|
||||
n = 0;
|
||||
groups[n++] = group;
|
||||
|
||||
while (n < NGROUPS_MAX && (g = __grpread(stream, info)) != NULL)
|
||||
if (g->gr_gid != group)
|
||||
{
|
||||
register char **m;
|
||||
|
||||
for (m = g->gr_mem; *m != NULL; ++m)
|
||||
if (!strcmp(*m, user))
|
||||
groups[n++] = g->gr_gid;
|
||||
}
|
||||
|
||||
return setgroups(n, groups);
|
||||
}
|
||||
40
gnu/glibc/glibc-1.03/grp/testgrp.c
Normal file
40
gnu/glibc/glibc-1.03/grp/testgrp.c
Normal file
@@ -0,0 +1,40 @@
|
||||
#include <ansidecl.h>
|
||||
#include <grp.h>
|
||||
#include <pwd.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
DEFUN_VOID(main)
|
||||
{
|
||||
uid_t me;
|
||||
struct passwd *my_passwd;
|
||||
struct group *my_group;
|
||||
char **members;
|
||||
|
||||
me = getuid ();
|
||||
my_passwd = getpwuid (me);
|
||||
|
||||
printf ("My login name is %s.\n", my_passwd->pw_name);
|
||||
printf ("My uid is %d.\n", (int)(my_passwd->pw_uid));
|
||||
printf ("My home directory is %s.\n", my_passwd->pw_dir);
|
||||
printf ("My default shell is %s.\n", my_passwd->pw_shell);
|
||||
|
||||
my_group = getgrgid (my_passwd->pw_gid);
|
||||
if (!my_group) {
|
||||
printf ("Couldn't find out about group %d.\n", (int)(my_passwd->pw_gid));
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
printf ("My default group is %s (%d).\n",
|
||||
my_group->gr_name, (int)(my_passwd->pw_gid));
|
||||
printf ("The members of this group are:\n");
|
||||
for (members = my_group->gr_mem; *members != NULL; ++members)
|
||||
printf (" %s\n", *members);
|
||||
exit (EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user