1abbee
From b4bfb025f7ab0878e8e7e980dbad5b0a5bed1555 Mon Sep 17 00:00:00 2001
1abbee
From: Lennart Poettering <lennart@poettering.net>
1abbee
Date: Thu, 10 Dec 2015 12:40:04 +0100
1abbee
Subject: [PATCH] importd: drop dkr support
1abbee
1abbee
The current code is not compatible with current dkr protocols anyway,
1abbee
and dkr has a different focus ("microservices") than nspawn anyway
1abbee
("whole machine containers"), hence drop support for it, we cannot
1abbee
reasonably keep this up to date, and it creates the impression we'd
1abbee
actually care for the microservices usecase.
1abbee
1abbee
Cherry-picked from: b43d75c
1abbee
Related: #1284974
1abbee
---
1abbee
 Makefile.am                             |   2 -
1abbee
 TODO                                    |   4 -
1abbee
 configure.ac                            |   9 -
23b3cf
 man/machinectl.xml                      |  58 --
23b3cf
 src/import/import-dkr.c                 | 891 ------------------------
23b3cf
 src/import/import-dkr.h                 |  36 -
23b3cf
 src/import/importd.c                    | 111 +--
1abbee
 src/import/org.freedesktop.import1.conf |   4 -
23b3cf
 src/import/pull.c                       | 119 +---
23b3cf
 src/machine/machinectl.c                |  90 +--
23b3cf
 src/shared/import-util.c                |  31 -
1abbee
 src/shared/import-util.h                |   4 -
1abbee
 12 files changed, 5 insertions(+), 1354 deletions(-)
1abbee
 delete mode 100644 src/import/import-dkr.c
1abbee
 delete mode 100644 src/import/import-dkr.h
1abbee
1abbee
diff --git a/Makefile.am b/Makefile.am
181b3f
index 3a09e0a62..b0a34b212 100644
1abbee
--- a/Makefile.am
1abbee
+++ b/Makefile.am
1abbee
@@ -5369,8 +5369,6 @@ systemd_pull_SOURCES = \
1abbee
 	src/import/import-raw.h \
1abbee
 	src/import/import-tar.c \
1abbee
 	src/import/import-tar.h \
1abbee
-	src/import/import-dkr.c \
1abbee
-	src/import/import-dkr.h \
1abbee
 	src/import/import-job.c \
1abbee
 	src/import/import-job.h \
1abbee
 	src/import/import-common.c \
1abbee
diff --git a/TODO b/TODO
181b3f
index 90b2c4b30..d96d2bf0e 100644
1abbee
--- a/TODO
1abbee
+++ b/TODO
1abbee
@@ -126,10 +126,6 @@ Features:
1abbee
 
1abbee
 * rework journald sigbus stuff to use mutex
1abbee
 
1abbee
-* import-dkr: support tarsum checksum verification, if it becomes reality one day...
1abbee
-
1abbee
-* import-dkr: convert json bits to nspawn configuration
1abbee
-
1abbee
 * import: support import from local files, and export to local files
1abbee
 
1abbee
 * core/cgroup: support net_cls modules, and support automatically allocating class ids, then add support for making firewall changes depending on it, to implement a per-service firewall
1abbee
diff --git a/configure.ac b/configure.ac
181b3f
index 9103f9b92..2734368dc 100644
1abbee
--- a/configure.ac
1abbee
+++ b/configure.ac
1abbee
@@ -1389,14 +1389,6 @@ AC_ARG_ENABLE([split-usr],
1abbee
                 enable_split_usr=no
1abbee
         ])])
1abbee
 
