From: Andrew Deason Date: Wed, 8 Jun 2011 18:19:59 +0000 (-0500) Subject: afsd: Fail gracefully on mtab open failure X-Git-Tag: upstream/1.8.0_pre1^2~3639 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=b1f0bb472e237f5a6f88449db44f030c08a5a324;p=packages%2Fo%2Fopenafs.git 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 --- 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";