From b1f0bb472e237f5a6f88449db44f030c08a5a324 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 8 Jun 2011 13:19:59 -0500 Subject: [PATCH] afsd: Fail gracefully on mtab open failure 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. Change-Id: I58d64548303f25a51753d093a733608fea1282e1 Reviewed-on: http://gerrit.openafs.org/4825 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/afsd/afsd_kernel.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/afsd/afsd_kernel.c b/src/afsd/afsd_kernel.c index 91f0d1b38..ea170d59d 100644 --- a/src/afsd/afsd_kernel.c +++ b/src/afsd/afsd_kernel.c @@ -407,9 +407,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--) { @@ -420,7 +429,6 @@ HandleMTab(char *cacheMountDir) } } - tfilep = setmntent("/etc/mtab", "a+"); tmntent.mnt_fsname = "AFS"; tmntent.mnt_dir = dir; tmntent.mnt_type = "afs"; -- 2.39.5