mirror of
https://github.com/AuxXxilium/eudev.git
synced 2024-12-19 13:08:42 +07:00
install: refuse installation of symlinked units
This commit is contained in:
parent
7461d1b76f
commit
992f87e192
@ -24,6 +24,7 @@
|
||||
#include <getopt.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "log.h"
|
||||
#include "path-lookup.h"
|
||||
@ -722,22 +723,32 @@ static int install_info_apply(LookupPaths *paths, InstallInfo *i, const char *co
|
||||
assert(i);
|
||||
|
||||
STRV_FOREACH(p, paths->unit_path) {
|
||||
int fd;
|
||||
|
||||
if (!(filename = path_make_absolute(i->name, *p))) {
|
||||
log_error("Out of memory");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if ((f = fopen(filename, "re")))
|
||||
break;
|
||||
/* Ensure that we don't follow symlinks */
|
||||
if ((fd = open(filename, O_RDONLY|O_CLOEXEC|O_NOFOLLOW|O_NOCTTY)) >= 0)
|
||||
if ((f = fdopen(fd, "re")))
|
||||
break;
|
||||
|
||||
free(filename);
|
||||
filename = NULL;
|
||||
if (errno == ELOOP) {
|
||||
log_error("Refusing to operate on symlinks, please pass unit names or absolute paths to unit files.");
|
||||
free(filename);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (errno != ENOENT) {
|
||||
log_error("Failed to open %s: %m", filename);
|
||||
free(filename);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
free(filename);
|
||||
filename = NULL;
|
||||
}
|
||||
|
||||
if (!f) {
|
||||
@ -810,7 +821,7 @@ static int do_realize(bool enabled) {
|
||||
}
|
||||
|
||||
if (arg_where == WHERE_SYSTEM && sd_booted() <= 0) {
|
||||
log_info("systemd is not running, --realize has not effect.");
|
||||
log_info("systemd is not running, --realize has no effect.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user