[PATCH 2/2] cygheap_pwdgrp: Don't keep old schemes when parsing nsswitch.conf
Corinna Vinschen
corinna-cygwin@cygwin.com
Fri Apr 17 15:34:07 GMT 2020
On Apr 17 11:31, David Macek via Cygwin-patches wrote:
> The implicit assumption seemed to be that any subsequent occurence of
> the same setting in nsswitch.conf is supposed to rewrite the previous
> ones completely. This was not the case if the third or any further
> schema was previously defined and the last line defined less than that
> (but at least 2), for example:
>
> ```
> db_home: windows cygwin /myhome/%U
> db_home: cygwin desc
> ```
>
> Let's document this behavior as well.
> ---
> winsup/cygwin/uinfo.cc | 5 +++--
> winsup/doc/ntsec.xml | 5 +++++
> 2 files changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
> index 227faa4248..a4fcc33d8d 100644
> --- a/winsup/cygwin/uinfo.cc
> +++ b/winsup/cygwin/uinfo.cc
> @@ -793,9 +793,10 @@ cygheap_pwdgrp::nss_init_line (const char *line)
> scheme = gecos_scheme;
> if (scheme)
> {
> - uint16_t idx = 0;
> + for (uint16_t idx = 0; idx < NSS_SCHEME_MAX; ++idx)
> + scheme[idx].method = NSS_SCHEME_FALLBACK;
>
> - scheme[0].method = scheme[1].method = NSS_SCHEME_FALLBACK;
> + uint16_t idx = 0;
Hmmm. This `idx' usage is a bit puzzeling. Here's a counter-proposal:
diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index 57d90189d390..9521a973803e 100644
--- a/winsup/cygwin/uinfo.cc
+++ b/winsup/cygwin/uinfo.cc
@@ -793,12 +793,12 @@ cygheap_pwdgrp::nss_init_line (const char *line)
scheme = gecos_scheme;
if (scheme)
{
- uint16_t idx = 0;
+ for (uint16_t idx = 0; idx < NSS_SCHEME_MAX; ++idx)
+ scheme[idx].method = NSS_SCHEME_FALLBACK;
- scheme[0].method = scheme[1].method = NSS_SCHEME_FALLBACK;
c = strchr (c, ':') + 1;
c += strspn (c, " \t");
- while (*c && idx < NSS_SCHEME_MAX)
+ for (uint16_t idx = 0; *c && idx < NSS_SCHEME_MAX; ++idx)
{
if (NSS_CMP ("windows"))
scheme[idx].method = NSS_SCHEME_WINDOWS;
@@ -829,7 +829,6 @@ cygheap_pwdgrp::nss_init_line (const char *line)
}
c += strcspn (c, " \t");
c += strspn (c, " \t");
- ++idx;
}
/* If nothing has been set, revert to default. */
if (scheme[0].method == NSS_SCHEME_FALLBACK)
If that's ok with you I check it in as your patch.
Can you please send the 2-clause BSD waiver per
https://cygwin.com/contrib.html to this list, too?
Thanks,
Corinna
--
Corinna Vinschen
Cygwin Maintainer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://cygwin.com/pipermail/cygwin-patches/attachments/20200417/9377e675/attachment.sig>
More information about the Cygwin-patches
mailing list