afsd: Fail gracefully on mtab open failure
[openafs.git] / src / afsd / afsd_kernel.c
index c0b9531..ea170d5 100644 (file)
@@ -407,16 +407,39 @@ HandleMTab(char *cacheMountDir)
 #else
 #if defined(AFS_SGI_ENV) || defined(AFS_LINUX20_ENV)
     struct mntent tmntent;
+    char *dir;
+    int i;
 
     tfilep = setmntent("/etc/mtab", "a+");
+    if (!tfilep) {
+       printf("Can't open /etc/mtab for writing (errno %d); not adding "
+              "an entry for AFS\n", errno);
+       return 1;
+    }
+
+    dir = strdup(cacheMountDir);
+
+    /* trim trailing slashes; don't look at dir[0] in case we are somehow
+     * just "/" */
+    for (i = strlen(dir)-1; i > 0; i--) {
+       if (dir[i] == '/') {
+           dir[i] = '\0';
+       } else {
+           break;
+       }
+    }
+
     tmntent.mnt_fsname = "AFS";
-    tmntent.mnt_dir = cacheMountDir;
+    tmntent.mnt_dir = dir;
     tmntent.mnt_type = "afs";
     tmntent.mnt_opts = "rw";
     tmntent.mnt_freq = 1;
     tmntent.mnt_passno = 3;
     addmntent(tfilep, &tmntent);
     endmntent(tfilep);
+
+    free(dir);
+    dir = NULL;
 #else
     struct mntent tmntent;