1abbee
-AC_ARG_WITH([dkr-index-url],
1abbee
-        [AS_HELP_STRING([--dkr-index-url=URL], [Specify the default index URL to use for image downloads])],
1abbee
-        [DEFAULT_DKR_INDEX_URL="\"$withval\""],
1abbee
-        [DEFAULT_DKR_INDEX_URL="NULL"])
1abbee
-
1abbee
-AC_DEFINE_UNQUOTED(DEFAULT_DKR_INDEX_URL, [$DEFAULT_DKR_INDEX_URL], [Default index URL to use for image downloads])
1abbee
-AC_SUBST(DEFAULT_DKR_INDEX_URL)
1abbee
-
1abbee
 AS_IF([test "x${enable_split_usr}" = "xyes"], [
1abbee
         AC_DEFINE(HAVE_SPLIT_USR, 1, [Define if /bin, /sbin aren't symlinks into /usr])
1abbee
 ])
1abbee
@@ -1564,7 +1556,6 @@ AC_MSG_RESULT([
1abbee
         Maximum System UID:      ${SYSTEM_UID_MAX}
1abbee
         Maximum System GID:      ${SYSTEM_GID_MAX}
1abbee
         Certificate root:        ${CERTIFICATEROOT}
1abbee
-        Default dkr Index        ${DEFAULT_DKR_INDEX_URL}
1abbee
 
1abbee
         CFLAGS:                  ${OUR_CFLAGS} ${CFLAGS}
1abbee
         CPPFLAGS:                ${OUR_CPPFLAGS} ${CPPFLAGS}
1abbee
diff --git a/man/machinectl.xml b/man/machinectl.xml
181b3f
index 640cb8b7d..b0a7f2ae4 100644
1abbee
--- a/man/machinectl.xml
1abbee
+++ b/man/machinectl.xml
1abbee
@@ -204,16 +204,6 @@
1abbee
         image.</para></listitem>
1abbee
       </varlistentry>
1abbee
 
1abbee
-      <varlistentry>
1abbee
-        <term><option>--dkr-index-url</option></term>
1abbee
-
1abbee
-        <listitem><para>Specifies the index server to use for
1abbee
-        downloading <literal>dkr</literal> images with the
1abbee
-        <command>pull-dkr</command>. Takes a
1abbee
-        <literal>http://</literal>, <literal>https://</literal>
1abbee
-        URL.</para></listitem>
1abbee
-      </varlistentry>
1abbee
-
1abbee
       <xi:include href="user-system-options.xml" xpointer="host" />
1abbee
       <xi:include href="user-system-options.xml" xpointer="machine" />
1abbee
 
181b3f
@@ -602,42 +592,6 @@
181b3f
         below.</para></listitem>
1abbee
       </varlistentry>
1abbee
 
181b3f
-      <varlistentry>
1abbee
-        <term><command>pull-dkr</command> <replaceable>REMOTE</replaceable> [<replaceable>NAME</replaceable>]</term>
1abbee
-
1abbee
-        <listitem><para>Downloads a <literal>dkr</literal> container
1abbee
-        image and makes it available locally. The remote name refers
1abbee
-        to a <literal>dkr</literal> container name. If omitted, the
1abbee
-        local machine name is derived from the <literal>dkr</literal>
1abbee
-        container name.</para>
1abbee
-
1abbee
-        <para>Image verification is not available for
1abbee
-        <literal>dkr</literal> containers, and thus
1abbee
-        <option>--verify=no</option> must always be specified with
1abbee
-        this command.</para>
1abbee
-
1abbee
-        <para>This command downloads all (missing) layers for the
1abbee
-        specified container and places them in read-only subvolumes in
1abbee
-        <filename>/var/lib/machines/</filename>. A writable snapshot
1abbee
-        of the newest layer is then created under the specified local
1abbee
-        machine name. To omit creation of this writable snapshot, pass
1abbee
-        <literal>-</literal> as local machine name.</para>
1abbee
-
1abbee
-        <para>The read-only layer subvolumes are prefixed with
1abbee
-        <filename>.dkr-</filename>, and thus now shown by
1abbee
-        <command>list-images</command>, unless <option>--all</option>
1abbee
-        is passed.</para>
1abbee
-
1abbee
-        <para>To specify the <literal>dkr</literal> index server to
1abbee
-        use for looking up the specified container, use
1abbee
-        <option>--dkr-index-url=</option>.</para>
1abbee
-
1abbee
-        <para>Note that pressing C-c during execution of this command
1abbee
-        will not abort the download. Use
1abbee
-        <command>cancel-transfer</command>, described
1abbee
-        below.</para></listitem>
1abbee
-      </varlistentry>
1abbee
-
181b3f
       <varlistentry>
1abbee
         <term><command>list-transfers</command></term>
1abbee
 
1abbee
@@ -728,18 +682,6 @@
1abbee
       the machine started as system service. With the last command a
1abbee
       login prompt into the container is requested.</para>
1abbee
     </example>
1abbee
-
1abbee
-    <example>
1abbee
-      <title>Download a Fedora <literal>dkr</literal> image</title>
1abbee
-
1abbee
-      <programlisting># machinectl pull-dkr --verify=no mattdm/fedora
1abbee
-# systemd-nspawn -M fedora</programlisting>
1abbee
-
1abbee
-      <para>Downloads a <literal>dkr</literal> image and opens a shell
1abbee
-      in it. Note that the specified download command might require an
1abbee
-      index server to be specified with the
1abbee
-      <literal>--dkr-index-url=</literal>.</para>
1abbee
-    </example>
1abbee
   </refsect1>
1abbee
 
1abbee
   <refsect1>
1abbee
diff --git a/src/import/import-dkr.c b/src/import/import-dkr.c
1abbee
deleted file mode 100644
181b3f
index fb72f6cee..000000000
1abbee
--- a/src/import/import-dkr.c
1abbee
+++ /dev/null
1abbee
@@ -1,891 +0,0 @@
1abbee
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
1abbee
-
1abbee
-/***
1abbee
-  This file is part of systemd.
1abbee
-
1abbee
-  Copyright 2014 Lennart Poettering
1abbee
-
1abbee
-  systemd is free software; you can redistribute it and/or modify it
1abbee
-  under the terms of the GNU Lesser General Public License as published by
1abbee
-  the Free Software Foundation; either version 2.1 of the License, or
1abbee
-  (at your option) any later version.
1abbee
-
1abbee
-  systemd is distributed in the hope that it will be useful, but
1abbee
-  WITHOUT ANY WARRANTY; without even the implied warranty of
1abbee
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1abbee
-  Lesser General Public License for more details.
1abbee
-
1abbee
-  You should have received a copy of the GNU Lesser General Public License
1abbee
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
1abbee
-***/
1abbee
-
1abbee
-#include <curl/curl.h>
1abbee
-#include <sys/prctl.h>
1abbee
-
1abbee
-#include "sd-daemon.h"
1abbee
-#include "json.h"
1abbee
-#include "strv.h"
1abbee
-#include "btrfs-util.h"
1abbee
-#include "utf8.h"
1abbee
-#include "mkdir.h"
1abbee
-#include "import-util.h"
1abbee
-#include "curl-util.h"
1abbee
-#include "aufs-util.h"
1abbee
-#include "import-job.h"
1abbee
-#include "import-common.h"
1abbee
-#include "import-dkr.h"
1abbee
-
1abbee
-typedef enum DkrProgress {
1abbee
-        DKR_SEARCHING,
1abbee
-        DKR_RESOLVING,
1abbee
-        DKR_METADATA,
1abbee
-        DKR_DOWNLOADING,
1abbee
-        DKR_COPYING,
1abbee
-} DkrProgress;
1abbee
-
1abbee
-struct DkrImport {
1abbee
-        sd_event *event;
1abbee
-        CurlGlue *glue;
1abbee
-
1abbee
-        char *index_url;
1abbee
-        char *image_root;
1abbee
-
1abbee
-        ImportJob *images_job;
1abbee
-        ImportJob *tags_job;
1abbee
-        ImportJob *ancestry_job;
1abbee
-        ImportJob *json_job;
1abbee
-        ImportJob *layer_job;
1abbee
-
1abbee
-        char *name;
1abbee
-        char *tag;
1abbee
-        char *id;
1abbee
-
1abbee
-        char *response_token;
1abbee
-        char **response_registries;
1abbee
-
1abbee
-        char **ancestry;
1abbee
-        unsigned n_ancestry;
1abbee
-        unsigned current_ancestry;
1abbee
-
1abbee
-        DkrImportFinished on_finished;
1abbee
-        void *userdata;
1abbee
-
1abbee
-        char *local;
1abbee
-        bool force_local;
1abbee
-
1abbee
-        char *temp_path;
1abbee
-        char *final_path;
1abbee
-
1abbee
-        pid_t tar_pid;
1abbee
-};
1abbee
-
1abbee
-#define PROTOCOL_PREFIX "https://"
1abbee
-
1abbee
-#define HEADER_TOKEN "X-Do" /* the HTTP header for the auth token */ "cker-Token:"
1abbee
-#define HEADER_REGISTRY "X-Do" /*the HTTP header for the registry */ "cker-Endpoints:"
1abbee
-
1abbee
-#define LAYERS_MAX 2048
1abbee
-
1abbee
-static void dkr_import_job_on_finished(ImportJob *j);
1abbee
-
1abbee
-DkrImport* dkr_import_unref(DkrImport *i) {
1abbee
-        if (!i)
1abbee
-                return NULL;
1abbee
-
1abbee
-        if (i->tar_pid > 1) {
1abbee
-                (void) kill_and_sigcont(i->tar_pid, SIGKILL);
1abbee
-                (void) wait_for_terminate(i->tar_pid, NULL);
1abbee
-        }
1abbee
-
1abbee
-        import_job_unref(i->images_job);
1abbee
-        import_job_unref(i->tags_job);
1abbee
-        import_job_unref(i->ancestry_job);
1abbee
-        import_job_unref(i->json_job);
1abbee
-        import_job_unref(i->layer_job);
1abbee
-
1abbee
-        curl_glue_unref(i->glue);
1abbee
-        sd_event_unref(i->event);
1abbee
-
1abbee
-        if (i->temp_path) {
1abbee
-                (void) btrfs_subvol_remove(i->temp_path);
1abbee
-                (void) rm_rf_dangerous(i->temp_path, false, true, false);
1abbee
-                free(i->temp_path);
1abbee
-        }
1abbee
-
1abbee
-        free(i->name);
1abbee
-        free(i->tag);
1abbee
-        free(i->id);
1abbee
-        free(i->response_token);
1abbee
-        free(i->response_registries);
1abbee
-        strv_free(i->ancestry);
1abbee
-        free(i->final_path);
1abbee
-        free(i->index_url);
1abbee
-        free(i->image_root);
1abbee
-        free(i->local);
1abbee
-        free(i);
1abbee
-
1abbee
-        return NULL;
1abbee
-}
1abbee
-
1abbee
-int dkr_import_new(
1abbee
-                DkrImport **ret,
1abbee
-                sd_event *event,
1abbee
-                const char *index_url,
1abbee
-                const char *image_root,
1abbee
-                DkrImportFinished on_finished,
1abbee
-                void *userdata) {
1abbee
-
1abbee
-        _cleanup_(dkr_import_unrefp) DkrImport *i = NULL;
1abbee
-        char *e;
1abbee
-        int r;
1abbee
-
1abbee
-        assert(ret);
1abbee
-        assert(index_url);
1abbee
-
1abbee
-        if (!http_url_is_valid(index_url))
1abbee
-                return -EINVAL;
1abbee
-
1abbee
-        i = new0(DkrImport, 1);
1abbee
-        if (!i)
1abbee
-                return -ENOMEM;
1abbee
-
1abbee
-        i->on_finished = on_finished;
1abbee
-        i->userdata = userdata;
1abbee
-
1abbee
-        i->image_root = strdup(image_root ?: "/var/lib/machines");
1abbee
-        if (!i->image_root)
1abbee
-                return -ENOMEM;
1abbee
-
1abbee
-        i->index_url = strdup(index_url);
1abbee
-        if (!i->index_url)
1abbee
-                return -ENOMEM;
1abbee
-
1abbee
-        e = endswith(i->index_url, "/");
1abbee
-        if (e)
1abbee
-                *e = 0;
1abbee
-
1abbee
-        if (event)
1abbee
-                i->event = sd_event_ref(event);
1abbee
-        else {
1abbee
-                r = sd_event_default(&i->event);
1abbee
-                if (r < 0)
1abbee
-                        return r;
1abbee
-        }
1abbee
-
1abbee
-        r = curl_glue_new(&i->glue, i->event);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-
1abbee
-        i->glue->on_finished = import_job_curl_on_finished;
1abbee
-        i->glue->userdata = i;
1abbee
-
1abbee
-        *ret = i;
1abbee
-        i = NULL;
1abbee
-
1abbee
-        return 0;
1abbee
-}
1abbee
-
1abbee
-static void dkr_import_report_progress(DkrImport *i, DkrProgress p) {
1abbee
-        unsigned percent;
1abbee
-
1abbee
-        assert(i);
1abbee
-
1abbee
-        switch (p) {
1abbee
-
1abbee
-        case DKR_SEARCHING:
1abbee
-                percent = 0;
1abbee
-                if (i->images_job)
1abbee
-                        percent += i->images_job->progress_percent * 5 / 100;
1abbee
-                break;
1abbee
-
1abbee
-        case DKR_RESOLVING:
1abbee
-                percent = 5;
1abbee
-                if (i->tags_job)
1abbee
-                        percent += i->tags_job->progress_percent * 5 / 100;
1abbee
-                break;
1abbee
-
1abbee
-        case DKR_METADATA:
1abbee
-                percent = 10;
1abbee
-                if (i->ancestry_job)
1abbee
-                        percent += i->ancestry_job->progress_percent * 5 / 100;
1abbee
-                if (i->json_job)
1abbee
-                        percent += i->json_job->progress_percent * 5 / 100;
1abbee
-                break;
1abbee
-
1abbee
-        case DKR_DOWNLOADING:
1abbee
-                percent = 20;
1abbee
-                percent += 75 * i->current_ancestry / MAX(1U, i->n_ancestry);
1abbee
-                if (i->layer_job)
1abbee
-                        percent += i->layer_job->progress_percent * 75 / MAX(1U, i->n_ancestry) / 100;
1abbee
-
1abbee
-                break;
1abbee
-
1abbee
-        case DKR_COPYING:
1abbee
-                percent = 95;
1abbee
-                break;
1abbee
-
1abbee
-        default:
1abbee
-                assert_not_reached("Unknown progress state");
1abbee
-        }
1abbee
-
1abbee
-        sd_notifyf(false, "X_IMPORT_PROGRESS=%u", percent);
1abbee
-        log_debug("Combined progress %u%%", percent);
1abbee
-}
1abbee
-
1abbee
-static int parse_id(const void *payload, size_t size, char **ret) {
1abbee
-        _cleanup_free_ char *buf = NULL, *id = NULL, *other = NULL;
1abbee
-        union json_value v = {};
1abbee
-        void *json_state = NULL;
1abbee
-        const char *p;
1abbee
-        int t;
1abbee
-
1abbee
-        assert(payload);
1abbee
-        assert(ret);
1abbee
-
1abbee
-        if (size <= 0)
1abbee
-                return -EBADMSG;
1abbee
-
1abbee
-        if (memchr(payload, 0, size))
1abbee
-                return -EBADMSG;
1abbee
-
1abbee
-        buf = strndup(payload, size);
1abbee
-        if (!buf)
1abbee
-                return -ENOMEM;
1abbee
-
1abbee
-        p = buf;
1abbee
-        t = json_tokenize(&p, &id, &v, &json_state, NULL);
1abbee
-        if (t < 0)
1abbee
-                return t;
1abbee
-        if (t != JSON_STRING)
1abbee
-                return -EBADMSG;
1abbee
-
1abbee
-        t = json_tokenize(&p, &other, &v, &json_state, NULL);
1abbee
-        if (t < 0)
1abbee
-                return t;
1abbee
-        if (t != JSON_END)
1abbee
-                return -EBADMSG;
1abbee
-
1abbee
-        if (!dkr_id_is_valid(id))
1abbee
-                return -EBADMSG;
1abbee
-
1abbee
-        *ret = id;
1abbee
-        id = NULL;
1abbee
-
1abbee
-        return 0;
1abbee
-}
1abbee
-
1abbee
-static int parse_ancestry(const void *payload, size_t size, char ***ret) {
1abbee
-        _cleanup_free_ char *buf = NULL;
1abbee
-        void *json_state = NULL;
1abbee
-        const char *p;
1abbee
-        enum {
1abbee
-                STATE_BEGIN,
1abbee
-                STATE_ITEM,
1abbee
-                STATE_COMMA,
1abbee
-                STATE_END,
1abbee
-        } state = STATE_BEGIN;
1abbee
-        _cleanup_strv_free_ char **l = NULL;
1abbee
-        size_t n = 0, allocated = 0;
1abbee
-
1abbee
-        if (size <= 0)
1abbee
-                return -EBADMSG;
1abbee
-
1abbee
-        if (memchr(payload, 0, size))
1abbee
-                return -EBADMSG;
1abbee
-
1abbee
-        buf = strndup(payload, size);
1abbee
-        if (!buf)
1abbee
-                return -ENOMEM;
1abbee
-
1abbee
-        p = buf;
1abbee
-        for (;;) {
1abbee
-                _cleanup_free_ char *str;
1abbee
-                union json_value v = {};
1abbee
-                int t;
1abbee
-
1abbee
-                t = json_tokenize(&p, &str, &v, &json_state, NULL);
1abbee
-                if (t < 0)
1abbee
-                        return t;
1abbee
-
1abbee
-                switch (state) {
1abbee
-
1abbee
-                case STATE_BEGIN:
1abbee
-                        if (t == JSON_ARRAY_OPEN)
1abbee
-                                state = STATE_ITEM;
1abbee
-                        else
1abbee
-                                return -EBADMSG;
1abbee
-
1abbee
-                        break;
1abbee
-
1abbee
-                case STATE_ITEM:
1abbee
-                        if (t == JSON_STRING) {
1abbee
-                                if (!dkr_id_is_valid(str))
1abbee
-                                        return -EBADMSG;
1abbee
-
1abbee
-                                if (n+1 > LAYERS_MAX)
1abbee
-                                        return -EFBIG;
1abbee
-
1abbee
-                                if (!GREEDY_REALLOC(l, allocated, n + 2))
1abbee
-                                        return -ENOMEM;
1abbee
-
1abbee
-                                l[n++] = str;
1abbee
-                                str = NULL;
1abbee
-                                l[n] = NULL;
1abbee
-
1abbee
-                                state = STATE_COMMA;
1abbee
-
1abbee
-                        } else if (t == JSON_ARRAY_CLOSE)
1abbee
-                                state = STATE_END;
1abbee
-                        else
1abbee
-                                return -EBADMSG;
1abbee
-
1abbee
-                        break;
1abbee
-
1abbee
-                case STATE_COMMA:
1abbee
-                        if (t == JSON_COMMA)
1abbee
-                                state = STATE_ITEM;
1abbee
-                        else if (t == JSON_ARRAY_CLOSE)
1abbee
-                                state = STATE_END;
1abbee
-                        else
1abbee
-                                return -EBADMSG;
1abbee
-                        break;
1abbee
-
1abbee
-                case STATE_END:
1abbee
-                        if (t == JSON_END) {
1abbee
-
1abbee
-                                if (strv_isempty(l))
1abbee
-                                        return -EBADMSG;
1abbee
-
1abbee
-                                if (!strv_is_uniq(l))
1abbee
-                                        return -EBADMSG;
1abbee
-
1abbee
-                                l = strv_reverse(l);
1abbee
-
1abbee
-                                *ret = l;
1abbee
-                                l = NULL;
1abbee
-                                return 0;
1abbee
-                        } else
1abbee
-                                return -EBADMSG;
1abbee
-                }
1abbee
-
1abbee
-        }
1abbee
-}
1abbee
-
1abbee
-static const char *dkr_import_current_layer(DkrImport *i) {
1abbee
-        assert(i);
1abbee
-
1abbee
-        if (strv_isempty(i->ancestry))
1abbee
-                return NULL;
1abbee
-
1abbee
-        return i->ancestry[i->current_ancestry];
1abbee
-}
1abbee
-
1abbee
-static const char *dkr_import_current_base_layer(DkrImport *i) {
1abbee
-        assert(i);
1abbee
-
1abbee
-        if (strv_isempty(i->ancestry))
1abbee
-                return NULL;
1abbee
-
1abbee
-        if (i->current_ancestry <= 0)
1abbee
-                return NULL;
1abbee
-
1abbee
-        return i->ancestry[i->current_ancestry-1];
1abbee
-}
1abbee
-
1abbee
-static int dkr_import_add_token(DkrImport *i, ImportJob *j) {
1abbee
-        const char *t;
1abbee
-
1abbee
-        assert(i);
1abbee
-        assert(j);
1abbee
-
1abbee
-        if (i->response_token)
1abbee
-                t = strjoina("Authorization: Token ", i->response_token);
1abbee
-        else
1abbee
-                t = HEADER_TOKEN " true";
1abbee
-
1abbee
-        j->request_header = curl_slist_new("Accept: application/json", t, NULL);
1abbee
-        if (!j->request_header)
1abbee
-                return -ENOMEM;
1abbee
-
1abbee
-        return 0;
1abbee
-}
1abbee
-
1abbee
-static bool dkr_import_is_done(DkrImport *i) {
1abbee
-        assert(i);
1abbee
-        assert(i->images_job);
1abbee
-
1abbee
-        if (i->images_job->state != IMPORT_JOB_DONE)
1abbee
-                return false;
1abbee
-
1abbee
-        if (!i->tags_job || i->tags_job->state != IMPORT_JOB_DONE)
1abbee
-                return false;
1abbee
-
1abbee
-        if (!i->ancestry_job || i->ancestry_job->state != IMPORT_JOB_DONE)
1abbee
-                return false;
1abbee
-
1abbee
-        if (!i->json_job || i->json_job->state != IMPORT_JOB_DONE)
1abbee
-                return false;
1abbee
-
1abbee
-        if (i->layer_job && i->layer_job->state != IMPORT_JOB_DONE)
1abbee
-                return false;
1abbee
-
1abbee
-        if (dkr_import_current_layer(i))
1abbee
-                return false;
1abbee
-
1abbee
-        return true;
1abbee
-}
1abbee
-
1abbee
-static int dkr_import_make_local_copy(DkrImport *i) {
1abbee
-        int r;
1abbee
-
1abbee
-        assert(i);
1abbee
-
1abbee
-        if (!i->local)
1abbee
-                return 0;
1abbee
-
1abbee
-        if (!i->final_path) {
1abbee
-                i->final_path = strjoin(i->image_root, "/.dkr-", i->id, NULL);
1abbee
-                if (!i->final_path)
1abbee
-                        return log_oom();
1abbee
-        }
1abbee
-
1abbee
-        r = import_make_local_copy(i->final_path, i->image_root, i->local, i->force_local);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-
1abbee
-        return 0;
1abbee
-}
1abbee
-
1abbee
-static int dkr_import_job_on_open_disk(ImportJob *j) {
1abbee
-        const char *base;
1abbee
-        DkrImport *i;
1abbee
-        int r;
1abbee
-
1abbee
-        assert(j);
1abbee
-        assert(j->userdata);
1abbee
-
1abbee
-        i = j->userdata;
1abbee
-        assert(i->layer_job == j);
1abbee
-        assert(i->final_path);
1abbee
-        assert(!i->temp_path);
1abbee
-        assert(i->tar_pid <= 0);
1abbee
-
1abbee
-        r = tempfn_random(i->final_path, &i->temp_path);
1abbee
-        if (r < 0)
1abbee
-                return log_oom();
1abbee
-
1abbee
-        mkdir_parents_label(i->temp_path, 0700);
1abbee
-
1abbee
-        base = dkr_import_current_base_layer(i);
1abbee
-        if (base) {
1abbee
-                const char *base_path;
1abbee
-
1abbee
-                base_path = strjoina(i->image_root, "/.dkr-", base);
1abbee
-                r = btrfs_subvol_snapshot(base_path, i->temp_path, false, true);
1abbee
-        } else
1abbee
-                r = btrfs_subvol_make(i->temp_path);
1abbee
-        if (r < 0)
1abbee
-                return log_error_errno(r, "Failed to make btrfs subvolume %s: %m", i->temp_path);
1abbee
-
1abbee
-        j->disk_fd = import_fork_tar(i->temp_path, &i->tar_pid);
1abbee
-        if (j->disk_fd < 0)
1abbee
-                return j->disk_fd;
1abbee
-
1abbee
-        return 0;
1abbee
-}
1abbee
-
1abbee
-static void dkr_import_job_on_progress(ImportJob *j) {
1abbee
-        DkrImport *i;
1abbee
-
1abbee
-        assert(j);
1abbee
-        assert(j->userdata);
1abbee
-
1abbee
-        i = j->userdata;
1abbee
-
1abbee
-        dkr_import_report_progress(
1abbee
-                        i,
1abbee
-                        j == i->images_job                       ? DKR_SEARCHING :
1abbee
-                        j == i->tags_job                         ? DKR_RESOLVING :
1abbee
-                        j == i->ancestry_job || j == i->json_job ? DKR_METADATA :
1abbee
-                                                                   DKR_DOWNLOADING);
1abbee
-}
1abbee
-
1abbee
-static int dkr_import_pull_layer(DkrImport *i) {
1abbee
-        _cleanup_free_ char *path = NULL;
1abbee
-        const char *url, *layer = NULL;
1abbee
-        int r;
1abbee
-
1abbee
-        assert(i);
1abbee
-        assert(!i->layer_job);
1abbee
-        assert(!i->temp_path);
1abbee
-        assert(!i->final_path);
1abbee
-
1abbee
-        for (;;) {
1abbee
-                layer = dkr_import_current_layer(i);
1abbee
-                if (!layer)
1abbee
-                        return 0; /* no more layers */
1abbee
-
1abbee
-                path = strjoin(i->image_root, "/.dkr-", layer, NULL);
1abbee
-                if (!path)
1abbee
-                        return log_oom();
1abbee
-
1abbee
-                if (laccess(path, F_OK) < 0) {
1abbee
-                        if (errno == ENOENT)
1abbee
-                                break;
1abbee
-
1abbee
-                        return log_error_errno(errno, "Failed to check for container: %m");
1abbee
-                }
1abbee
-
1abbee
-                log_info("Layer %s already exists, skipping.", layer);
1abbee
-
1abbee
-                i->current_ancestry++;
1abbee
-
1abbee
-                free(path);
1abbee
-                path = NULL;
1abbee
-        }
1abbee
-
1abbee
-        log_info("Pulling layer %s...", layer);
1abbee
-
1abbee
-        i->final_path = path;
1abbee
-        path = NULL;
1abbee
-
1abbee
-        url = strjoina(PROTOCOL_PREFIX, i->response_registries[0], "/v1/images/", layer, "/layer");
1abbee
-        r = import_job_new(&i->layer_job, url, i->glue, i);
1abbee
-        if (r < 0)
1abbee
-                return log_error_errno(r, "Failed to allocate layer job: %m");
1abbee
-
1abbee
-        r = dkr_import_add_token(i, i->layer_job);
1abbee
-        if (r < 0)
1abbee
-                return log_oom();
1abbee
-
1abbee
-        i->layer_job->on_finished = dkr_import_job_on_finished;
1abbee
-        i->layer_job->on_open_disk = dkr_import_job_on_open_disk;
1abbee
-        i->layer_job->on_progress = dkr_import_job_on_progress;
1abbee
-
1abbee
-        r = import_job_begin(i->layer_job);
1abbee
-        if (r < 0)
1abbee
-                return log_error_errno(r, "Failed to start layer job: %m");
1abbee
-
1abbee
-        return 0;
1abbee
-}
1abbee
-
1abbee
-static void dkr_import_job_on_finished(ImportJob *j) {
1abbee
-        DkrImport *i;
1abbee
-        int r;
1abbee
-
1abbee
-        assert(j);
1abbee
-        assert(j->userdata);
1abbee
-
1abbee
-        i = j->userdata;
1abbee
-        if (j->error != 0) {
1abbee
-                if (j == i->images_job)
1abbee
-                        log_error_errno(j->error, "Failed to retrieve images list. (Wrong index URL?)");
1abbee
-                else if (j == i->tags_job)
1abbee
-                        log_error_errno(j->error, "Failed to retrieve tags list.");
1abbee
-                else if (j == i->ancestry_job)
1abbee
-                        log_error_errno(j->error, "Failed to retrieve ancestry list.");
1abbee
-                else if (j == i->json_job)
1abbee
-                        log_error_errno(j->error, "Failed to retrieve json data.");
1abbee
-                else
1abbee
-                        log_error_errno(j->error, "Failed to retrieve layer data.");
1abbee
-
1abbee
-                r = j->error;
1abbee
-                goto finish;
1abbee
-        }
1abbee
-
1abbee
-        if (i->images_job == j) {
1abbee
-                const char *url;
1abbee
-
1abbee
-                assert(!i->tags_job);
1abbee
-                assert(!i->ancestry_job);
1abbee
-                assert(!i->json_job);
1abbee
-                assert(!i->layer_job);
1abbee
-
1abbee
-                if (strv_isempty(i->response_registries)) {
1abbee
-                        r = -EBADMSG;
1abbee
-                        log_error("Didn't get registry information.");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                log_info("Index lookup succeeded, directed to registry %s.", i->response_registries[0]);
1abbee
-                dkr_import_report_progress(i, DKR_RESOLVING);
1abbee
-
1abbee
-                url = strjoina(PROTOCOL_PREFIX, i->response_registries[0], "/v1/repositories/", i->name, "/tags/", i->tag);
1abbee
-                r = import_job_new(&i->tags_job, url, i->glue, i);
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to allocate tags job: %m");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                r = dkr_import_add_token(i, i->tags_job);
1abbee
-                if (r < 0) {
1abbee
-                        log_oom();
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                i->tags_job->on_finished = dkr_import_job_on_finished;
1abbee
-                i->tags_job->on_progress = dkr_import_job_on_progress;
1abbee
-
1abbee
-                r = import_job_begin(i->tags_job);
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to start tags job: %m");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-        } else if (i->tags_job == j) {
1abbee
-                const char *url;
1abbee
-                char *id = NULL;
1abbee
-
1abbee
-                assert(!i->ancestry_job);
1abbee
-                assert(!i->json_job);
1abbee
-                assert(!i->layer_job);
1abbee
-
1abbee
-                r = parse_id(j->payload, j->payload_size, &id;;
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to parse JSON id.");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                free(i->id);
1abbee
-                i->id = id;
1abbee
-
1abbee
-                log_info("Tag lookup succeeded, resolved to layer %s.", i->id);
1abbee
-                dkr_import_report_progress(i, DKR_METADATA);
1abbee
-
1abbee
-                url = strjoina(PROTOCOL_PREFIX, i->response_registries[0], "/v1/images/", i->id, "/ancestry");
1abbee
-                r = import_job_new(&i->ancestry_job, url, i->glue, i);
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to allocate ancestry job: %m");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                r = dkr_import_add_token(i, i->ancestry_job);
1abbee
-                if (r < 0) {
1abbee
-                        log_oom();
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                i->ancestry_job->on_finished = dkr_import_job_on_finished;
1abbee
-                i->ancestry_job->on_progress = dkr_import_job_on_progress;
1abbee
-
1abbee
-                url = strjoina(PROTOCOL_PREFIX, i->response_registries[0], "/v1/images/", i->id, "/json");
1abbee
-                r = import_job_new(&i->json_job, url, i->glue, i);
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to allocate json job: %m");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                r = dkr_import_add_token(i, i->json_job);
1abbee
-                if (r < 0) {
1abbee
-                        log_oom();
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                i->json_job->on_finished = dkr_import_job_on_finished;
1abbee
-                i->json_job->on_progress = dkr_import_job_on_progress;
1abbee
-
1abbee
-                r = import_job_begin(i->ancestry_job);
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to start ancestry job: %m");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                r = import_job_begin(i->json_job);
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to start json job: %m");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-        } else if (i->ancestry_job == j) {
1abbee
-                char **ancestry = NULL, **k;
1abbee
-                unsigned n;
1abbee
-
1abbee
-                assert(!i->layer_job);
1abbee
-
1abbee
-                r = parse_ancestry(j->payload, j->payload_size, &ancestry);
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to parse JSON id.");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                n = strv_length(ancestry);
1abbee
-                if (n <= 0 || !streq(ancestry[n-1], i->id)) {
1abbee
-                        log_error("Ancestry doesn't end in main layer.");
1abbee
-                        strv_free(ancestry);
1abbee
-                        r = -EBADMSG;
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                log_info("Ancestor lookup succeeded, requires layers:\n");
1abbee
-                STRV_FOREACH(k, ancestry)
1abbee
-                        log_info("\t%s", *k);
1abbee
-
1abbee
-                strv_free(i->ancestry);
1abbee
-                i->ancestry = ancestry;
1abbee
-                i->n_ancestry = n;
1abbee
-                i->current_ancestry = 0;
1abbee
-
1abbee
-                dkr_import_report_progress(i, DKR_DOWNLOADING);
1abbee
-
1abbee
-                r = dkr_import_pull_layer(i);
1abbee
-                if (r < 0)
1abbee
-                        goto finish;
1abbee
-
1abbee
-        } else if (i->layer_job == j) {
1abbee
-                assert(i->temp_path);
1abbee
-                assert(i->final_path);
1abbee
-
1abbee
-                j->disk_fd = safe_close(j->disk_fd);
1abbee
-
1abbee
-                if (i->tar_pid > 0) {
1abbee
-                        r = wait_for_terminate_and_warn("tar", i->tar_pid, true);
1abbee
-                        i->tar_pid = 0;
1abbee
-                        if (r < 0)
1abbee
-                                goto finish;
1abbee
-                }
1abbee
-
1abbee
-                r = aufs_resolve(i->temp_path);
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to resolve aufs whiteouts: %m");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                r = btrfs_subvol_set_read_only(i->temp_path, true);
1abbee
-                if (r < 0) {
1abbee
-                        log_error_errno(r, "Failed to mark snapshot read-only: %m");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                if (rename(i->temp_path, i->final_path) < 0) {
1abbee
-                        log_error_errno(errno, "Failed to rename snaphsot: %m");
1abbee
-                        goto finish;
1abbee
-                }
1abbee
-
1abbee
-                log_info("Completed writing to layer %s.", i->final_path);
1abbee
-
1abbee
-                i->layer_job = import_job_unref(i->layer_job);
1abbee
-                free(i->temp_path);
1abbee
-                i->temp_path = NULL;
1abbee
-                free(i->final_path);
1abbee
-                i->final_path = NULL;
1abbee
-
1abbee
-                i->current_ancestry ++;
1abbee
-                r = dkr_import_pull_layer(i);
1abbee
-                if (r < 0)
1abbee
-                        goto finish;
1abbee
-
1abbee
-        } else if (i->json_job != j)
1abbee
-                assert_not_reached("Got finished event for unknown curl object");
1abbee
-
1abbee
-        if (!dkr_import_is_done(i))
1abbee
-                return;
1abbee
-
1abbee
-        dkr_import_report_progress(i, DKR_COPYING);
1abbee
-
1abbee
-        r = dkr_import_make_local_copy(i);
1abbee
-        if (r < 0)
1abbee
-                goto finish;
1abbee
-
1abbee
-        r = 0;
1abbee
-
1abbee
-finish:
1abbee
-        if (i->on_finished)
1abbee
-                i->on_finished(i, r, i->userdata);
1abbee
-        else
1abbee
-                sd_event_exit(i->event, r);
1abbee
-}
1abbee
-
1abbee
-static int dkr_import_job_on_header(ImportJob *j, const char *header, size_t sz)  {
1abbee
-        _cleanup_free_ char *registry = NULL;
1abbee
-        char *token;
1abbee
-        DkrImport *i;
1abbee
-        int r;
1abbee
-
1abbee
-        assert(j);
1abbee
-        assert(j->userdata);
1abbee
-
1abbee
-        i = j->userdata;
1abbee
-
1abbee
-        r = curl_header_strdup(header, sz, HEADER_TOKEN, &token);
1abbee
-        if (r < 0)
1abbee
-                return log_oom();
1abbee
-        if (r > 0) {
1abbee
-                free(i->response_token);
1abbee
-                i->response_token = token;
1abbee
-                return 0;
1abbee
-        }
1abbee
-
1abbee
-        r = curl_header_strdup(header, sz, HEADER_REGISTRY, &registry);
1abbee
-        if (r < 0)
1abbee
-                return log_oom();
1abbee
-        if (r > 0) {
1abbee
-                char **l, **k;
1abbee
-
1abbee
-                l = strv_split(registry, ",");
1abbee
-                if (!l)
1abbee
-                        return log_oom();
1abbee
-
1abbee
-                STRV_FOREACH(k, l) {
1abbee
-                        if (!hostname_is_valid(*k)) {
1abbee
-                                log_error("Registry hostname is not valid.");
1abbee
-                                strv_free(l);
1abbee
-                                return -EBADMSG;
1abbee
-                        }
1abbee
-                }
1abbee
-
1abbee
-                strv_free(i->response_registries);
1abbee
-                i->response_registries = l;
1abbee
-        }
1abbee
-
1abbee
-        return 0;
1abbee
-}
1abbee
-
1abbee
-int dkr_import_pull(DkrImport *i, const char *name, const char *tag, const char *local, bool force_local) {
1abbee
-        const char *url;
1abbee
-        int r;
1abbee
-
1abbee
-        assert(i);
1abbee
-
1abbee
-        if (!dkr_name_is_valid(name))
1abbee
-                return -EINVAL;
1abbee
-
1abbee
-        if (tag && !dkr_tag_is_valid(tag))
1abbee
-                return -EINVAL;
1abbee
-
1abbee
-        if (local && !machine_name_is_valid(local))
1abbee
-                return -EINVAL;
1abbee
-
1abbee
-        if (i->images_job)
1abbee
-                return -EBUSY;
1abbee
-
1abbee
-        if (!tag)
1abbee
-                tag = "latest";
1abbee
-
1abbee
-        r = free_and_strdup(&i->local, local);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-        i->force_local = force_local;
1abbee
-
1abbee
-        r = free_and_strdup(&i->name, name);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-        r = free_and_strdup(&i->tag, tag);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-
1abbee
-        url = strjoina(i->index_url, "/v1/repositories/", name, "/images");
1abbee
-
1abbee
-        r = import_job_new(&i->images_job, url, i->glue, i);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-
1abbee
-        r = dkr_import_add_token(i, i->images_job);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-
1abbee
-        i->images_job->on_finished = dkr_import_job_on_finished;
1abbee
-        i->images_job->on_header = dkr_import_job_on_header;
1abbee
-        i->images_job->on_progress = dkr_import_job_on_progress;
1abbee
-
1abbee
-        return import_job_begin(i->images_job);
1abbee
-}
1abbee
diff --git a/src/import/import-dkr.h b/src/import/import-dkr.h
1abbee
deleted file mode 100644
181b3f
index 633c76796..000000000
1abbee
--- a/src/import/import-dkr.h
1abbee
+++ /dev/null
1abbee
@@ -1,36 +0,0 @@
1abbee
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
1abbee
-
1abbee
-/***
1abbee
-  This file is part of systemd.
1abbee
-
1abbee
-  Copyright 2014 Lennart Poettering
1abbee
-
1abbee
-  systemd is free software; you can redistribute it and/or modify it
1abbee
-  under the terms of the GNU Lesser General Public License as published by
1abbee
-  the Free Software Foundation; either version 2.1 of the License, or
1abbee
-  (at your option) any later version.
1abbee
-
1abbee
-  systemd is distributed in the hope that it will be useful, but
1abbee
-  WITHOUT ANY WARRANTY; without even the implied warranty of
1abbee
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1abbee
-  Lesser General Public License for more details.
1abbee
-
1abbee
-  You should have received a copy of the GNU Lesser General Public License
1abbee
-  along with systemd; If not, see <http://www.gnu.org/licenses/>.
1abbee
-***/
1abbee
-
1abbee
-#pragma once
1abbee
-
1abbee
-#include "sd-event.h"
1abbee
-#include "util.h"
1abbee
-
1abbee
-typedef struct DkrImport DkrImport;
1abbee
-
1abbee
-typedef void (*DkrImportFinished)(DkrImport *import, int error, void *userdata);
1abbee
-
1abbee
-int dkr_import_new(DkrImport **import, sd_event *event, const char *index_url, const char *image_root, DkrImportFinished on_finished, void *userdata);
1abbee
-DkrImport* dkr_import_unref(DkrImport *import);
1abbee
-
1abbee
-DEFINE_TRIVIAL_CLEANUP_FUNC(DkrImport*, dkr_import_unref);
1abbee
-
1abbee
-int dkr_import_pull(DkrImport *import, const char *name, const char *tag, const char *local, bool force_local);
1abbee
diff --git a/src/import/importd.c b/src/import/importd.c
181b3f
index 1222bf3cd..9aaf991f8 100644
1abbee
--- a/src/import/importd.c
1abbee
+++ b/src/import/importd.c
1abbee
@@ -38,7 +38,6 @@ typedef struct Manager Manager;
1abbee
 typedef enum TransferType {
1abbee
         TRANSFER_TAR,
1abbee
         TRANSFER_RAW,
1abbee
-        TRANSFER_DKR,
1abbee
         _TRANSFER_TYPE_MAX,
1abbee
         _TRANSFER_TYPE_INVALID = -1,
1abbee
 } TransferType;
1abbee
@@ -56,8 +55,6 @@ struct Transfer {
1abbee
         char *local;
1abbee
         bool force_local;
1abbee
 
1abbee
-        char *dkr_index_url;
1abbee
-
1abbee
         pid_t pid;
1abbee
 
1abbee
         int log_fd;
1abbee
@@ -91,7 +88,6 @@ struct Manager {
1abbee
 static const char* const transfer_type_table[_TRANSFER_TYPE_MAX] = {
1abbee
         [TRANSFER_TAR] = "tar",
1abbee
         [TRANSFER_RAW] = "raw",
1abbee
-        [TRANSFER_DKR] = "dkr",
1abbee
 };
1abbee
 
1abbee
 DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(transfer_type, TransferType);
1abbee
@@ -108,7 +104,6 @@ static Transfer *transfer_unref(Transfer *t) {
1abbee
 
1abbee
         free(t->remote);
1abbee
         free(t->local);
1abbee
-        free(t->dkr_index_url);
1abbee
         free(t->object_path);
1abbee
 
1abbee
         if (t->pid > 0) {
1abbee
@@ -355,7 +350,6 @@ static int transfer_start(Transfer *t) {
1abbee
                         "--verify",
1abbee
                         NULL, /* verify argument */
1abbee
                         NULL, /* maybe --force */
1abbee
-                        NULL, /* maybe --dkr-index-url */
1abbee
                         NULL, /* the actual URL */
1abbee
                         NULL, /* remote */
1abbee
                         NULL, /* local */
1abbee
@@ -410,11 +404,6 @@ static int transfer_start(Transfer *t) {
1abbee
                 if (t->force_local)
1abbee
                         cmd[k++] = "--force";
1abbee
 
1abbee
-                if (t->dkr_index_url) {
1abbee
-                        cmd[k++] = "--dkr-index-url";
1abbee
-                        cmd[k++] = t->dkr_index_url;
1abbee
-                }
1abbee
-
1abbee
                 cmd[k++] = t->remote;
1abbee
                 if (t->local)
1abbee
                         cmd[k++] = t->local;
1abbee
@@ -624,7 +613,7 @@ static int manager_new(Manager **ret) {
1abbee
         return 0;
1abbee
 }
1abbee
 
1abbee
-static Transfer *manager_find(Manager *m, TransferType type, const char *dkr_index_url, const char *remote) {
1abbee
+static Transfer *manager_find(Manager *m, TransferType type, const char *remote) {
1abbee
         Transfer *t;
1abbee
         Iterator i;
1abbee
 
1abbee
@@ -635,8 +624,7 @@ static Transfer *manager_find(Manager *m, TransferType type, const char *dkr_ind
1abbee
         HASHMAP_FOREACH(t, m->transfers, i) {
1abbee
 
1abbee
                 if (t->type == type &&
1abbee
-                    streq_ptr(t->remote, remote) &&
1abbee
-                    streq_ptr(t->dkr_index_url, dkr_index_url))
1abbee
+                    streq_ptr(t->remote, remote))
1abbee
                         return t;
1abbee
         }
1abbee
 
1abbee
@@ -689,7 +677,7 @@ static int method_pull_tar_or_raw(sd_bus *bus, sd_bus_message *msg, void *userda
1abbee
 
1abbee
         type = streq_ptr(sd_bus_message_get_member(msg), "PullTar") ? TRANSFER_TAR : TRANSFER_RAW;
1abbee
 
1abbee
-        if (manager_find(m, type, NULL, remote))
1abbee
+        if (manager_find(m, type, remote))
1abbee
                 return sd_bus_error_setf(error, BUS_ERROR_TRANSFER_IN_PROGRESS, "Transfer for %s already in progress.", remote);
1abbee
 
1abbee
         r = transfer_new(m, &t);
1abbee
@@ -719,98 +707,6 @@ static int method_pull_tar_or_raw(sd_bus *bus, sd_bus_message *msg, void *userda
1abbee
         return sd_bus_reply_method_return(msg, "uo", id, object);
1abbee
 }
1abbee
 
1abbee
-static int method_pull_dkr(sd_bus *bus, sd_bus_message *msg, void *userdata, sd_bus_error *error) {
1abbee
-        _cleanup_(transfer_unrefp) Transfer *t = NULL;
1abbee
-        const char *index_url, *remote, *tag, *local, *verify, *object;
1abbee
-        Manager *m = userdata;
1abbee
-        ImportVerify v;
1abbee
-        int force, r;
1abbee
-        uint32_t id;
1abbee
-
1abbee
-        assert(bus);
1abbee
-        assert(msg);
1abbee
-        assert(m);
1abbee
-
1abbee
-        r = bus_verify_polkit_async(
1abbee
-                        msg,
1abbee
-                        CAP_SYS_ADMIN,
1abbee
-                        "org.freedesktop.import1.pull",
1abbee
-                        false,
1abbee
-                        &m->polkit_registry,
1abbee
-                        error);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-        if (r == 0)
1abbee
-                return 1; /* Will call us back */
1abbee
-
1abbee
-        r = sd_bus_message_read(msg, "sssssb", &index_url, &remote, &tag, &local, &verify, &force);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-
1abbee
-        if (isempty(index_url))
1abbee
-                index_url = DEFAULT_DKR_INDEX_URL;
1abbee
-        if (!index_url)
1abbee
-                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Index URL must be specified.");
1abbee
-        if (!http_url_is_valid(index_url))
1abbee
-                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Index URL %s is invalid", index_url);
1abbee
-
1abbee
-        if (!dkr_name_is_valid(remote))
1abbee
-                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Remote name %s is not valid", remote);
1abbee
-
1abbee
-        if (isempty(tag))
1abbee
-                tag = "latest";
1abbee
-        else if (!dkr_tag_is_valid(tag))
1abbee
-                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Tag %s is not valid", tag);
1abbee
-
1abbee
-        if (isempty(local))
1abbee
-                local = NULL;
1abbee
-        else if (!machine_name_is_valid(local))
1abbee
-                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Local name %s is invalid", local);
1abbee
-
1abbee
-        if (isempty(verify))
1abbee
-                v = IMPORT_VERIFY_SIGNATURE;
1abbee
-        else
1abbee
-                v = import_verify_from_string(verify);
1abbee
-        if (v < 0)
1abbee
-                return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unknown verification mode %s", verify);
1abbee
-
1abbee
-        if (v != IMPORT_VERIFY_NO)
1abbee
-                return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "DKR does not support verification.");
1abbee
-
1abbee
-        if (manager_find(m, TRANSFER_DKR, index_url, remote))
1abbee
-                return sd_bus_error_setf(error, BUS_ERROR_TRANSFER_IN_PROGRESS, "Transfer for %s already in progress.", remote);
1abbee
-
1abbee
-        r = transfer_new(m, &t);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-
1abbee
-        t->type = TRANSFER_DKR;
1abbee
-        t->verify = v;
1abbee
-        t->force_local = force;
1abbee
-
1abbee
-        t->dkr_index_url = strdup(index_url);
1abbee
-        if (!t->dkr_index_url)
1abbee
-                return -ENOMEM;
1abbee
-
1abbee
-        t->remote = strjoin(remote, ":", tag, NULL);
1abbee
-        if (!t->remote)
1abbee
-                return -ENOMEM;
1abbee
-
1abbee
-        t->local = strdup(local);
1abbee
-        if (!t->local)
1abbee
-                return -ENOMEM;
1abbee
-
1abbee
-        r = transfer_start(t);
1abbee
-        if (r < 0)
1abbee
-                return r;
1abbee
-
1abbee
-        object = t->object_path;
1abbee
-        id = t->id;
1abbee
-        t = NULL;
1abbee
-
1abbee
-        return sd_bus_reply_method_return(msg, "uo", id, object);
1abbee
-}
1abbee
-
1abbee
 static int method_list_transfers(sd_bus *bus, sd_bus_message *msg, void *userdata, sd_bus_error *error) {
1abbee
         _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
1abbee
         Manager *m = userdata;
1abbee
@@ -956,7 +852,6 @@ static const sd_bus_vtable manager_vtable[] = {
1abbee
         SD_BUS_VTABLE_START(0),
1abbee
         SD_BUS_METHOD("PullTar", "sssb", "uo", method_pull_tar_or_raw, SD_BUS_VTABLE_UNPRIVILEGED),
1abbee
         SD_BUS_METHOD("PullRaw", "sssb", "uo", method_pull_tar_or_raw, SD_BUS_VTABLE_UNPRIVILEGED),
1abbee
-        SD_BUS_METHOD("PullDkr", "sssssb", "uo", method_pull_dkr, SD_BUS_VTABLE_UNPRIVILEGED),
1abbee
         SD_BUS_METHOD("ListTransfers", NULL, "a(usssdo)", method_list_transfers, SD_BUS_VTABLE_UNPRIVILEGED),
1abbee
         SD_BUS_METHOD("CancelTransfer", "u", NULL, method_cancel_transfer, SD_BUS_VTABLE_UNPRIVILEGED),
1abbee
         SD_BUS_SIGNAL("TransferNew", "uo", 0),
1abbee
diff --git a/src/import/org.freedesktop.import1.conf b/src/import/org.freedesktop.import1.conf
181b3f
index ae36af422..ed2539a03 100644
1abbee
--- a/src/import/org.freedesktop.import1.conf
1abbee
+++ b/src/import/org.freedesktop.import1.conf
181b3f
@@ -52,10 +52,6 @@
181b3f
                        send_interface="org.freedesktop.import1.Manager"
1abbee
                        send_member="PullRaw"/>
1abbee
 
181b3f
-                
1abbee
-                       send_interface="org.freedesktop.import1.Manager"
1abbee
-                       send_member="PullDkr"/>
1abbee
-
181b3f
                 
1abbee
                        send_interface="org.freedesktop.import1.Transfer"
1abbee
                        send_member="Cancel"/>
1abbee
diff --git a/src/import/pull.c b/src/import/pull.c
181b3f
index ee3ff6803..9cb10880f 100644
1abbee
--- a/src/import/pull.c
1abbee
+++ b/src/import/pull.c
1abbee
@@ -28,13 +28,11 @@
1abbee
 #include "machine-image.h"
1abbee
 #include "import-tar.h"
1abbee
 #include "import-raw.h"
1abbee
-#include "import-dkr.h"
1abbee
 #include "import-util.h"
1abbee
 
1abbee
 static bool arg_force = false;
1abbee
 static const char *arg_image_root = "/var/lib/machines";
1abbee
 static ImportVerify arg_verify = IMPORT_VERIFY_SIGNATURE;
1abbee
-static const char* arg_dkr_index_url = DEFAULT_DKR_INDEX_URL;
1abbee
 
1abbee
 static int interrupt_signal_handler(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
1abbee
         log_notice("Transfer aborted.");
1abbee
@@ -214,107 +212,6 @@ static int pull_raw(int argc, char *argv[], void *userdata) {
1abbee
         return -r;
1abbee
 }
1abbee
 
1abbee
-static void on_dkr_finished(DkrImport *import, int error, void *userdata) {
1abbee
-        sd_event *event = userdata;
1abbee
-        assert(import);
1abbee
-
1abbee
-        if (error == 0)
1abbee
-                log_info("Operation completed successfully.");
1abbee
-
1abbee
-        sd_event_exit(event, abs(error));
1abbee
-}
1abbee
-
1abbee
-static int pull_dkr(int argc, char *argv[], void *userdata) {
1abbee
-        _cleanup_(dkr_import_unrefp) DkrImport *import = NULL;
1abbee
-        _cleanup_event_unref_ sd_event *event = NULL;
1abbee
-        const char *name, *tag, *local;
1abbee
-        int r;
1abbee
-
1abbee
-        if (!arg_dkr_index_url) {
1abbee
-                log_error("Please specify an index URL with --dkr-index-url=");
1abbee
-                return -EINVAL;
1abbee
-        }
1abbee
-
1abbee
-        if (arg_verify != IMPORT_VERIFY_NO) {
1abbee
-                log_error("Imports from dkr do not support image verification, please pass --verify=no.");
1abbee
-                return -EINVAL;
1abbee
-        }
1abbee
-
1abbee
-        tag = strchr(argv[1], ':');
1abbee
-        if (tag) {
1abbee
-                name = strndupa(argv[1], tag - argv[1]);
1abbee
-                tag++;
1abbee
-        } else {
1abbee
-                name = argv[1];
1abbee
-                tag = "latest";
1abbee
-        }
1abbee
-
1abbee
-        if (!dkr_name_is_valid(name)) {
1abbee
-                log_error("Remote name '%s' is not valid.", name);
1abbee
-                return -EINVAL;
1abbee
-        }
1abbee
-
1abbee
-        if (!dkr_tag_is_valid(tag)) {
1abbee
-                log_error("Tag name '%s' is not valid.", tag);
1abbee
-                return -EINVAL;
1abbee
-        }
1abbee
-
1abbee
-        if (argc >= 3)
1abbee
-                local = argv[2];
1abbee
-        else {
1abbee
-                local = strchr(name, '/');
1abbee
-                if (local)
1abbee
-                        local++;
1abbee
-                else
1abbee
-                        local = name;
1abbee
-        }
1abbee
-
1abbee
-        if (isempty(local) || streq(local, "-"))
1abbee
-                local = NULL;
1abbee
-
1abbee
-        if (local) {
1abbee
-                if (!machine_name_is_valid(local)) {
1abbee
-                        log_error("Local image name '%s' is not valid.", local);
1abbee
-                        return -EINVAL;
1abbee
-                }
1abbee
-
1abbee
-                if (!arg_force) {
1abbee
-                        r = image_find(local, NULL);
1abbee
-                        if (r < 0)
1abbee
-                                return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
1abbee
-                        else if (r > 0) {
1abbee
-                                log_error_errno(EEXIST, "Image '%s' already exists.", local);
1abbee
-                                return -EEXIST;
1abbee
-                        }
1abbee
-                }
1abbee
-
1abbee
-                log_info("Pulling '%s' with tag '%s', saving as '%s'.", name, tag, local);
1abbee
-        } else
1abbee
-                log_info("Pulling '%s' with tag '%s'.", name, tag);
1abbee
-
1abbee
-        r = sd_event_default(&event);
1abbee
-        if (r < 0)
1abbee
-                return log_error_errno(r, "Failed to allocate event loop: %m");
1abbee
-
1abbee
-        assert_se(sigprocmask_many(SIG_BLOCK, SIGTERM, SIGINT, -1) == 0);
1abbee
-        sd_event_add_signal(event, NULL, SIGTERM, interrupt_signal_handler,  NULL);
1abbee
-        sd_event_add_signal(event, NULL, SIGINT, interrupt_signal_handler, NULL);
1abbee
-
1abbee
-        r = dkr_import_new(&import, event, arg_dkr_index_url, arg_image_root, on_dkr_finished, event);
1abbee
-        if (r < 0)
1abbee
-                return log_error_errno(r, "Failed to allocate importer: %m");
1abbee
-
1abbee
-        r = dkr_import_pull(import, name, tag, local, arg_force);
1abbee
-        if (r < 0)
1abbee
-                return log_error_errno(r, "Failed to pull image: %m");
1abbee
-
1abbee
-        r = sd_event_loop(event);
1abbee
-        if (r < 0)
1abbee
-                return log_error_errno(r, "Failed to run event loop: %m");
1abbee
-
1abbee
-        log_info("Exiting.");
1abbee
-        return -r;
1abbee
-}
1abbee
 
1abbee
 static int help(int argc, char *argv[], void *userdata) {
1abbee
 
1abbee
@@ -326,11 +223,9 @@ static int help(int argc, char *argv[], void *userdata) {
1abbee
                "     --verify=                Verify downloaded image, one of: 'no',\n"
1abbee
                "                              'checksum', 'signature'.\n"
1abbee
                "     --image-root=            Image root directory\n"
1abbee
-               "     --dkr-index-url=URL      Specify index URL to use for downloads\n\n"
1abbee
                "Commands:\n"
1abbee
                "  tar URL [NAME]              Download a TAR image\n"
1abbee
-               "  raw URL [NAME]              Download a RAW image\n"
1abbee
-               "  dkr REMOTE [NAME]           Download a DKR image\n",
1abbee
+               "  raw URL [NAME]              Download a RAW image\n",
1abbee
                program_invocation_short_name);
1abbee
 
1abbee
         return 0;
1abbee
@@ -341,7 +236,6 @@ static int parse_argv(int argc, char *argv[]) {
1abbee
         enum {
1abbee
                 ARG_VERSION = 0x100,
1abbee
                 ARG_FORCE,
1abbee
-                ARG_DKR_INDEX_URL,
1abbee
                 ARG_IMAGE_ROOT,
1abbee
                 ARG_VERIFY,
1abbee
         };
1abbee
@@ -350,7 +244,6 @@ static int parse_argv(int argc, char *argv[]) {
1abbee
                 { "help",            no_argument,       NULL, 'h'                 },
1abbee
                 { "version",         no_argument,       NULL, ARG_VERSION         },
1abbee
                 { "force",           no_argument,       NULL, ARG_FORCE           },
1abbee
-                { "dkr-index-url",   required_argument, NULL, ARG_DKR_INDEX_URL   },
1abbee
                 { "image-root",      required_argument, NULL, ARG_IMAGE_ROOT      },
1abbee
                 { "verify",          required_argument, NULL, ARG_VERIFY          },
1abbee
                 {}
1abbee
@@ -377,15 +270,6 @@ static int parse_argv(int argc, char *argv[]) {
1abbee
                         arg_force = true;
1abbee
                         break;
1abbee
 
1abbee
-                case ARG_DKR_INDEX_URL:
1abbee
-                        if (!http_url_is_valid(optarg)) {
1abbee
-                                log_error("Index URL is not valid: %s", optarg);
1abbee
-                                return -EINVAL;
1abbee
-                        }
1abbee
-
1abbee
-                        arg_dkr_index_url = optarg;
1abbee
-                        break;
1abbee
-
1abbee
                 case ARG_IMAGE_ROOT:
1abbee
                         arg_image_root = optarg;
1abbee
                         break;
1abbee
@@ -415,7 +299,6 @@ static int import_main(int argc, char *argv[]) {
1abbee
                 { "help", VERB_ANY, VERB_ANY, 0, help     },
1abbee
                 { "tar",  2,        3,        0, pull_tar },
1abbee
                 { "raw",  2,        3,        0, pull_raw },
1abbee
-                { "dkr",  2,        3,        0, pull_dkr },
1abbee
                 {}
1abbee
         };
1abbee
 
1abbee
diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c
181b3f
index ef1214a66..cfd3162fb 100644
1abbee
--- a/src/machine/machinectl.c
1abbee
+++ b/src/machine/machinectl.c
1abbee
@@ -77,7 +77,6 @@ static unsigned arg_lines = 10;
1abbee
 static OutputMode arg_output = OUTPUT_SHORT;
1abbee
 static bool arg_force = false;
1abbee
 static ImportVerify arg_verify = IMPORT_VERIFY_SIGNATURE;
1abbee
-static const char* arg_dkr_index_url = NULL;
1abbee
 
1abbee
 static void pager_open_if_enabled(void) {
1abbee
 
1abbee
@@ -1998,78 +1997,6 @@ static int pull_raw(int argc, char *argv[], void *userdata) {
1abbee
         return pull_image_common(bus, m);
1abbee
 }
1abbee
 
1abbee
-static int pull_dkr(int argc, char *argv[], void *userdata) {
1abbee
-        _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
1abbee
-        const char *local, *remote, *tag;
1abbee
-        sd_bus *bus = userdata;
1abbee
-        int r;
1abbee
-
1abbee
-        if (arg_verify != IMPORT_VERIFY_NO) {
1abbee
-                log_error("Imports from DKR do not support image verification, please pass --verify=no.");
1abbee
-                return -EINVAL;
1abbee
-        }
1abbee
-
1abbee
-        remote = argv[1];
1abbee
-        tag = strchr(remote, ':');
1abbee
-        if (tag) {
1abbee
-                remote = strndupa(remote, tag - remote);
1abbee
-                tag++;
1abbee
-        }
1abbee
-
1abbee
-        if (!dkr_name_is_valid(remote)) {
1abbee
-                log_error("DKR name '%s' is invalid.", remote);
1abbee
-                return -EINVAL;
1abbee
-        }
1abbee
-        if (tag && !dkr_tag_is_valid(tag)) {
1abbee
-                log_error("DKR tag '%s' is invalid.", remote);
1abbee
-                return -EINVAL;
1abbee
-        }
1abbee
-
1abbee
-        if (argc >= 3)
1abbee
-                local = argv[2];
1abbee
-        else {
1abbee
-                local = strchr(remote, '/');
1abbee
-                if (local)
1abbee
-                        local++;
1abbee
-                else
1abbee
-                        local = remote;
1abbee
-        }
1abbee
-
1abbee
-        if (isempty(local) || streq(local, "-"))
1abbee
-                local = NULL;
1abbee
-
1abbee
-        if (local) {
1abbee
-                if (!machine_name_is_valid(local)) {
1abbee
-                        log_error("Local name %s is not a suitable machine name.", local);
1abbee
-                        return -EINVAL;
1abbee
-                }
1abbee
-        }
1abbee
-
1abbee
-        r = sd_bus_message_new_method_call(
1abbee
-                        bus,
1abbee
-                        &m,
1abbee
-                        "org.freedesktop.import1",
1abbee
-                        "/org/freedesktop/import1",
1abbee
-                        "org.freedesktop.import1.Manager",
1abbee
-                        "PullDkr");
1abbee
-        if (r < 0)
1abbee
-                return bus_log_create_error(r);
1abbee
-
1abbee
-        r = sd_bus_message_append(
1abbee
-                        m,
1abbee
-                        "sssssb",
1abbee
-                        arg_dkr_index_url,
1abbee
-                        remote,
1abbee
-                        tag,
1abbee
-                        local,
1abbee
-                        import_verify_to_string(arg_verify),
1abbee
-                        arg_force);
1abbee
-        if (r < 0)
1abbee
-                return bus_log_create_error(r);
1abbee
-
1abbee
-        return pull_image_common(bus, m);
1abbee
-}
1abbee
-
1abbee
 typedef struct TransferInfo {
1abbee
         uint32_t id;
1abbee
         const char *type;
1abbee
@@ -2237,8 +2164,6 @@ static int help(int argc, char *argv[], void *userdata) {
1abbee
                "      --verify=MODE           Verification mode for downloaded images (no,\n"
1abbee
                "                              checksum, signature)\n"
1abbee
                "      --force                 Download image even if already exists\n"
1abbee
-               "      --dkr-index-url=URL     Specify the index URL to use for DKR image\n"
1abbee
-               "                              downloads\n\n"
1abbee
                "Machine Commands:\n"
1abbee
                "  list                        List running VMs and containers\n"
1abbee
                "  status NAME...              Show VM/container details\n"
1abbee
@@ -2265,7 +2190,6 @@ static int help(int argc, char *argv[], void *userdata) {
1abbee
                "Image Transfer Commands:\n"
1abbee
                "  pull-tar URL [NAME]         Download a TAR container image\n"
1abbee
                "  pull-raw URL [NAME]         Download a RAW container or VM image\n"
1abbee
-               "  pull-dkr REMOTE [NAME]      Download a DKR container image\n"
1abbee
                "  list-transfers              Show list of downloads in progress\n"
1abbee
                "  cancel-transfer             Cancel a download\n"
1abbee
                , program_invocation_short_name);
1abbee
@@ -2284,8 +2208,7 @@ static int parse_argv(int argc, char *argv[]) {
1abbee
                 ARG_MKDIR,
1abbee
                 ARG_NO_ASK_PASSWORD,
1abbee
                 ARG_VERIFY,
1abbee
-                ARG_FORCE,
1abbee
-                ARG_DKR_INDEX_URL,
1abbee
+                ARG_FORCE
1abbee
         };
1abbee
 
1abbee
         static const struct option options[] = {
1abbee
@@ -2308,7 +2231,6 @@ static int parse_argv(int argc, char *argv[]) {
1abbee
                 { "no-ask-password", no_argument,       NULL, ARG_NO_ASK_PASSWORD },
1abbee
                 { "verify",          required_argument, NULL, ARG_VERIFY          },
1abbee
                 { "force",           no_argument,       NULL, ARG_FORCE           },
1abbee
-                { "dkr-index-url",   required_argument, NULL, ARG_DKR_INDEX_URL   },
1abbee
                 {}
1abbee
         };
1abbee
 
1abbee
@@ -2421,15 +2343,6 @@ static int parse_argv(int argc, char *argv[]) {
1abbee
                         arg_force = true;
1abbee
                         break;
1abbee
 
1abbee
-                case ARG_DKR_INDEX_URL:
1abbee
-                        if (!http_url_is_valid(optarg)) {
1abbee
-                                log_error("Index URL is invalid: %s", optarg);
1abbee
-                                return -EINVAL;
1abbee
-                        }
1abbee
-
1abbee
-                        arg_dkr_index_url = optarg;
1abbee
-                        break;
1abbee
-
1abbee
                 case '?':
1abbee
                         return -EINVAL;
1abbee
 
1abbee
@@ -2467,7 +2380,6 @@ static int machinectl_main(int argc, char *argv[], sd_bus *bus) {
1abbee
                 { "disable",         2,        VERB_ANY, 0,            enable_machine    },
1abbee
                 { "pull-tar",        2,        3,        0,            pull_tar          },
1abbee
                 { "pull-raw",        2,        3,        0,            pull_raw          },
1abbee
-                { "pull-dkr",        2,        3,        0,            pull_dkr          },
1abbee
                 { "list-transfers",  VERB_ANY, 1,        0,            list_transfers    },
1abbee
                 { "cancel-transfer", 2,        VERB_ANY, 0,            cancel_transfer   },
1abbee
                 {}
1abbee
diff --git a/src/shared/import-util.c b/src/shared/import-util.c
181b3f
index 660d92ac5..c0aba30a9 100644
1abbee
--- a/src/shared/import-util.c
1abbee
+++ b/src/shared/import-util.c
1abbee
@@ -149,34 +149,3 @@ int raw_strip_suffixes(const char *p, char **ret) {
1abbee
 
1abbee
         return 0;
1abbee
 }
1abbee
-
1abbee
-bool dkr_name_is_valid(const char *name) {
1abbee
-        const char *slash, *p;
1abbee
-
1abbee
-        if (isempty(name))
1abbee
-                return false;
1abbee
-
1abbee
-        slash = strchr(name, '/');
1abbee
-        if (!slash)
1abbee
-                return false;
1abbee
-
1abbee
-        if (!filename_is_valid(slash + 1))
1abbee
-                return false;
1abbee
-
1abbee
-        p = strndupa(name, slash - name);
1abbee
-        if (!filename_is_valid(p))
1abbee
-                return false;
1abbee
-
1abbee
-        return true;
1abbee
-}
1abbee
-
1abbee
-bool dkr_id_is_valid(const char *id) {
1abbee
-
1abbee
-        if (!filename_is_valid(id))
1abbee
-                return false;
1abbee
-
1abbee
-        if (!in_charset(id, "0123456789abcdef"))
1abbee
-                return false;
1abbee
-
1abbee
-        return true;
1abbee
-}
1abbee
diff --git a/src/shared/import-util.h b/src/shared/import-util.h
181b3f
index ff155b0ff..22773c58e 100644
1abbee
--- a/src/shared/import-util.h
1abbee
+++ b/src/shared/import-util.h
1abbee
@@ -41,7 +41,3 @@ ImportVerify import_verify_from_string(const char *s) _pure_;
1abbee
 
1abbee
 int tar_strip_suffixes(const char *name, char **ret);
1abbee
 int raw_strip_suffixes(const char *name, char **ret);
1abbee
-
1abbee
-bool dkr_name_is_valid(const char *name);
1abbee
-bool dkr_id_is_valid(const char *id);
1abbee
-#define dkr_tag_is_valid(tag) filename_is_valid(tag)