summaryrefslogtreecommitdiffstats
path: root/usr.sbin/autofs
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2014-09-23 19:12:06 +0000
committertrasz <trasz@FreeBSD.org>2014-09-23 19:12:06 +0000
commit3253f3d751ffe1d91077c314bafa24af7fa74195 (patch)
tree3d159eb3ae5b562a5873a86ef80fa2e2a7c654bf /usr.sbin/autofs
parent74ff69d0ef61dd2839c3eba3c2a0873cbdfe626d (diff)
downloadFreeBSD-src-3253f3d751ffe1d91077c314bafa24af7fa74195.zip
FreeBSD-src-3253f3d751ffe1d91077c314bafa24af7fa74195.tar.gz
Fix thinko that, with two map entries like shown below, in that order,
made automountd(8) mix them up: trying to access the second one would trigger mount for the first one. foo host:/foo foobar host:/foobar PR: 193584 MFC after: 3 days Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'usr.sbin/autofs')
-rw-r--r--usr.sbin/autofs/common.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/usr.sbin/autofs/common.c b/usr.sbin/autofs/common.c
index 1d1117c..cefbcc8 100644
--- a/usr.sbin/autofs/common.c
+++ b/usr.sbin/autofs/common.c
@@ -673,11 +673,21 @@ node_find(struct node *node, const char *path)
{
struct node *child, *found;
char *tmp;
+ size_t tmplen;
//log_debugx("looking up %s in %s", path, node->n_key);
tmp = node_path(node);
- if (strncmp(tmp, path, strlen(tmp)) != 0) {
+ tmplen = strlen(tmp);
+ if (strncmp(tmp, path, tmplen) != 0) {
+ free(tmp);
+ return (NULL);
+ }
+ if (path[tmplen] != '/' && path[tmplen] != '\0') {
+ /*
+ * If we have two map entries like 'foo' and 'foobar', make
+ * sure the search for 'foobar' won't match 'foo' instead.
+ */
free(tmp);
return (NULL);
}
OpenPOWER on IntegriCloud