diff -Nur autofs-4.1.3.orig/daemon/automount.c autofs-4.1.3/daemon/automount.c
--- autofs-4.1.3.orig/daemon/automount.c	2004-04-05 21:14:10.000000000 +0800
+++ autofs-4.1.3/daemon/automount.c	2004-06-05 21:13:28.000000000 +0800
@@ -99,8 +99,11 @@
 
 					if (stat(buf, &st) == 0 && !S_ISDIR(st.st_mode))
 						errno = ENOTDIR;
-					else
-						continue;
+					else {
+						/* last component, return -1 */
+						if (*cp != '\0')
+							continue;
+					}
 				}
 				return -1;
 			}
@@ -1088,9 +1091,11 @@
 			close(ap.state_pipe[0]);
 			close(ap.state_pipe[1]);
 
+			chdir(ap.path);
 			err = ap.lookup->lookup_mount(ap.path,
 						      pkt->name, pkt->len,
 						      ap.lookup->context);
+			chdir("/");
 
 			/*
 			 * If at first you don't succeed, hide all
@@ -1163,8 +1168,11 @@
 		   it.
 		 */
 
+		chdir(ap.path);
 		ret = ap.lookup->lookup_mount(ap.path, 
 					name, namelen, ap.lookup->context);
+		chdir("/");
+
 		if (ret)
 			error("failed to recover from partial expiry of %s\n",
 			       buf);
