summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2014-11-12 14:13:56 +0000
committerCorinna Vinschen <corinna@vinschen.de>2014-11-12 14:13:56 +0000
commit4acb3408e9ceb45ea0c4a287b135519fe359e50a (patch)
tree5c34eeef43735911eb984fc0911bdc92c599ff58
parent54f79f8650452cafde18d54d54c38d0990a91eda (diff)
downloadcygnal-4acb3408e9ceb45ea0c4a287b135519fe359e50a.tar.gz
cygnal-4acb3408e9ceb45ea0c4a287b135519fe359e50a.tar.bz2
cygnal-4acb3408e9ceb45ea0c4a287b135519fe359e50a.zip
* 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.
-rw-r--r--winsup/utils/ChangeLog10
-rw-r--r--winsup/utils/mkgroup.c52
-rw-r--r--winsup/utils/mkpasswd.c46
3 files changed, 79 insertions, 29 deletions
diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog
index 09dc0bf31..05b9e31ec 100644
--- a/winsup/utils/ChangeLog
+++ b/winsup/utils/ChangeLog
@@ -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(?).
diff --git a/winsup/utils/mkgroup.c b/winsup/utils/mkgroup.c
index 8894b315f..e540153cb 100644
--- a/winsup/utils/mkgroup.c
+++ b/winsup/utils/mkgroup.c
@@ -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;
diff --git a/winsup/utils/mkpasswd.c b/winsup/utils/mkpasswd.c
index 5ff33d8a1..e16639af6 100644
--- a/winsup/utils/mkpasswd.c
+++ b/winsup/utils/mkpasswd.c
@@ -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;