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

📄 setfacl.c

📁 cygwin, 著名的在win32下模拟unix操作系统的东东
💻 C
📖 第 1 页 / 共 2 页
字号:
            "\n"            "Modify file and directory access control lists (ACLs)\n"            "\n"            "  -d, --delete     delete one or more specified ACL entries\n"            "  -f, --file       set ACL entries for FILE to ACL entries read\n"            "                   from a ACL_FILE\n"            "  -m, --modify     modify one or more specified ACL entries\n"            "  -r, --replace    replace mask entry with maximum permissions\n"            "                   needed for the file group class\n"            "  -s, --substitute substitute specified ACL entries for the\n"            "                   ACL of FILE\n"            "  -h, --help       output usage information and exit\n"            "  -v, --version    output version information and exit\n"            "\n"            "At least one of (-d, -f, -m, -s) must be specified\n"            "\n"            "", prog_name, prog_name);  if (stream == stdout)   {    printf(""            "     Acl_entries are one or more comma-separated ACL entries \n"            "     from the following list:\n"            "\n"            "         u[ser]::perm\n"            "         u[ser]:uid:perm\n"            "         g[roup]::perm\n"            "         g[roup]:gid:perm\n"            "         m[ask]::perm\n"            "         o[ther]::perm\n"            "\n"            "     Default entries are like the above with the additional\n"            "     default identifier. For example: \n"            "\n"            "         d[efault]:u[ser]:uid:perm\n"            "\n"            "     `perm' is either a 3-char permissions string in the form\n"            "     \"rwx\" with the character - for no permission\n"            "     or it is the octal representation of the permissions, a\n"            "     value from 0 (equivalent to \"---\") to 7 (\"rwx\").\n"            "     `uid' is a user name or a numerical uid.\n"            "     `gid' is a group name or a numerical gid.\n"            "\n"            "\n"            "For each file given as parameter, %s will either replace its\n"            "complete ACL (-s, -f), or it will add, modify, or delete ACL\n"            "entries.\n"            "\n"            "The following options are supported:\n"            "\n"            "-d   Delete one or more specified entries from the file's ACL.\n"            "     The owner, group and others entries must not be deleted.\n"            "     Acl_entries to be deleted should be specified without\n"            "     permissions, as in the following list:\n"            "\n"            "         u[ser]:uid\n"            "         g[roup]:gid\n"            "         d[efault]:u[ser]:uid\n"            "         d[efault]:g[roup]:gid\n"            "         d[efault]:m[ask]:\n"            "         d[efault]:o[ther]:\n"            "\n"            "-f   Take the Acl_entries from ACL_FILE one per line. Whitespace\n"            "     characters are ignored, and the character \"#\" may be used\n"            "     to start a comment.  The special filename \"-\" indicates\n"            "     reading from stdin.\n"            "     Required entries are\n"            "     - One user entry for the owner of the file.\n"            "     - One group entry for the group of the file.\n"            "     - One other entry.\n"            "     If additional user and group entries are given:\n"            "     - A mask entry for the file group class of the file.\n"            "     - No duplicate user or group entries with the same uid/gid.\n"            "     If it is a directory:\n"            "     - One default user entry for the owner of the file.\n"            "     - One default group entry for the group of the file.\n"            "     - One default mask entry for the file group class.\n"            "     - One default other entry.\n"            "\n"            "-m   Add or modify one or more specified ACL entries.\n"            "     Acl_entries is a comma-separated list of entries from the \n"            "     same list as above.\n"            "\n"            "-r   Causes the permissions specified in the mask entry to be\n"            "     ignored and replaced by the maximum permissions needed for\n"            "     the file group class.\n"            "\n"            "-s   Like -f, but substitute the file's ACL with Acl_entries\n"             "     specified in a comma-separated list on the command line.\n"            "\n"            "While the -d and -m options may be used in the same command, the\n"            "-f and -s options may be used only exclusively.\n"            "\n"            "Directories may contain default ACL entries.  Files created\n"            "in a directory that contains default ACL entries will have\n"            "permissions according to the combination of the current umask,\n"            "the explicit permissions requested and the default ACL entries\n"            "Note: Under Cygwin, the default ACL entries are not taken into\n"            "account currently.\n", prog_name);  }  else    fprintf(stream, "Try `%s --help' for more information.\n", prog_name);}struct option longopts[] = {  {"delete", required_argument, NULL, 'd'},  {"file", required_argument, NULL, 'f'},  {"modify", required_argument, NULL, 'm'},  {"replace", no_argument, NULL, 'r'},  {"substitute", required_argument, NULL, 's'},  {"help", no_argument, NULL, 'h'},  {"version", no_argument, NULL, 'v'},  {0, no_argument, NULL, 0}};static voidprint_version (){  const char *v = strchr (version, ':');  int len;  if (!v)    {      v = "?";      len = 1;    }  else    {      v += 2;      len = strchr (v, ' ') - v;    }  printf ("\setfacl (cygwin) %.*s\n\ACL Modification Utility\n\Copyright 2000, 2001, 2002 Red Hat, Inc.\n\Compiled on %s\n\", len, v, __DATE__);}intmain (int argc, char **argv){  extern char *optarg;  extern int optind;  int c;  action_t action = NoAction;  int ropt = 0;  aclent_t acls[MAX_ACL_ENTRIES];  int aclidx = 0;  prog_name = strrchr (argv[0], '/');  if (prog_name == NULL)    prog_name = strrchr (argv[0], '\\');  if (prog_name == NULL)    prog_name = argv[0];  else    prog_name++;  memset (acls, 0, sizeof acls);  while ((c = getopt_long (argc, argv, "d:f:hm:rs:v", longopts, NULL)) != EOF)    switch (c)      {      case 'd':        if (action == NoAction)          action = Delete;        else if (action == Modify)          action = ModNDel;        else          {            usage (stderr);            return 1;	  }        if (! getaclentries (Delete, optarg, acls, &aclidx))          {            fprintf (stderr, "%s: illegal acl entries\n", prog_name);            return 2;          }        break;      case 'f':        if (action == NoAction)          action = Set;        else          {            usage (stderr);            return 1;	  }        if (! getaclentries (SetFromFile, optarg, acls, &aclidx))          {            fprintf (stderr, "%s: illegal acl entries\n", prog_name);            return 2;          }        break;      case 'h':        usage (stdout);        return 0;      case 'm':        if (action == NoAction)          action = Modify;        else if (action == Delete)          action = ModNDel;        else          {            usage (stderr);            return 1;	  }        if (! getaclentries (Modify, optarg, acls, &aclidx))          {            fprintf (stderr, "%s: illegal acl entries\n", prog_name);            return 2;          }        break;      case 'r':        if (!ropt)          ropt = 1;        else          {            usage (stderr);            return 1;	  }        break;      case 's':        if (action == NoAction)          action = Set;        else          {            usage (stderr);            return 1;	  }        break;        if (! getaclentries (Set, optarg, acls, &aclidx))          {            fprintf (stderr, "%s: illegal acl entries\n", prog_name);            return 2;          }        break;      case 'v':        print_version ();        return 0;      default:        usage (stderr);        return 1;      }  if (action == NoAction)    {      usage (stderr);      return 1;    }  if (optind > argc - 1)    {      usage (stderr);      return 1;    }  if (action == Set)    switch (aclcheck (acls, aclidx, NULL))      {      case GRP_ERROR:        fprintf (stderr, "%s: more than one group entry.\n", prog_name);        return 2;      case USER_ERROR:        fprintf (stderr, "%s: more than one user entry.\n", prog_name);        return 2;      case CLASS_ERROR:        fprintf (stderr, "%s: more than one mask entry.\n", prog_name);        return 2;      case OTHER_ERROR:        fprintf (stderr, "%s: more than one other entry.\n", prog_name);        return 2;      case DUPLICATE_ERROR:        fprintf (stderr, "%s: duplicate additional user or group.\n", prog_name);        return 2;      case ENTRY_ERROR:        fprintf (stderr, "%s: invalid entry type.\n", prog_name);        return 2;      case MISS_ERROR:        fprintf (stderr, "%s: missing entries.\n", prog_name);        return 2;      case MEM_ERROR:        fprintf (stderr, "%s: out of memory.\n", prog_name);        return 2;      default:        break;      }  for (c = optind; c < argc; ++c)    setfacl (action, argv[c], acls, aclidx);  return 0;}

⌨️ 快捷键说明

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