]> sourceware.org Git - newlib-cygwin.git/commitdiff
* mkgroup.c (enum_unix_groups): Always print groupname with machine
authorCorinna Vinschen <corinna@vinschen.de>
Wed, 12 Nov 2014 14:13:56 +0000 (14:13 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Wed, 12 Nov 2014 14:13:56 +0000 (14:13 +0000)
prefix.
(usage): Extend help output for -l option.
(main): Drop superfluous goto and label.  Make machine prefixing for
local machine when using -l option dependend on options in
/etc/nsswitch.conf.
* mkpasswd.c: Ditto.

winsup/utils/ChangeLog
winsup/utils/mkgroup.c
winsup/utils/mkpasswd.c

index 09dc0bf31fdcf5c1df535239c34ed763786544a2..05b9e31ec3423e2d48bab6b7b86f046bb90c5a22 100644 (file)
@@ -1,3 +1,13 @@
+2014-11-12  Corinna Vinschen  <corinna@vinschen.de>
+
+       * mkgroup.c (enum_unix_groups): Always print groupname with machine
+       prefix.
+       (usage): Extend help output for -l option.
+       (main): Drop superfluous goto and label.  Make machine prefixing for
+       local machine when using -l option dependend on options in
+       /etc/nsswitch.conf.
+       * mkpasswd.c: Ditto.
+
 2014-11-10  Corinna Vinschen  <corinna@vinschen.de>
 
        * cygcheck.cc (dump_sysinfo): Handle Windows 10/Server 2014(?).
index 8894b315f48f1e58ceeca9a1ef3d76501f504ec3..e540153cbc6bc1c81f3314d17025d00a2f9bf542 100644 (file)
@@ -47,6 +47,7 @@ typedef struct
 {
   char *str;
   BOOL domain;
+  BOOL with_dom;
 } domlist_t;
 
 static void
@@ -340,8 +341,8 @@ enum_local_groups (domlist_t *mach, const char *sep,
 
          gid = *GetSidSubAuthority (psid, *GetSidSubAuthorityCount(psid) - 1);
          printf ("%ls%s%ls:%s:%" PRIu32 ":\n",
-                 !is_builtin ? domain_name : L"",
-                 !is_builtin ? sep : "",
+                 mach->with_dom && !is_builtin ? domain_name : L"",
+                 mach->with_dom && !is_builtin ? sep : "",
                  buffer[i].lgrpi0_name,
                  put_sid (psid),
                  (unsigned int) (gid + (is_builtin ? 0 : id_offset)));
@@ -454,8 +455,8 @@ enum_groups (domlist_t *mach, const char *sep, DWORD id_offset,
            got_curr_pgrp = TRUE;
 
          printf ("%ls%s%ls:%s:%" PRIu32 ":\n",
-                 domain_name,
-                 sep,
+                 mach->with_dom ? domain_name : L"",
+                 mach->with_dom ? sep : "",
                  buffer[i].grpi2_name,
                  put_sid (psid),
                  (unsigned int) (id_offset + gid));
@@ -480,8 +481,11 @@ usage (FILE * stream)
 "\n"
 "Options:\n"
 "\n"
-"   -l,--local [machine]    print local groups of \"machine\"\n"
-"                           (from local machine if no machine specified)\n"
+"   -l,--local [machine]    print local groups of \"machine\",\n"
+"                           from local machine if no machine specified.\n"
+"                           automatically adding machine prefix for local\n"
+"                           machine depends on settings in /etc/nsswitch.conf)\n"
+"   -L,--Local machine      ditto, but generate groupname with machine prefix\n"
 "   -d,--domain [domain]    print domain groups\n"
 "                           (from current domain if no domain specified)\n"
 "   -c,--current            print current group\n"
@@ -546,6 +550,7 @@ main (int argc, char **argv)
 {
   int print_domlist = 0;
   domlist_t domlist[32];
+  char cname[1024];
   char *opt, *p;
   int print_current = 0;
   int print_builtin = 1;
@@ -621,24 +626,39 @@ main (int argc, char **argv)
          {
            if (p == opt)
              {
-               fprintf (stderr, "%s: Malformed machine,offset string '%s'.  "
+               fprintf (stderr, "%s: Malformed machine string '%s'.  "
                         "Skipping...\n", program_invocation_short_name, opt);
                break;
              }
            *p = '\0';
          }
-       if ((c == 'l' || c == 'L') && opt)
+       if (c == 'l' || c == 'L')
          {
-           char cname[1024];
            DWORD csize = sizeof cname;
 
-           /* Check if machine name is local machine.  Keep it simple. */
-           if (GetComputerNameExA (strchr (opt, '.')
-                                   ? ComputerNameDnsFullyQualified
-                                   : ComputerNameNetBIOS,
-                                   cname, &csize)
-               && strcasecmp (opt, cname) == 0)
-             domlist[print_domlist].str = NULL;
+           domlist[print_domlist].with_dom = (c == 'L');
+           if (!opt)
+             {
+               /* If the system uses /etc/group exclusively as account DB,
+                  create local group names the old fashioned way. */
+               if (cygwin_internal (CW_GETNSS_GRP_SRC) == NSS_SRC_FILES)
+                 {
+                   GetComputerNameExA (ComputerNameNetBIOS, cname, &csize);
+                   domlist[print_domlist].str = cname;
+                 }
+             }
+           else if (cygwin_internal (CW_GETNSS_GRP_SRC) != NSS_SRC_FILES)
+             {
+               /* If the system uses Windows account DBs, check if machine
+                  name is local machine.  If so, remove the domain name to
+                  enforce system naming convention. */
+               if (GetComputerNameExA (strchr (opt, '.')
+                                       ? ComputerNameDnsFullyQualified
+                                       : ComputerNameNetBIOS,
+                                       cname, &csize)
+                   && strcasecmp (opt, cname) == 0)
+                 domlist[print_domlist].str = NULL;
+             }
          }
        ++print_domlist;
        break;
index 5ff33d8a1e1210ec3f411ce50e301ff25004b8b3..e16639af6f87b5d701afda35c0f7a8310122b422 100644 (file)
@@ -48,6 +48,7 @@ typedef struct
 {
   char *str;
   BOOL domain;
+  BOOL with_dom;
 } domlist_t;
 
 static void
@@ -334,8 +335,8 @@ enum_users (domlist_t *mach, const char *sep, const char *passed_home_path,
 
          printf ("%ls%s%ls:unused:%" PRIu32 ":%" PRIu32
                  ":%ls%sU-%ls\\%ls,%s:%s:/bin/bash\n",
-                 domain_name,
-                 sep,
+                 mach->with_dom ? domain_name : L"",
+                 mach->with_dom ? sep : "",
                  buffer[i].usri3_name,
                  (unsigned int) (id_offset + uid),
                  (unsigned int) (id_offset + gid),
@@ -369,8 +370,11 @@ usage (FILE * stream)
 "\n"
 "Options:\n"
 "\n"
-"   -l,--local [machine]    print local user accounts of \"machine\"\n"
-"                           (from local machine if no machine specified)\n"
+"   -l,--local [machine]    print local user accounts of \"machine\",\n"
+"                           from local machine if no machine specified.\n"
+"                           automatically adding machine prefix for local\n"
+"                           machine depends on settings in /etc/nsswitch.conf)\n"
+"   -L,--Local machine      ditto, but generate username with machine prefix\n"
 "   -d,--domain [domain]    print domain accounts\n"
 "                           (from current domain if no domain specified)\n"
 "   -c,--current            print current user\n"
@@ -439,6 +443,7 @@ main (int argc, char **argv)
 {
   int print_domlist = 0;
   domlist_t domlist[32];
+  char cname[1024];
   char *opt, *p, *ep;
   int print_current = 0;
   int print_builtin = 1;
@@ -524,18 +529,33 @@ main (int argc, char **argv)
              }
            *p = '\0';
          }
-       if ((c == 'l' || c == 'L') && opt)
+       if (c == 'l' || c == 'L')
          {
-           char cname[1024];
            DWORD csize = sizeof cname;
 
-           /* Check if machine name is local machine.  Keep it simple. */
-           if (GetComputerNameExA (strchr (opt, '.')
-                                   ? ComputerNameDnsFullyQualified
-                                   : ComputerNameNetBIOS,
-                                   cname, &csize)
-               && strcasecmp (opt, cname) == 0)
-             domlist[print_domlist].str = NULL;
+           domlist[print_domlist].with_dom = (c == 'L');
+           if (!opt)
+             {
+               /* If the system uses /etc/passwd exclusively as account DB,
+                  create local group names the old fashioned way. */
+               if (cygwin_internal (CW_GETNSS_PWD_SRC) == NSS_SRC_FILES)
+                 {
+                   GetComputerNameExA (ComputerNameNetBIOS, cname, &csize);
+                   domlist[print_domlist].str = cname;
+                 }
+             }
+           else if (cygwin_internal (CW_GETNSS_PWD_SRC) != NSS_SRC_FILES)
+             {
+               /* If the system uses Windows account DBs, check if machine
+                  name is local machine.  If so, remove the domain name to
+                  enforce system naming convention. */
+               if (GetComputerNameExA (strchr (opt, '.')
+                                       ? ComputerNameDnsFullyQualified
+                                       : ComputerNameNetBIOS,
+                                       cname, &csize)
+                   && strcasecmp (opt, cname) == 0)
+                 domlist[print_domlist].str = NULL;
+             }
          }
        ++print_domlist;
        break;
This page took 0.043282 seconds and 5 git commands to generate.