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:
parent
cae9e3e7d2
commit
520d87e58e
2
README
2
README
|
@ -44,7 +44,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support,
|
||||||
= ls no (-C), -S, -f, -m, -s, -x
|
= ls no (-C), -S, -f, -m, -s, -x
|
||||||
=*| md5sum non-posix none
|
=*| md5sum non-posix none
|
||||||
=* mkdir yes none
|
=* mkdir yes none
|
||||||
=* mkfifo yes none
|
=*| mkfifo yes none
|
||||||
=* mktemp non-posix none
|
=* mktemp non-posix none
|
||||||
=* mv yes none (-i)
|
=* mv yes none (-i)
|
||||||
=*| nice yes none
|
=*| nice yes none
|
||||||
|
|
24
mkfifo.c
24
mkfifo.c
|
@ -14,10 +14,8 @@ usage(void)
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
mode_t mode = 0;
|
mode_t mode = 0, mask;
|
||||||
mode_t mask;
|
int mflag = 0, ret = 0;
|
||||||
int mflag = 0;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
ARGBEGIN {
|
ARGBEGIN {
|
||||||
case 'm':
|
case 'm':
|
||||||
|
@ -29,21 +27,21 @@ main(int argc, char *argv[])
|
||||||
usage();
|
usage();
|
||||||
} ARGEND;
|
} ARGEND;
|
||||||
|
|
||||||
if (argc < 1)
|
if (!argc)
|
||||||
usage();
|
usage();
|
||||||
|
|
||||||
for (; argc > 0; argc--, argv++) {
|
for (; *argv; argc--, argv++) {
|
||||||
if (mkfifo(argv[0], S_IRUSR | S_IWUSR |
|
if (mkfifo(*argv, S_IRUSR | S_IWUSR | S_IRGRP |
|
||||||
S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) < 0) {
|
S_IWGRP | S_IROTH | S_IWOTH) < 0) {
|
||||||
weprintf("mkfifo %s:", argv[0]);
|
weprintf("mkfifo %s:", *argv);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
} else if (mflag) {
|
||||||
if (mflag) {
|
if (chmod(*argv, mode) < 0) {
|
||||||
if (chmod(argv[0], mode) < 0) {
|
weprintf("chmod %s:", *argv);
|
||||||
weprintf("chmod %s:", argv[0]);
|
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user