From 1415a20b9c69b725971e174ad3df689c1911ed70 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 22 Jan 2018 18:00:38 +0100 Subject: [PATCH] libpakfire: Store keyfile in repository Signed-off-by: Michael Tremer --- src/_pakfire/repo.c | 22 ++++++++++++++++++++++ src/libpakfire/include/pakfire/repo.h | 3 +++ src/libpakfire/libpakfire.sym | 2 ++ src/libpakfire/repo.c | 20 ++++++++++++++++++++ src/pakfire/repository/remote.py | 12 ++---------- 5 files changed, 49 insertions(+), 10 deletions(-) diff --git a/src/_pakfire/repo.c b/src/_pakfire/repo.c index 4866719f7..81bf900ea 100644 --- a/src/_pakfire/repo.c +++ b/src/_pakfire/repo.c @@ -156,6 +156,21 @@ static int Repo_set_baseurl(RepoObject* self, PyObject* value) { return pakfire_repo_set_baseurl(self->repo, baseurl); } +static PyObject* Repo_get_keyfile(RepoObject* self) { + const char* keyfile = pakfire_repo_get_keyfile(self->repo); + + return PyUnicode_FromString(keyfile); +} + +static int Repo_set_keyfile(RepoObject* self, PyObject* value) { + const char* keyfile = NULL; + + if (value != Py_None) + keyfile = PyUnicode_AsUTF8(value); + + return pakfire_repo_set_keyfile(self->repo, keyfile); +} + static PyObject* Repo_read_solv(RepoObject* self, PyObject* args) { const char* filename = NULL; @@ -366,6 +381,13 @@ static struct PyGetSetDef Repo_getsetters[] = { "The base URL of this repository", NULL }, + { + "keyfile", + (getter)Repo_get_keyfile, + (setter)Repo_set_keyfile, + NULL, + NULL + }, { "name", (getter)Repo_get_name, diff --git a/src/libpakfire/include/pakfire/repo.h b/src/libpakfire/include/pakfire/repo.h index 09bb7c779..cbf01d976 100644 --- a/src/libpakfire/include/pakfire/repo.h +++ b/src/libpakfire/include/pakfire/repo.h @@ -50,6 +50,9 @@ void pakfire_repo_set_priority(PakfireRepo repo, int priority); const char* pakfire_repo_get_baseurl(PakfireRepo repo); int pakfire_repo_set_baseurl(PakfireRepo repo, const char* baseurl); +const char* pakfire_repo_get_keyfile(PakfireRepo repo); +int pakfire_repo_set_keyfile(PakfireRepo repo, const char* keyfile); + int pakfire_repo_is_installed_repo(PakfireRepo repo); int pakfire_repo_read_solv(PakfireRepo repo, const char* filename, int flags); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 1d160eb86..d314cf131 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -229,6 +229,7 @@ global: pakfire_repo_get_cache; pakfire_repo_get_name; pakfire_repo_get_enabled; + pakfire_repo_get_keyfile; pakfire_repo_get_pakfire; pakfire_repo_get_pool; pakfire_repo_get_priority; @@ -240,6 +241,7 @@ global: pakfire_repo_ref; pakfire_repo_set_baseurl; pakfire_repo_set_enabled; + pakfire_repo_set_keyfile; pakfire_repo_set_name; pakfire_repo_set_priority; pakfire_repo_write_solv; diff --git a/src/libpakfire/repo.c b/src/libpakfire/repo.c index a89738a3b..cdce958f2 100644 --- a/src/libpakfire/repo.c +++ b/src/libpakfire/repo.c @@ -46,6 +46,7 @@ struct pakfire_repo_appdata { Repodata* repodata; char* baseurl; + char* keyfile; }; struct _PakfireRepo { @@ -61,6 +62,9 @@ static void free_repo_appdata(struct pakfire_repo_appdata* appdata) { if (appdata->baseurl) pakfire_free(appdata->baseurl); + if (appdata->keyfile) + pakfire_free(appdata->keyfile); + pakfire_free(appdata); } @@ -261,6 +265,22 @@ PAKFIRE_EXPORT int pakfire_repo_set_baseurl(PakfireRepo repo, const char* baseur return 0; } +PAKFIRE_EXPORT const char* pakfire_repo_get_keyfile(PakfireRepo repo) { + return repo->appdata->keyfile; +} + +PAKFIRE_EXPORT int pakfire_repo_set_keyfile(PakfireRepo repo, const char* keyfile) { + if (repo->appdata->keyfile) + pakfire_free(repo->appdata->keyfile); + + if (keyfile) + repo->appdata->keyfile = pakfire_strdup(keyfile); + else + repo->appdata->keyfile = NULL; + + return 0; +} + PAKFIRE_EXPORT int pakfire_repo_is_installed_repo(PakfireRepo repo) { PakfireRepo installed_repo = pakfire_get_installed_repo(repo->pakfire); diff --git a/src/pakfire/repository/remote.py b/src/pakfire/repository/remote.py index 416884af6..cd2b85075 100644 --- a/src/pakfire/repository/remote.py +++ b/src/pakfire/repository/remote.py @@ -42,22 +42,14 @@ class RepositoryRemote(base.RepositoryFactory): # Save the settings that come from the configuration file self.settings = settings - # Set the baseurl + # Set the baseurl & keyfile self.baseurl = self.settings.get("baseurl") + self.keyfile = self.settings.get("keyfile", None) or self.settings.get("gpgkey", None) # Enabled/disable the repository, based on the configuration setting. enabled = self.settings.get("enabled", True) self.enabled = util.is_enabled(enabled) - @property - def keyfile(self): - keyfile = self.settings.get("keyfile", None) - - if keyfile is None: - keyfile = self.settings.get("gpgkey", None) - - return keyfile - def make_downloader(self): """ Creates a downloader that can be used to download -- 2.39.5