X-Git-Url: http://git.samba.org/samba.git/?p=tprouty%2Fsamba.git;a=blobdiff_plain;f=testsuite%2Fnsswitch%2Fgetent.c;fp=testsuite%2Fnsswitch%2Fgetent.c;h=b4c4e50c6fe7a6803e3359c28d5877160cb45dac;hp=0000000000000000000000000000000000000000;hb=dcc39ea43984fe9f9c683e48423794793a923e28;hpb=9de17c5c3892930d6d1d349df63e2c4206787ceb diff --git a/testsuite/nsswitch/getent.c b/testsuite/nsswitch/getent.c new file mode 100644 index 0000000000..b4c4e50c6f --- /dev/null +++ b/testsuite/nsswitch/getent.c @@ -0,0 +1,151 @@ +/* Cut down version of getent which only returns passwd and group database + entries and seems to compile on most systems without too much fuss. + Original copyright notice below. */ + +/* Copyright (c) 1998, 1999, 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Thorsten Kukuk , 1998. + + 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include + +group_keys (int number, char *key[]) +{ + int result = 0; + int i; + + for (i = 0; i < number; ++i) + { + struct group *grp; + + if (isdigit (key[i][0])) + grp = getgrgid (atol (key[i])); + else + grp = getgrnam (key[i]); + + if (grp == NULL) + result = 2; + else + print_group (grp); + } + + return result; +} + +passwd_keys (int number, char *key[]) +{ + int result = 0; + int i; + + for (i = 0; i < number; ++i) + { + struct passwd *pwd; + + if (isdigit (key[i][0])) + pwd = getpwuid (atol (key[i])); + else + pwd = getpwnam (key[i]); + + if (pwd == NULL) + result = 2; + else + print_passwd (pwd); + } + + return result; +} + +print_group (struct group *grp) +{ + unsigned int i = 0; + + printf ("%s:%s:%ld:", grp->gr_name ? grp->gr_name : "", + grp->gr_passwd ? grp->gr_passwd : "", + (unsigned long)grp->gr_gid); + + while (grp->gr_mem[i] != NULL) + { + fputs (grp->gr_mem[i], stdout); + ++i; + if (grp->gr_mem[i] != NULL) + fputs (",", stdout); + } + fputs ("\n", stdout); +} + +print_passwd (struct passwd *pwd) +{ + printf ("%s:%s:%ld:%ld:%s:%s:%s\n", + pwd->pw_name ? pwd->pw_name : "", + pwd->pw_passwd ? pwd->pw_passwd : "", + (unsigned long)pwd->pw_uid, + (unsigned long)pwd->pw_gid, + pwd->pw_gecos ? pwd->pw_gecos : "", + pwd->pw_dir ? pwd->pw_dir : "", + pwd->pw_shell ? pwd->pw_shell : ""); +} + +int main(int argc, char **argv) +{ + switch(argv[1][0]) + { + case 'g': /* group */ + if (strcmp (argv[1], "group") == 0) + { + if (argc == 2) + { + struct group *grp; + + setgrent (); + while ((grp = getgrent()) != NULL) + print_group (grp); + endgrent (); + } + else + return group_keys (argc - 2, &argv[2]); + } + else + goto error; + break; + + case 'p': /* passwd, protocols */ + if (strcmp (argv[1], "passwd") == 0) + { + if (argc == 2) + { + struct passwd *pwd; + + setpwent (); + while ((pwd = getpwent()) != NULL) + print_passwd (pwd); + endpwent (); + } + else + return passwd_keys (argc - 2, &argv[2]); + } + else + goto error; + break; + default: + error: + fprintf (stderr, "Unknown database: %s\n", argv[1]); + return 1; + } + return 0; +}