X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fimport%2Fimportd.c;h=a6447e1fdd32d4f01f9644c3167f4103cf56e32a;hb=432cea008720480f6eaae7e75e6ad255e91fe2b4;hp=47157857c8293ac055c8660087f88d1b71602719;hpb=7079cfeffb6d520f20ddff53fd78467e72e6cc94;p=elogind.git diff --git a/src/import/importd.c b/src/import/importd.c index 47157857c..a6447e1fd 100644 --- a/src/import/importd.c +++ b/src/import/importd.c @@ -29,6 +29,10 @@ #include "def.h" #include "socket-util.h" #include "mkdir.h" +#include "def.h" +#include "missing.h" +#include "machine-pool.h" +#include "path-util.h" #include "import-util.h" typedef struct Transfer Transfer; @@ -517,12 +521,10 @@ static int manager_on_notify(sd_event_source *s, int fd, uint32_t revents, void return -errno; } + cmsg_close_all(&msghdr); + for (cmsg = CMSG_FIRSTHDR(&msghdr); cmsg; cmsg = CMSG_NXTHDR(&msghdr, cmsg)) { - if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) { - close_many((int*) CMSG_DATA(cmsg), (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int)); - log_warning("Somebody sent us unexpected fds, ignoring."); - return 0; - } else if (cmsg->cmsg_level == SOL_SOCKET && + if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_CREDENTIALS && cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred))) { @@ -660,6 +662,7 @@ static int method_pull_tar_or_raw(sd_bus *bus, sd_bus_message *msg, void *userda CAP_SYS_ADMIN, "org.freedesktop.import1.pull", false, + UID_INVALID, &m->polkit_registry, error); if (r < 0) @@ -686,6 +689,10 @@ static int method_pull_tar_or_raw(sd_bus *bus, sd_bus_message *msg, void *userda if (v < 0) return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unknown verification mode %s", verify); + r = setup_machine_directory(error); + if (r < 0) + return r; + type = streq_ptr(sd_bus_message_get_member(msg), "PullTar") ? TRANSFER_TAR : TRANSFER_RAW; if (manager_find(m, type, NULL, remote)) @@ -735,6 +742,7 @@ static int method_pull_dkr(sd_bus *bus, sd_bus_message *msg, void *userdata, sd_ CAP_SYS_ADMIN, "org.freedesktop.import1.pull", false, + UID_INVALID, &m->polkit_registry, error); if (r < 0) @@ -776,6 +784,10 @@ static int method_pull_dkr(sd_bus *bus, sd_bus_message *msg, void *userdata, sd_ if (v != IMPORT_VERIFY_NO) return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "DKR does not support verification."); + r = setup_machine_directory(error); + if (r < 0) + return r; + if (manager_find(m, TRANSFER_DKR, index_url, remote)) return sd_bus_error_setf(error, BUS_ERROR_TRANSFER_IN_PROGRESS, "Transfer for %s already in progress.", remote); @@ -864,6 +876,7 @@ static int method_cancel(sd_bus *bus, sd_bus_message *msg, void *userdata, sd_bu CAP_SYS_ADMIN, "org.freedesktop.import1.pull", false, + UID_INVALID, &t->manager->polkit_registry, error); if (r < 0) @@ -893,6 +906,7 @@ static int method_cancel_transfer(sd_bus *bus, sd_bus_message *msg, void *userda CAP_SYS_ADMIN, "org.freedesktop.import1.pull", false, + UID_INVALID, &m->polkit_registry, error); if (r < 0)