diff -Nur autofs-4.1.3.orig/modules/mount_bind.c autofs-4.1.3/modules/mount_bind.c
--- autofs-4.1.3.orig/modules/mount_bind.c	2004-05-10 20:44:30.000000000 +0800
+++ autofs-4.1.3/modules/mount_bind.c	2004-06-05 18:12:38.000000000 +0800
@@ -107,15 +107,19 @@
 		fullpath[i] = '\0';
 
 	if (bind_works) {
-		int status;
+		int status, existed = 1;
 
 		debug(MODPREFIX "calling mkdir_path %s", fullpath);
 
-		if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
+		status = mkdir_path(fullpath, 0555);
+		if (status && errno != EEXIST) {
 			error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
 			return 1;
 		}
 
+		if (!status)
+			existed = 0;
+
 		if (is_mounted(fullpath)) {
 			warn("BUG: %s already mounted", fullpath);
 			return 0;
@@ -130,7 +134,7 @@
 		unlink(AUTOFS_LOCK);
 
 		if (err) {
-			if (!ap.ghost && name_len)
+			if ((!ap.ghost && name_len) || !existed)
 				rmdir_path(name);
 			return 1;
 		} else {
diff -Nur autofs-4.1.3.orig/modules/mount_changer.c autofs-4.1.3/modules/mount_changer.c
--- autofs-4.1.3.orig/modules/mount_changer.c	2004-05-10 20:44:30.000000000 +0800
+++ autofs-4.1.3/modules/mount_changer.c	2004-06-05 18:18:04.000000000 +0800
@@ -52,7 +52,7 @@
 {
 	char *fullpath;
 	int err;
-	int status;
+	int status, existed = 1;
 
 	fstype = "iso9660";
 
@@ -80,11 +80,15 @@
 
 	debug(MODPREFIX "calling mkdir_path %s", fullpath);
 
-	if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
+	status = mkdir_path(fullpath, 0555);
+	if (status && errno != EEXIST) {
 		error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
 		return 1;
 	}
 
+	if (!status)
+		existed = 0;
+
 	debug(MODPREFIX "Swapping CD to slot %s", name);
 
 	err = swapCD(what, name);
@@ -111,7 +115,7 @@
 	unlink(AUTOFS_LOCK);
 
 	if (err) {
-		if (!ap.ghost && name_len)
+		if ((!ap.ghost && name_len) || !existed)
 			rmdir_path(name);
 
 		error(MODPREFIX "failed to mount %s (type %s) on %s",
diff -Nur autofs-4.1.3.orig/modules/mount_ext2.c autofs-4.1.3/modules/mount_ext2.c
--- autofs-4.1.3.orig/modules/mount_ext2.c	2004-05-10 20:44:30.000000000 +0800
+++ autofs-4.1.3/modules/mount_ext2.c	2004-06-05 18:23:09.000000000 +0800
@@ -40,7 +40,6 @@
 	return 0;
 }
 
-
 int mount_mount(const char *root, const char *name, int name_len,
 		const char *what, const char *fstype, const char *options, void *context)
 {
@@ -48,7 +47,7 @@
 	const char *p, *p1;
 	int err, ro = 0;
 	const char *fsck_prog;
-	int status;
+	int status, existed = 1;
 
 	fullpath = alloca(strlen(root) + name_len + 2);
 	if (!fullpath) {
@@ -63,11 +62,15 @@
 
 	debug(MODPREFIX "calling mkdir_path %s", fullpath);
 
-	if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
+	status = mkdir_path(fullpath, 0555);
+	if (status && errno != EEXIST) {
 		error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
 		return 1;
 	}
 
+	if (!status)
+		existed = 0;
+
 	if (is_mounted(fullpath)) {
 		error("BUG: %s already mounted", fullpath);
 		return 0;
@@ -120,7 +123,7 @@
 	unlink(AUTOFS_LOCK);
 
 	if (err) {
-		if (!ap.ghost && name_len)
+		if ((!ap.ghost && name_len) || !existed)
 			rmdir_path(name);
 		error(MODPREFIX "failed to mount %s (type %s) on %s",
 		      what, fstype, fullpath);
diff -Nur autofs-4.1.3.orig/modules/mount_generic.c autofs-4.1.3/modules/mount_generic.c
--- autofs-4.1.3.orig/modules/mount_generic.c	2004-05-10 20:44:30.000000000 +0800
+++ autofs-4.1.3/modules/mount_generic.c	2004-06-05 18:22:10.000000000 +0800
@@ -46,7 +46,7 @@
 {
 	char *fullpath;
 	int err;
-	int status;
+	int status, existed = 1;
 
 	fullpath = alloca(strlen(root) + name_len + 2);
 	if (!fullpath) {
@@ -61,11 +61,15 @@
 
 	debug(MODPREFIX "calling mkdir_path %s", fullpath);
 
-	if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
+	status = mkdir_path(fullpath, 0555);
+	if (status && errno != EEXIST) {
 		error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
 		return 1;
 	}
 
+	if (!status)
+		existed = 0;
+
 	if (is_mounted(fullpath)) {
 		error("BUG: %s already mounted", fullpath);
 		return 0;
@@ -89,7 +93,7 @@
 	unlink(AUTOFS_LOCK);
 
 	if (err) {
-		if (!ap.ghost && name_len)
+		if ((!ap.ghost && name_len) || !existed)
 			rmdir_path(name);
 
 		error(MODPREFIX "failed to mount %s (type %s) on %s",
diff -Nur autofs-4.1.3.orig/modules/mount_nfs.c autofs-4.1.3/modules/mount_nfs.c
--- autofs-4.1.3.orig/modules/mount_nfs.c	2004-06-05 14:24:58.000000000 +0800
+++ autofs-4.1.3/modules/mount_nfs.c	2004-06-05 21:10:17.000000000 +0800
@@ -445,14 +445,19 @@
 			       whatstr, "bind", NULL, mount_bind->context);
 	} else {
 		/* Not a local host - do an NFS mount */
-		int status;
+		int status, existed = 1;
 
 		debug(MODPREFIX "calling mkdir_path %s", fullpath);
-		if ((status = mkdir_path(fullpath, 0555)) && errno != EEXIST) {
+
+		status = mkdir_path(fullpath, 0555);
+		if (status && errno != EEXIST) {
 			error(MODPREFIX "mkdir_path %s failed: %m", fullpath);
 			return 1;
 		}
 
+		if (!status)
+			existed = 0;
+
 		if (is_mounted(fullpath)) {
 			error("BUG: %s already mounted", fullpath);
 			return 0;
@@ -477,8 +482,9 @@
 		unlink(AUTOFS_LOCK);
 
 		if (err) {
-			if (!ap.ghost && name_len)
+			if ((!ap.ghost && name_len) || !existed)
 				rmdir_path(name);
+
 			error(MODPREFIX "nfs: mount failure %s on %s",
 			      whatstr, fullpath);
 			return 1;