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