chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
use udev_root instead of "/dev"in selinux matchpathcon_init_prefix()
[elogind.git]
/
udev_utils_run.c
diff --git
a/udev_utils_run.c
b/udev_utils_run.c
index 1315154c2678c27d9c869fe3fdc2100b0aad6764..e1e775ebe6f2a5f03964aba8d5db86375a24d4bd 100644
(file)
--- a/
udev_utils_run.c
+++ b/
udev_utils_run.c
@@
-82,6
+82,7
@@
int run_program(const char *command, const char *subsystem,
int errpipe[2] = {-1, -1};
pid_t pid;
char arg[PATH_SIZE];
int errpipe[2] = {-1, -1};
pid_t pid;
char arg[PATH_SIZE];
+ char program[PATH_SIZE];
char *argv[(sizeof(arg) / 2) + 1];
int devnull;
int i;
char *argv[(sizeof(arg) / 2) + 1];
int devnull;
int i;
@@
-115,17
+116,24
@@
int run_program(const char *command, const char *subsystem,
/* prepare pipes from child to parent */
if (result || log) {
if (pipe(outpipe) != 0) {
/* prepare pipes from child to parent */
if (result || log) {
if (pipe(outpipe) != 0) {
- err("pipe failed
"
);
+ err("pipe failed
: %s", strerror(errno)
);
return -1;
}
}
if (log) {
if (pipe(errpipe) != 0) {
return -1;
}
}
if (log) {
if (pipe(errpipe) != 0) {
- err("pipe failed
"
);
+ err("pipe failed
: %s", strerror(errno)
);
return -1;
}
}
return -1;
}
}
+ /* allow programs in /lib/udev called without the path */
+ if (strchr(argv[0], '/') == NULL) {
+ strlcpy(program, "/lib/udev/", sizeof(program));
+ strlcat(program, argv[0], sizeof(program));
+ argv[0] = program;
+ }
+
pid = fork();
switch(pid) {
case 0:
pid = fork();
switch(pid) {
case 0:
@@
-145,7
+153,7
@@
int run_program(const char *command, const char *subsystem,
dup2(devnull, STDERR_FILENO);
close(devnull);
} else
dup2(devnull, STDERR_FILENO);
close(devnull);
} else
- err("open /dev/null failed
"
);
+ err("open /dev/null failed
: %s", strerror(errno)
);
if (outpipe[WRITE_END] > 0)
dup2(outpipe[WRITE_END], STDOUT_FILENO);
if (errpipe[WRITE_END] > 0)
if (outpipe[WRITE_END] > 0)
dup2(outpipe[WRITE_END], STDOUT_FILENO);
if (errpipe[WRITE_END] > 0)
@@
-156,7
+164,7
@@
int run_program(const char *command, const char *subsystem,
err("exec of program '%s' failed", argv[0]);
_exit(1);
case -1:
err("exec of program '%s' failed", argv[0]);
_exit(1);
case -1:
- err("fork of '%s' failed
", argv[0]
);
+ err("fork of '%s' failed
: %s", argv[0], strerror(errno)
);
return -1;
default:
/* read from child if requested */
return -1;
default:
/* read from child if requested */
@@
-199,7
+207,7
@@
int run_program(const char *command, const char *subsystem,
close(outpipe[READ_END]);
outpipe[READ_END] = -1;
if (count < 0) {
close(outpipe[READ_END]);
outpipe[READ_END] = -1;
if (count < 0) {
- err("stdin read failed
with '%s'
", strerror(errno));
+ err("stdin read failed
: %s
", strerror(errno));
retval = -1;
}
continue;
retval = -1;
}
continue;
@@
-233,7
+241,7
@@
int run_program(const char *command, const char *subsystem,
close(errpipe[READ_END]);
errpipe[READ_END] = -1;
if (count < 0)
close(errpipe[READ_END]);
errpipe[READ_END] = -1;
if (count < 0)
- err("stderr read failed
with '%s'
", strerror(errno));
+ err("stderr read failed
: %s
", strerror(errno));
continue;
}
errbuf[count] = '\0';
continue;
}
errbuf[count] = '\0';