--- /dev/null
+#!/bin/sh /usr/share/dpatch/dpatch-run
+## 079_no_unlink_upstream.dpatch
+##
+## DP: No description.
+
+@DPATCH@
+
+diff -Naur .B/daemon/automount.c .A/daemon/automount.c
+--- .B/daemon/automount.c 2007-01-07 21:36:36.000000000 +0000
++++ .A/daemon/automount.c 2007-01-07 21:36:37.000000000 +0000
+@@ -232,16 +232,38 @@
+ static int rm_unwanted_fn(const char *file, const struct stat *st, int when, void *arg)
+ {
+ int rmsymlink = *(int *) arg;
++ struct stat newst;
+
+ if (when == 0) {
+ if (st->st_dev != ap.dev)
+ return 0;
+- } else {
+- info("rm_unwanted: %s\n", file);
+- if (S_ISDIR(st->st_mode))
+- rmdir(file);
+- else if (!S_ISLNK(st->st_mode) || rmsymlink)
+- unlink(file);
++ return 1;
++ }
++
++ if (lstat(file, &newst)) {
++ crit ("rm_unwanted: unable to stat file, possible race "
++ "condition.");
++ return 0;
++ }
++
++ if (newst.st_dev != ap.dev) {
++ crit ("rm_unwanted: file %s has the wrong device, possible "
++ "race condition.",file);
++ return 0;
++ }
++
++ if (S_ISDIR(newst.st_mode)) {
++ if (rmdir(file)) {
++ info ("rm_unwanted: unable to remove directory"
++ " %s", file);
++ return 0;
++ }
++ } else if (S_ISREG(newst.st_mode)) {
++ crit ("rm_unwanted: attempting to remove files from a mounted "
++ "directory.");
++ return 0;
++ } else if (S_ISLNK(newst.st_mode) && rmsymlink) {
++ unlink(file);
+ }
+
+ return 1;