⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getent.c

📁 samba-3.0.22.tar.gz 编译smb服务器的源码
💻 C
字号:
/* 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 <kukuk@suse.de>, 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 <stdio.h>#include <pwd.h>#include <grp.h>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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -