machinectl: be more careful when generating machine name from path name
Let's use our new path_extract_filename() for extracting the basename from a path in a safe fashion. Let's do this for all our three local import calls.
This commit is contained in:
parent
176a05c24b
commit
e288e0599e
|
@ -2000,28 +2000,38 @@ static int transfer_image_common(sd_bus *bus, sd_bus_message *m) {
|
||||||
return -r;
|
return -r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *nullify_dash(const char *p) {
|
||||||
|
if (isempty(p))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (streq(p, "-"))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
static int import_tar(int argc, char *argv[], void *userdata) {
|
static int import_tar(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||||
_cleanup_free_ char *ll = NULL;
|
_cleanup_free_ char *ll = NULL, *fn = NULL;
|
||||||
_cleanup_close_ int fd = -1;
|
|
||||||
const char *local = NULL, *path = NULL;
|
const char *local = NULL, *path = NULL;
|
||||||
|
_cleanup_close_ int fd = -1;
|
||||||
sd_bus *bus = userdata;
|
sd_bus *bus = userdata;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
|
|
||||||
if (argc >= 2)
|
if (argc >= 2)
|
||||||
path = argv[1];
|
path = nullify_dash(argv[1]);
|
||||||
if (isempty(path) || streq(path, "-"))
|
|
||||||
path = NULL;
|
|
||||||
|
|
||||||
if (argc >= 3)
|
if (argc >= 3)
|
||||||
local = argv[2];
|
local = nullify_dash(argv[2]);
|
||||||
else if (path)
|
else if (path) {
|
||||||
local = basename(path);
|
r = path_extract_filename(path, &fn);
|
||||||
if (isempty(local) || streq(local, "-"))
|
if (r < 0)
|
||||||
local = NULL;
|
return log_error_errno(r, "Cannot extract container name from filename: %m");
|
||||||
|
|
||||||
|
local = fn;
|
||||||
|
}
|
||||||
if (!local) {
|
if (!local) {
|
||||||
log_error("Need either path or local name.");
|
log_error("Need either path or local name.");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -2069,26 +2079,26 @@ static int import_tar(int argc, char *argv[], void *userdata) {
|
||||||
|
|
||||||
static int import_raw(int argc, char *argv[], void *userdata) {
|
static int import_raw(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||||
_cleanup_free_ char *ll = NULL;
|
_cleanup_free_ char *ll = NULL, *fn = NULL;
|
||||||
_cleanup_close_ int fd = -1;
|
|
||||||
const char *local = NULL, *path = NULL;
|
const char *local = NULL, *path = NULL;
|
||||||
|
_cleanup_close_ int fd = -1;
|
||||||
sd_bus *bus = userdata;
|
sd_bus *bus = userdata;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
|
|
||||||
if (argc >= 2)
|
if (argc >= 2)
|
||||||
path = argv[1];
|
path = nullify_dash(argv[1]);
|
||||||
if (isempty(path) || streq(path, "-"))
|
|
||||||
path = NULL;
|
|
||||||
|
|
||||||
if (argc >= 3)
|
if (argc >= 3)
|
||||||
local = argv[2];
|
local = nullify_dash(argv[2]);
|
||||||
else if (path)
|
else if (path) {
|
||||||
local = basename(path);
|
r = path_extract_filename(path, &fn);
|
||||||
if (isempty(local) || streq(local, "-"))
|
if (r < 0)
|
||||||
local = NULL;
|
return log_error_errno(r, "Cannot extract container name from filename: %m");
|
||||||
|
|
||||||
|
local = fn;
|
||||||
|
}
|
||||||
if (!local) {
|
if (!local) {
|
||||||
log_error("Need either path or local name.");
|
log_error("Need either path or local name.");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -2136,25 +2146,26 @@ static int import_raw(int argc, char *argv[], void *userdata) {
|
||||||
|
|
||||||
static int import_fs(int argc, char *argv[], void *userdata) {
|
static int import_fs(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||||
_cleanup_close_ int fd = -1;
|
|
||||||
const char *local = NULL, *path = NULL;
|
const char *local = NULL, *path = NULL;
|
||||||
|
_cleanup_free_ char *fn = NULL;
|
||||||
|
_cleanup_close_ int fd = -1;
|
||||||
sd_bus *bus = userdata;
|
sd_bus *bus = userdata;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(bus);
|
assert(bus);
|
||||||
|
|
||||||
if (argc >= 2)
|
if (argc >= 2)
|
||||||
path = argv[1];
|
path = nullify_dash(argv[1]);
|
||||||
if (isempty(path) || streq(path, "-"))
|
|
||||||
path = NULL;
|
|
||||||
|
|
||||||
if (argc >= 3)
|
if (argc >= 3)
|
||||||
local = argv[2];
|
local = nullify_dash(argv[2]);
|
||||||
else if (path)
|
else if (path) {
|
||||||
local = basename(path);
|
r = path_extract_filename(path, &fn);
|
||||||
if (isempty(local) || streq(local, "-"))
|
if (r < 0)
|
||||||
local = NULL;
|
return log_error_errno(r, "Cannot extract container name from filename: %m");
|
||||||
|
|
||||||
|
local = fn;
|
||||||
|
}
|
||||||
if (!local) {
|
if (!local) {
|
||||||
log_error("Need either path or local name.");
|
log_error("Need either path or local name.");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
Loading…
Reference in a new issue