]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
afsd: Fail gracefully on mtab open failure
authorAndrew Deason <adeason@sinenomine.net>
Wed, 8 Jun 2011 18:19:59 +0000 (13:19 -0500)
committerDerrick Brashear <shadow@dementix.org>
Fri, 16 Dec 2011 11:03:05 +0000 (03:03 -0800)
On Linux and IRIX, fail gracefully when we fail to open /etc/mtab,
instead of segfaulting. Move strdup'ing cacheMountDir until after
opening /etc/mtab, to simplify the error handling.

Reviewed-on: http://gerrit.openafs.org/4825
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
(cherry picked from commit b1f0bb472e237f5a6f88449db44f030c08a5a324)

Change-Id: Id12f6190eac15593dd32fd46db354e169d19dc2f
Reviewed-on: http://gerrit.openafs.org/6303
Tested-by: Derrick Brashear <shadow@dementix.org>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
src/afsd/afsd_kernel.c

index d0c3a692eb2476f66e74fb41b1beabdcbdaad1d4..1f7fdbba8daf64faefeebb636eb013e11e1b3785 100644 (file)
@@ -405,9 +405,18 @@ HandleMTab(char *cacheMountDir)
 #else
 #if defined(AFS_SGI_ENV) || defined(AFS_LINUX20_ENV)
     struct mntent tmntent;
-    char *dir = strdup(cacheMountDir);
+    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--) {
@@ -418,7 +427,6 @@ HandleMTab(char *cacheMountDir)
        }
     }
 
-    tfilep = setmntent("/etc/mtab", "a+");
     tmntent.mnt_fsname = "AFS";
     tmntent.mnt_dir = dir;
     tmntent.mnt_type = "afs";