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

📄 mkgroup.c

📁 cygwin, 著名的在win32下模拟unix操作系统的东东
💻 C
📖 第 1 页 / 共 2 页
字号:
                                      groupname,                                      psid, &sid_length,                                      domain_name, &domname_len,			              &acc_type))                {                  fprintf (stderr,                           "LookupAccountName (%s, %s) failed with error %ld\n",                           servername ? ansi_srvname : "NULL",                           groupname,                           GetLastError ());                  continue;                }              else if (acc_type == SidTypeDomain)                {                  char domname[356];                  strcpy (domname, domain_name);                  strcat (domname, "\\");                  strcat (domname, groupname);                  sid_length = 1024;                  domname_len = 100;                  if (!LookupAccountName (servername ? ansi_srvname : NULL,                                          domname,                                          psid, &sid_length,                                          domain_name, &domname_len,			                  &acc_type))                    {                      fprintf (stderr,                               "LookupAccountName(%s,%s) failed with error %ld\n",                               servername ? ansi_srvname : "NULL",                               domname,                               GetLastError ());                      continue;                    }                }            }	  printf ("%s:%s:%d:", groupname,                               print_sids ? put_sid (psid) : "",                               gid + id_offset);	  if (print_users)	    enum_users (servername, buffer[i].grpi2_name);	  printf ("\n");	}      netapibufferfree (buffer);    }  while (rc == ERROR_MORE_DATA);  if (servername)    netapibufferfree (servername);}voidprint_special (int print_sids,	       PSID_IDENTIFIER_AUTHORITY auth, BYTE cnt,	       DWORD sub1, DWORD sub2, DWORD sub3, DWORD sub4,	       DWORD sub5, DWORD sub6, DWORD sub7, DWORD sub8){  char name[256], dom[256];  DWORD len, len2, rid;  PSID sid;  SID_NAME_USE use;  if (AllocateAndInitializeSid (auth, cnt, sub1, sub2, sub3, sub4,  				sub5, sub6, sub7, sub8, &sid))    {      if (LookupAccountSid (NULL, sid,			    name, (len = 256, &len),			    dom, (len2 = 256, &len),			    &use))	{	  if (sub8)	    rid = sub8;	  else if (sub7)	    rid = sub7;	  else if (sub6)	    rid = sub6;	  else if (sub5)	    rid = sub5;	  else if (sub4)	    rid = sub4;	  else if (sub3)	    rid = sub3;	  else if (sub2)	    rid = sub2;	  else	    rid = sub1;	  printf ("%s:%s:%lu:\n", name,				 print_sids ? put_sid (sid) : "",				 rid);        }      FreeSid (sid);    }}intusage (FILE * stream, int status){  fprintf (stream, "Usage: mkgroup [OPTION]... [domain]\n\n"		   "This program prints a /etc/group file to stdout\n\n"		   "Options:\n"		   "   -l,--local             print local group information\n"		   "   -d,--domain            print global group information from the domain\n"		   "                          specified (or from the current domain if there is\n"		   "                          no domain specified)\n"		   "   -o,--id-offset offset  change the default offset (10000) added to uids\n"		   "                          in domain accounts.\n"		   "   -s,--no-sids           don't print SIDs in pwd field\n"		   "                          (this affects ntsec)\n"		   "   -u,--users             print user list in gr_mem field\n"		   "   -h,--help              print this message\n\n"		   "   -v,--version           print version information and exit\n\n"		   "One of `-l' or `-d' must be given on NT/W2K.\n");  return status;}struct option longopts[] = {  {"local", no_argument, NULL, 'l'},  {"domain", no_argument, NULL, 'd'},  {"id-offset", required_argument, NULL, 'o'},  {"no-sids", no_argument, NULL, 's'},  {"users", no_argument, NULL, 'u'},  {"help", no_argument, NULL, 'h'},  {"version", no_argument, NULL, 'v'},  {0, no_argument, NULL, 0}};char opts[] = "ldo:suhv";voidprint_version (){  const char *v = strchr (version, ':');  int len;  if (!v)    {      v = "?";      len = 1;    }  else    {      v += 2;      len = strchr (v, ' ') - v;    }  printf ("\mkgroup (cygwin) %.*s\n\group File Generator\n\Copyright 1997, 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.\n\Compiled on %s\n\", len, v, __DATE__);}intmain (int argc, char **argv){  LPWSTR servername;  DWORD rc = ERROR_SUCCESS;  WCHAR domain_name[100];  int print_local = 0;  int print_domain = 0;  int print_sids = 1;  int print_users = 0;  int domain_specified = 0;  int id_offset = 10000;  int i;  char name[256], dom[256];  DWORD len, len2;  char buf[1024];  PSID psid = NULL;  SID_NAME_USE use;  LSA_OBJECT_ATTRIBUTES oa = { 0, 0, 0, 0, 0, 0 };  LSA_HANDLE lsa = INVALID_HANDLE_VALUE;  NTSTATUS ret;  PPOLICY_PRIMARY_DOMAIN_INFO pdi;  if (GetVersion () < 0x80000000)    {      if (argc == 1)	return usage(stderr, 1);      else	{	  while ((i = getopt_long (argc, argv, opts, longopts, NULL)) != EOF)	    switch (i)	      {	      case 'l':		print_local = 1;		break;	      case 'd':		print_domain = 1;		break;	      case 'o':		id_offset = strtol (optarg, NULL, 10);		break;	      case 's':		print_sids = 0;		break;	      case 'u':		print_users = 1;		break;	      case 'h':		return usage (stdout, 0);	      case 'v':		print_version ();		return 0;	      default:		fprintf (stderr, "Try `%s --help' for more information.\n", argv[0]);		return 1;	      }	  if (!print_local && !print_domain)	    {	      fprintf (stderr, "%s: Specify one of `-l' or `-d'\n", argv[0]);	      return 1;	    }	  if (optind < argc)	    {	      if (!print_domain)		{		  fprintf (stderr, "%s: A domain name is only accepted "				   "when `-d' is given.\n", argv[0]);		  return 1;		}	      mbstowcs (domain_name, argv[optind], (strlen (argv[optind]) + 1));	      domain_specified = 1;	    }	}    }  /* This takes Windows 9x/ME into account. */  if (GetVersion () >= 0x80000000)    {      printf ("unknown::%ld:\n", DOMAIN_ALIAS_RID_ADMINS);      return 0;    }    if (!load_netapi ())    {      fprintf (stderr, "Failed loading symbols from netapi32.dll "      		       "with error %lu\n", GetLastError ());      return 1;    }#if 0  /*   * Get `Everyone' group  */  print_special (print_sids, &sid_world_auth, 1, SECURITY_WORLD_RID,			     0, 0, 0, 0, 0, 0, 0);#endif  /*   * Get `system' group  */  print_special (print_sids, &sid_nt_auth, 1, SECURITY_LOCAL_SYSTEM_RID,			     0, 0, 0, 0, 0, 0, 0);  if (print_local)    {      /*       * Get `None' group      */      len = 256;      GetComputerName (name, &len);      len = 1024;      len2 = 256;      if (LookupAccountName (NULL, name, (PSID) buf, &len, dom, &len, &use))	psid = (PSID) buf;      else        {	  ret = lsaopenpolicy (NULL, &oa, POLICY_VIEW_LOCAL_INFORMATION, &lsa);	  if (ret == STATUS_SUCCESS && lsa != INVALID_HANDLE_VALUE)	    {	      ret = lsaqueryinformationpolicy (lsa,					       PolicyPrimaryDomainInformation,					       (PVOID *) &pdi);	      if (ret == STATUS_SUCCESS)	        {		  if (pdi->Sid)		    {		      CopySid (1024, (PSID) buf, pdi->Sid);		      psid = (PSID) buf;		    }		  lsafreememory (pdi);		}	      lsaclose (lsa);	    }	}      if (!psid)        fprintf (stderr,	        "WARNING: Group 513 couldn't get retrieved.  Try mkgroup -d\n");      else	print_special (print_sids, GetSidIdentifierAuthority (psid), 5,				   *GetSidSubAuthority (psid, 0),				   *GetSidSubAuthority (psid, 1),				   *GetSidSubAuthority (psid, 2),				   *GetSidSubAuthority (psid, 3),				   513,				   0,				   0,				   0);    }  if (print_domain)    {      if (domain_specified)	rc = netgetdcname (NULL, domain_name, (LPBYTE *) & servername);      else	rc = netgetdcname (NULL, NULL, (LPBYTE *) & servername);      if (rc != ERROR_SUCCESS)	{	  fprintf (stderr, "Cannot get PDC, code = %ld\n", rc);	  return 1;	}      enum_groups (servername, print_sids, print_users, id_offset);    }  if (print_local)    enum_local_groups (print_sids, print_users);  return 0;}

⌨️ 快捷键说明

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