fsck: use PATH or fallback to /sbin

It's overkill to support all the obscure paths like /sbin/fs.d. We
have PATH for customization, that's enough.

It still seems like a good idea to keep fsck robust, because it's used
by boot scripts/systemd. For this reason fsck fallbacks to "/sbin" if
PATH is undefined or empty.

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2015-04-27 10:51:33 +02:00
parent f1bc59963f
commit a03bdbcd20
2 changed files with 10 additions and 31 deletions

View File

@ -80,14 +80,11 @@ In actuality,
.B fsck
is simply a front-end for the various filesystem checkers
(\fBfsck\fR.\fIfstype\fR) available under Linux. The
filesystem-specific checker is searched for in
.I /sbin
first, then in
.I /etc/fs
and
.IR /etc ,
and finally in the directories listed in the PATH environment
variable. Please see the filesystem-specific checker manual pages for
filesystem-specific checker is searched for in the
PATH environment variable. If the PATH is undefined then
fallback to "/sbin".
.PP
Please see the filesystem-specific checker manual pages for
further details.
.SH OPTIONS
.TP
@ -416,17 +413,7 @@ be run based on gathering accounting data from the operating system.
.B PATH
The
.B PATH
environment variable is used to find filesystem checkers. A set of
system directories are searched first:
.BR /sbin ,
.BR /sbin/fs.d ,
.BR /sbin/fs ,
.BR /etc/fs ,
and
.BR /etc .
Then the set of directories found in the
.B PATH
environment are searched.
environment variable is used to find filesystem checkers.
.TP
.B FSTAB_FILE
This environment variable allows the system administrator

View File

@ -150,9 +150,10 @@ static int kill_sent;
static char *fstype;
static struct fsck_instance *instance_list;
static const char fsck_prefix_path[] = FS_SEARCH_PATH;
#define FSCK_DEFAULT_PATH "/sbin"
static char *fsck_path;
/* parsed fstab and mtab */
static struct libmnt_table *fstab, *mtab;
static struct libmnt_cache *mntcache;
@ -1551,8 +1552,8 @@ int main(int argc, char *argv[])
{
int i, status = 0;
int interactive = 0;
char *oldpath = getenv("PATH");
struct libmnt_fs *fs;
const char *path = getenv("PATH");
setvbuf(stdout, NULL, _IONBF, BUFSIZ);
setvbuf(stderr, NULL, _IONBF, BUFSIZ);
@ -1573,16 +1574,7 @@ int main(int argc, char *argv[])
load_fs_info();
/* Update our search path to include uncommon directories. */
if (oldpath) {
fsck_path = xmalloc (strlen (fsck_prefix_path) + 1 +
strlen (oldpath) + 1);
strcpy (fsck_path, fsck_prefix_path);
strcat (fsck_path, ":");
strcat (fsck_path, oldpath);
} else {
fsck_path = xstrdup(fsck_prefix_path);
}
fsck_path = xstrdup(path && *path ? path : FSCK_DEFAULT_PATH);
if ((num_devices == 1) || (serialize))
interactive = 1;