diff --git a/src/66/66-tree.c b/src/66/66-tree.c
index b78e9b7f139afee99c6391600a8a956c7cd52cac..2247c684bd56c67b875b27568148966649e25fb2 100644
--- a/src/66/66-tree.c
+++ b/src/66/66-tree.c
@@ -337,13 +337,13 @@ int set_rules(char const *tree,uid_t *uids, size_t uidn,unsigned int what)
 		uint32_pack(pack,uids[i+1]) ;
 		pack[uint_fmt(pack,uids[i+1])] = 0 ;
 		char ut[treelen + SS_RULES_LEN + 1 + uint_fmt(pack,uids[i+1]) + 1] ;
-		r = dir_search(tmp,pack,S_IFREG) ;
-		if (r)
+		memcpy(ut,tmp,treelen + SS_RULES_LEN) ;
+		memcpy(ut + treelen + SS_RULES_LEN,"/",1) ;
+		memcpy(ut + treelen + SS_RULES_LEN + 1,pack,uint_fmt(pack,uids[i+1])) ;
+		ut[treelen + SS_RULES_LEN + 1 + uint_fmt(pack,uids[i + 1])] = 0 ;
+		r = scan_mode(tmp,S_IFREG) ;
+		if (r == 1)
 		{
-			memcpy(ut,tmp,treelen + SS_RULES_LEN) ;
-			memcpy(ut + treelen + SS_RULES_LEN,"/",1) ;
-			memcpy(ut + treelen + SS_RULES_LEN + 1,pack,uint_fmt(pack,uids[i+1])) ;
-			ut[treelen + SS_RULES_LEN + 1 + uint_fmt(pack,uids[i + 1])] = 0 ;
 			log_trace("unlink: ",ut) ;
 			r = unlink(ut) ;
 			if (r == -1) return 0 ;