Audit mkfifo(1)

1) Fix usage()
2) Group local variables
3) Idiomatic argv-loop
4) BUGFIX: When the m-flag is specified, POSIX clearly says:
   "Set the file permission bits of the newly-created FIFO to the specified mode
   value."
   This means, that if mkfifo() fails for some reason, it should not try to
   chmod() the given path (which has been fixed with the "else if")
   A simple testcase is:

   $ touch testfile; mkfifo -m 000 testfile;

   GNU mkfifo(1): ls -l testfile
   -rw-r--r-- 1 testfile

   sbase mkfifo(1): ls -l testfile
   ---------- 1 testfile
5) Add blank line before return
This commit is contained in:
FRIGN
2015-03-02 17:25:29 +01:00
parent cae9e3e7d2
commit 520d87e58e
2 changed files with 13 additions and 15 deletions

View File

@@ -8,16 +8,14 @@
static void
usage(void)
{
eprintf("usage: %s [-m mode] name...\n", argv0);
eprintf("usage: %s [-m mode] name ...\n", argv0);
}
int
main(int argc, char *argv[])
{
mode_t mode = 0;
mode_t mask;
int mflag = 0;
int ret = 0;
mode_t mode = 0, mask;
int mflag = 0, ret = 0;
ARGBEGIN {
case 'm':
@@ -29,21 +27,21 @@ main(int argc, char *argv[])
usage();
} ARGEND;
if (argc < 1)
if (!argc)
usage();
for (; argc > 0; argc--, argv++) {
if (mkfifo(argv[0], S_IRUSR | S_IWUSR |
S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) < 0) {
weprintf("mkfifo %s:", argv[0]);
for (; *argv; argc--, argv++) {
if (mkfifo(*argv, S_IRUSR | S_IWUSR | S_IRGRP |
S_IWGRP | S_IROTH | S_IWOTH) < 0) {
weprintf("mkfifo %s:", *argv);
ret = 1;
}
if (mflag) {
if (chmod(argv[0], mode) < 0) {
weprintf("chmod %s:", argv[0]);
} else if (mflag) {
if (chmod(*argv, mode) < 0) {
weprintf("chmod %s:", *argv);
ret = 1;
}
}
}
return ret;
}