diff options
-rw-r--r-- | winsup/utils/ChangeLog | 12 | ||||
-rw-r--r-- | winsup/utils/mkgroup.c | 36 | ||||
-rw-r--r-- | winsup/utils/mkpasswd.c | 37 |
3 files changed, 71 insertions, 14 deletions
diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index 50a957ae4..2011c34c7 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,3 +1,15 @@ +2012-04-05 Corinna Vinschen <corinna@vinschen.de> + + * mkgroup.c (print_special_by_sid): Rename from print_special. Change + calls throughout. + (print_special_by_name): New function. + (main): Call print_special_by_name for TrustedInstaller account. + * mkpasswd.c (print_special_by_sid): Rename from print_special. Change + calls throughout. + (print_special_by_name): New function. + (enum_std_accounts): Call print_special_by_name for TrustedInstaller + account. + 2012-02-24 Yaakov Selkowitz <yselkowitz@users.sourceforge.net> * pldd.c: Fix typo in license header. diff --git a/winsup/utils/mkgroup.c b/winsup/utils/mkgroup.c index 393d8f8f7..f712553c4 100644 --- a/winsup/utils/mkgroup.c +++ b/winsup/utils/mkgroup.c @@ -1,7 +1,7 @@ /* mkgroup.c: Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, - 2007, 2008, 2009, 2010, 2011 Red Hat, Inc. + 2007, 2008, 2009, 2010, 2011, 2012 Red Hat, Inc. This file is part of Cygwin. @@ -558,9 +558,9 @@ enum_groups (BOOL domain, domlist_t *dom_or_machine, const char *sep, } static void -print_special (PSID_IDENTIFIER_AUTHORITY auth, BYTE cnt, - DWORD sub1, DWORD sub2, DWORD sub3, DWORD sub4, - DWORD sub5, DWORD sub6, DWORD sub7, DWORD sub8) +print_special_by_sid (PSID_IDENTIFIER_AUTHORITY auth, BYTE cnt, + DWORD sub1, DWORD sub2, DWORD sub3, DWORD sub4, + DWORD sub5, DWORD sub6, DWORD sub7, DWORD sub8) { WCHAR grp[GNLEN + 1], dom[MAX_DOMAIN_NAME_LEN + 1]; DWORD glen, dlen, rid; @@ -597,6 +597,23 @@ print_special (PSID_IDENTIFIER_AUTHORITY auth, BYTE cnt, } } +static void +print_special_by_name (PCWSTR name, gid_t gid) +{ + DWORD size = 256, dom_size = 256; + PSID sid = (PSID) alloca (size); + WCHAR dom[dom_size]; + SID_NAME_USE use; + + PWCHAR name_only = wcschr (name, L'\\'); + if (name_only) + ++name_only; + + if (LookupAccountNameW (NULL, name, sid, &size, dom, &dom_size, &use)) + printf ("%ls:%s:%lu:\n", + name_only ?: name, put_sid (sid), (unsigned long) gid); +} + static int usage (FILE * stream) { @@ -730,8 +747,8 @@ main (int argc, char **argv) if (argc == 1) { - print_special (&sid_nt_auth, 1, SECURITY_LOCAL_SYSTEM_RID, - 0, 0, 0, 0, 0, 0, 0); + print_special_by_sid (&sid_nt_auth, 1, SECURITY_LOCAL_SYSTEM_RID, + 0, 0, 0, 0, 0, 0, 0); if (in_domain) { if (!enum_local_groups (TRUE, NULL, sep_char, id_offset, @@ -857,8 +874,11 @@ skip: /* Get 'system' group */ if (!disp_groupname && print_system && print_builtin && print_domlist) - print_special (&sid_nt_auth, 1, SECURITY_LOCAL_SYSTEM_RID, - 0, 0, 0, 0, 0, 0, 0); + { + print_special_by_sid (&sid_nt_auth, 1, SECURITY_LOCAL_SYSTEM_RID, + 0, 0, 0, 0, 0, 0, 0); + print_special_by_name (L"NT SERVICE\\TrustedInstaller", -2); + } off = id_offset; for (i = 0; i < print_domlist; ++i) diff --git a/winsup/utils/mkpasswd.c b/winsup/utils/mkpasswd.c index c873664f9..6ca4e5db3 100644 --- a/winsup/utils/mkpasswd.c +++ b/winsup/utils/mkpasswd.c @@ -1,7 +1,7 @@ /* mkpasswd.c: Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, - 2008, 2009, 2010, 2011 Red Hat, Inc. + 2008, 2009, 2010, 2011, 2012 Red Hat, Inc. This file is part of Cygwin. @@ -455,9 +455,9 @@ enum_users (BOOL domain, domlist_t *dom_or_machine, const char *sep, } static void -print_special (PSID_IDENTIFIER_AUTHORITY auth, BYTE cnt, - DWORD sub1, DWORD sub2, DWORD sub3, DWORD sub4, - DWORD sub5, DWORD sub6, DWORD sub7, DWORD sub8) +print_special_by_sid (PSID_IDENTIFIER_AUTHORITY auth, BYTE cnt, + DWORD sub1, DWORD sub2, DWORD sub3, DWORD sub4, + DWORD sub5, DWORD sub6, DWORD sub7, DWORD sub8) { WCHAR user[UNLEN + 1], dom[MAX_DOMAIN_NAME_LEN + 1]; DWORD len, len2, rid; @@ -581,6 +581,29 @@ print_version () } static void +print_special_by_name (PCWSTR name, uid_t uid, gid_t gid) +{ + DWORD size = 256, dom_size = 256; + PSID sid = (PSID) alloca (size); + WCHAR dom[dom_size]; + SID_NAME_USE use; + + PWCHAR name_only = wcschr (name, L'\\'); + if (name_only) + ++name_only; + + if (LookupAccountNameW (NULL, name, sid, &size, dom, &dom_size, &use)) + printf ("%ls:*:%lu:%lu:U-%ls%s%ls,%s::\n", + name_only ?: name, + (unsigned long) uid, + (unsigned long) gid, + name_only ? dom : L"", + name_only ? "\\" : "", + name_only ?: name, + put_sid (sid)); +} + +static void enum_std_accounts () { /* Generate service starter account entries. */ @@ -588,8 +611,10 @@ enum_std_accounts () printf ("LocalService:*:19:544:U-NT AUTHORITY\\LocalService,S-1-5-19::\n"); printf ("NetworkService:*:20:544:U-NT AUTHORITY\\NetworkService,S-1-5-20::\n"); /* Get 'administrators' group (has localized name). */ - print_special (&sid_nt_auth, 2, SECURITY_BUILTIN_DOMAIN_RID, - DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0); + print_special_by_sid (&sid_nt_auth, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0); + /* Fetch "TrustedInstaller" account starting with Vista. */ + print_special_by_name (L"NT SERVICE\\TrustedInstaller", -2, -2); } static PPOLICY_PRIMARY_DOMAIN_INFO p_dom; |