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.6.1.pre1^2~33 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=0ea8851076d9255c537b42bc2ecc5a1f241d260d;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. Reviewed-on: http://gerrit.openafs.org/4825 Tested-by: BuildBot Reviewed-by: Derrick Brashear (cherry picked from commit b1f0bb472e237f5a6f88449db44f030c08a5a324) Change-Id: Id12f6190eac15593dd32fd46db354e169d19dc2f Reviewed-on: http://gerrit.openafs.org/6303 Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- diff --git a/src/afsd/afsd_kernel.c b/src/afsd/afsd_kernel.c index d0c3a692e..1f7fdbba8 100644 --- a/src/afsd/afsd_kernel.c +++ b/src/afsd/afsd_kernel.c @@ -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";