diff -r -U3 cfs-1.4.1.orig/cfs_adm.c cfs-1.4.1/cfs_adm.c
--- cfs-1.4.1.orig/cfs_adm.c	2006-03-10 11:35:33.000000000 -0700
+++ cfs-1.4.1/cfs_adm.c	2006-03-10 11:01:35.000000000 -0700
@@ -218,8 +218,14 @@
 	l =snprintf(fn, NFS_MAXPATHLEN, "%s/...",path);
 	if (l < 0 || l >= NFS_MAXPATHLEN)
 	  return CFSERR_BADNAME;
-	if ((fp=fopen(fn,"r"))==NULL)
-		return CFSERR_NODIR;
+	if ((fp=fopen(fn,"r"))==NULL) {
+		l =snprintf(fn, NFS_MAXPATHLEN, "%s/.._",path);
+		if (l < 0 || l >= NFS_MAXPATHLEN)
+		  return CFSERR_BADNAME;
+		if ((fp=fopen(fn,"r"))==NULL) {
+			return CFSERR_NODIR;
+		}
+	}
 	if (fread(buf,8,1,fp)!=1) {
 		fclose (fp);
 		return CFSERR_NODIR;
diff -r -U3 cfs-1.4.1.orig/cmkdir.c cfs-1.4.1/cmkdir.c
--- cfs-1.4.1.orig/cmkdir.c	2006-03-10 11:35:33.000000000 -0700
+++ cfs-1.4.1/cmkdir.c	2006-03-10 11:03:54.000000000 -0700
@@ -196,8 +196,15 @@
 	mask_cipher(&kt,str,1);
 	cipher(&kt,str,0);
 	if ((fp=fopen(path,"w")) == NULL) {
-		perror("cmkdir");
-		exit(1);
+		l =snprintf(path, 1024, "%s/.._", argv[0]);
+		if (l < 0 || l >= 1024) {
+		  fprintf(stderr, "File name too long\n");
+		  exit(1);
+		}
+		if ((fp=fopen(path,"w")) == NULL) {
+			perror("cmkdir");
+			exit(1);
+		}
 	}
 	fwrite(str,8,1,fp);
 	fclose(fp);
diff -r -U3 cfs-1.4.1.orig/cpasswd.c cfs-1.4.1/cpasswd.c
--- cfs-1.4.1.orig/cpasswd.c	2006-03-10 11:35:33.000000000 -0700
+++ cfs-1.4.1/cpasswd.c	2006-03-10 11:04:33.000000000 -0700
@@ -199,8 +199,12 @@
 	
 	copykey(ak,&k);
 	sprintf(fn,"%s/...",path);
-	if ((fp=fopen(fn,"r"))==NULL)
-		return 0;
+	if ((fp=fopen(fn,"r"))==NULL) {
+		sprintf(fn,"%s/.._",path);
+		if ((fp=fopen(fn,"r"))==NULL) {
+			return 0;
+		}
+	}
 	if (fread(buf,8,1,fp)!=1) {
 		fclose (fp);
 		return 0;
