]> git.ipfire.org Git - location/libloc.git/commitdiff
python: Support passing two signing keys
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 19 May 2020 12:11:37 +0000 (12:11 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 19 May 2020 12:11:37 +0000 (12:11 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/python/location-importer.in
src/python/writer.c

index eb4a303b80aa0d375f3184e893f2cf8981a154ed..3b7e37f5923792d62983e790dc30ecfc7ac0f32a 100644 (file)
@@ -67,6 +67,7 @@ class CLI(object):
                write.set_defaults(func=self.handle_write)
                write.add_argument("file", nargs=1, help=_("Database File"))
                write.add_argument("--signing-key", nargs="?", type=open, help=_("Signing Key"))
+               write.add_argument("--backup-signing-key", nargs="?", type=open, help=_("Backup Signing Key"))
                write.add_argument("--vendor", nargs="?", help=_("Sets the vendor"))
                write.add_argument("--description", nargs="?", help=_("Sets a description"))
                write.add_argument("--license", nargs="?", help=_("Sets the license"))
@@ -182,7 +183,7 @@ class CLI(object):
                        Compiles a database in libloc format out of what is in the database
                """
                # Allocate a writer
-               writer = location.Writer(ns.signing_key)
+               writer = location.Writer(ns.signing_key, ns.backup_signing_key)
 
                # Set all metadata
                if ns.vendor:
index 557f3e11690dc8755331657c3e907cd5eea73aa2..a3ceae69fb85af0fa265a20b69629965f491ac82 100644 (file)
@@ -39,31 +39,56 @@ static void Writer_dealloc(WriterObject* self) {
 }
 
 static int Writer_init(WriterObject* self, PyObject* args, PyObject* kwargs) {
-       PyObject* private_key = NULL;
-       FILE* f = NULL;
+       PyObject* private_key1 = NULL;
+       PyObject* private_key2 = NULL;
+       FILE* f1 = NULL;
+       FILE* f2 = NULL;
+       int fd;
 
        // Parse arguments
-       if (!PyArg_ParseTuple(args, "|O", &private_key))
+       if (!PyArg_ParseTuple(args, "|OO", &private_key1, &private_key2))
                return -1;
 
+       // Ignore None
+       if (private_key1 == Py_None) {
+               Py_DECREF(private_key1);
+               private_key1 = NULL;
+       }
+
+       if (private_key2 == Py_None) {
+               Py_DECREF(private_key2);
+               private_key2 = NULL;
+       }
+
        // Convert into FILE*
-       if (private_key && private_key != Py_None) {
-               int fd = PyObject_AsFileDescriptor(private_key);
+       if (private_key1) {
+               fd = PyObject_AsFileDescriptor(private_key1);
                if (fd < 0)
                        return -1;
 
                // Re-open file descriptor
-               f = fdopen(fd, "r");
-               if (!f) {
+               f2 = fdopen(fd, "r");
+               if (!f2) {
                        PyErr_SetFromErrno(PyExc_IOError);
                        return -1;
                }
        }
 
-       // Create the writer object
-       int r = loc_writer_new(loc_ctx, &self->writer, f, NULL);
+       if (private_key2) {
+               fd = PyObject_AsFileDescriptor(private_key2);
+               if (fd < 0)
+                       return -1;
 
-       return r;
+               // Re-open file descriptor
+               f2 = fdopen(fd, "r");
+               if (!f2) {
+                       PyErr_SetFromErrno(PyExc_IOError);
+                       return -1;
+               }
+       }
+
+       // Create the writer object
+       return loc_writer_new(loc_ctx, &self->writer, f1, f2);
 }
 
 static PyObject* Writer_get_vendor(WriterObject* self) {