public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin] Cygwin: accounts: Don't keep old schemes when parsing nsswitch.conf
@ 2020-04-22  7:35 Corinna Vinschen
  0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2020-04-22  7:35 UTC (permalink / raw)
  To: cygwin-cvs

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=969c8392fe3122af31c288fb88e3ba1942f881d2

commit 969c8392fe3122af31c288fb88e3ba1942f881d2
Author: David Macek via Cygwin-patches <cygwin-patches@cygwin.com>
Date:   Mon Apr 20 19:21:00 2020 +0200

    Cygwin: accounts: Don't keep old schemes when parsing nsswitch.conf
    
    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.
    
    Signed-off-by: David Macek <david.macek.0@gmail.com>

Diff:
---
 winsup/cygwin/uinfo.cc | 7 +++----
 winsup/doc/ntsec.xml   | 5 +++++
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc
index 2d5fc488b..b733a6ee8 100644
--- a/winsup/cygwin/uinfo.cc
+++ b/winsup/cygwin/uinfo.cc
@@ -790,12 +790,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;
@@ -826,7 +826,6 @@ cygheap_pwdgrp::nss_init_line (const char *line)
 		    }
 		  c += strcspn (c, " \t");
 		  c += strspn (c, " \t");
-		  ++idx;
 		}
 	    }
 	}
diff --git a/winsup/doc/ntsec.xml b/winsup/doc/ntsec.xml
index a4c253098..08a33bdc6 100644
--- a/winsup/doc/ntsec.xml
+++ b/winsup/doc/ntsec.xml
@@ -918,6 +918,11 @@ Apart from this restriction, the remainder of the line can have as
 many spaces and TABs as you like.
 </para>
 
+<para>
+When the same keyword occurs multiple times, the last one wins, as if the
+previous ones were ignored.
+</para>
+
 </sect4>
 
 <sect4 id="ntsec-mapping-nsswitch-pwdgrp"><title id="ntsec-mapping-nsswitch-pwdgrp.title">The <literal>passwd:</literal> and <literal>group:</literal> settings</title>


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-04-22  7:35 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-22  7:35 [newlib-cygwin] Cygwin: accounts: Don't keep old schemes when parsing nsswitch.conf Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).