Sisyphus repository
Last update: 1 october 2023 | SRPMs: 18631 | Visits: 37880802
en ru br
ALT Linux repos
S:5.1.8-alt6
D:5.0.3-alt1.1
5.0: 5.0.4-alt2
4.1: 5.0.1-alt1
4.0: 5.0.1-alt1
3.0: 4.1.4-alt0.3

Other repositories
Upstream:4.1.4

Group :: System/Kernel and hardware
RPM: autofs

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs and FR  Repocop 

Patch: autofs-5.0.3-nss-source-any.patch
Download


autofs-5.0.3 - ignore nsswitch sources that aren't supported
From: Ian Kent <raven@themaw.net>
Allow any source name in nsswitch and ignore those we don't support.
This has the side affect of also ignoring any action associated with
a source that isn't supported by autofs.
---
 CHANGELOG       |    1 +
 lib/nss_parse.y |   31 ++++++++++++++++---------------
 lib/nss_tok.l   |   22 ++++++++++++----------
 3 files changed, 29 insertions(+), 25 deletions(-)
--- autofs-5.0.3.orig/CHANGELOG
+++ autofs-5.0.3/CHANGELOG
@@ -13,6 +13,7 @@
 - fix incorrect match of map type name when included in map name.
 - fix incorrect pthreads condition handling for mount requests.
 - add check for exports automatically mounted by NFS kernel client.
+- update nsswitch parser to ignore nsswitch sources that aren't supported.
  
 14/01/2008 autofs-5.0.3
 -----------------------
--- autofs-5.0.3.orig/lib/nss_parse.y
+++ autofs-5.0.3/lib/nss_parse.y
@@ -64,7 +64,6 @@ char strval[128];
 %token <strval> SOURCE
 %token <strval> STATUS
 %token <strval> ACTION
-%token <strval> OTHER
 
 %start file
 
@@ -83,7 +82,9 @@ sources: nss_source
 
 nss_source: SOURCE
 {
-	if (strcmp($1, "winbind"))
+	if (!strcmp($1, "files") || !strcmp($1, "yp") ||
+	    !strcmp($1, "nis") || !strcmp($1, "ldap") ||
+	    !strcmp($1, "nisplus") || !strcmp($1, "hesiod"))
 		src = add_source(nss_list, $1);
 	else
 		nss_ignore($1);
@@ -91,7 +92,9 @@ nss_source: SOURCE
 {
 	enum nsswitch_status a;
 
-	if (strcmp($1, "winbind")) {
+	if (!strcmp($1, "files") || !strcmp($1, "yp") ||
+	    !strcmp($1, "nis") || !strcmp($1, "ldap") ||
+	    !strcmp($1, "nisplus") || !strcmp($1, "hesiod")) {
 		src = add_source(nss_list, $1);
 		for (a = 0; a < NSS_STATUS_MAX; a++) {
 			if (act[a].action != NSS_ACTION_UNKNOWN) {
@@ -101,12 +104,10 @@ nss_source: SOURCE
 		}
 	} else
 		nss_ignore($1);
-} | SOURCE LBRACKET status_exp_list SOURCE { nss_error($4); YYABORT; }
-  | SOURCE LBRACKET status_exp_list OTHER { nss_error($4); YYABORT; }
-  | SOURCE LBRACKET status_exp_list NL { nss_error("no closing bracket"); YYABORT; }
-  | SOURCE LBRACKET OTHER { nss_error($3); YYABORT; }
-  | SOURCE OTHER { nss_error("no opening bracket"); YYABORT; }
-  | error OTHER { nss_error($2); YYABORT; };
+} | SOURCE LBRACKET status_exp_list SOURCE { nss_error("missing close bracket"); YYABORT; }
+  | SOURCE LBRACKET status_exp_list NL { nss_error("missing close bracket"); YYABORT; }
+  | SOURCE LBRACKET SOURCE { nss_error($3); YYABORT; }
+  | error SOURCE { nss_error($2); YYABORT; };
 
 status_exp_list: status_exp
 		| status_exp status_exp_list
@@ -117,17 +118,17 @@ status_exp: STATUS EQUAL ACTION
 } | BANG STATUS EQUAL ACTION
 {
 	set_action(act, $2, $4, 1);
-} | STATUS EQUAL OTHER {nss_error($3); YYABORT; }
-  | STATUS OTHER {nss_error($2); YYABORT; }
-  | BANG STATUS EQUAL OTHER {nss_error($4); YYABORT; }
-  | BANG STATUS OTHER {nss_error($3); YYABORT; }
-  | BANG OTHER {nss_error($2); YYABORT; };
+} | STATUS EQUAL SOURCE {nss_error($3); YYABORT; }
+  | STATUS SOURCE {nss_error($2); YYABORT; }
+  | BANG STATUS EQUAL SOURCE {nss_error($4); YYABORT; }
+  | BANG STATUS SOURCE {nss_error($3); YYABORT; }
+  | BANG SOURCE {nss_error($2); YYABORT; };
 
 %%
 
 static int nss_ignore(const char *s)
 {
-	logmsg("ignored invalid nsswitch config near [ %s ]", s);
+	logmsg("ignored unsupported autofs nsswitch source \"%s\"", s);
 	return(0);
 }
 
--- autofs-5.0.3.orig/lib/nss_tok.l
+++ autofs-5.0.3/lib/nss_tok.l
@@ -62,13 +62,13 @@ extern unsigned int nss_automount_found;
 
 %option nounput
 
-%x AUTOMOUNT
+%x AUTOMOUNT ACTIONSTR
 
 WS		[[:blank:]]+
 
 automount	([Aa][Uu][Tt][Oo][Mm][Oo][Uu][Nn][Tt])
 
-source		files|yp|nis|nisplus|ldap|hesiod|winbind
+source		[[:alnum:]@$%^&*()-+_":;?,<>./'{}~`]+
 
 success		([Ss][Uu][Cc][Cc][Ee][Ss][Ss])
 notfound	([Nn][Oo][Tt][Ff][Oo][Uu][Nn][Dd])
@@ -82,8 +82,6 @@ return		([Rr][Ee][Tt][Uu][Rr][Nn])
 
 action		({continue}|{return})
 
-other		[[:alnum:]@$%^&*()-+_":;?,<>./'{}~`]+
-
 %%
 
 ^{automount}: {
@@ -101,6 +99,14 @@ other		[[:alnum:]@$%^&*()-+_":;?,<>./'{}
 		return SOURCE;
 	}
 
+	"["	{ BEGIN(ACTIONSTR); yyless(0); }
+
+	\n	{ BEGIN(INITIAL); return NL; }
+}
+
+<ACTIONSTR>{
+	{WS}	{ }
+
 	{status} {
 		strcpy(nss_lval.strval, nss_text);
 		return STATUS;
@@ -112,15 +118,11 @@ other		[[:alnum:]@$%^&*()-+_":;?,<>./'{}
 	}
 
 	"["	{ return LBRACKET; }
-	"]"	{ return RBRACKET; }
+	"]"	{ BEGIN(AUTOMOUNT); return RBRACKET; }
 	"="	{ return EQUAL; }
 	"!"	{ return BANG; }
 
-	{other} {
-		strcpy(nss_lval.strval, nss_text);
-		return OTHER;
-	}
-
+	.	{ BEGIN(AUTOMOUNT); yyless(0); }
 	\n	{ BEGIN(INITIAL); return NL; }
 }
 
 
design & coding: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
current maintainer: Michael Shigorin