From 1ae7e72aa8548a2577c5ab53b589365957ef65e6 Mon Sep 17 00:00:00 2001 From: Aetf Date: Sun, 1 Dec 2019 21:53:29 -0500 Subject: [PATCH] FdoSecrets: remove half created entries if the creation fails --- src/fdosecrets/objects/Collection.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/fdosecrets/objects/Collection.cpp b/src/fdosecrets/objects/Collection.cpp index 30a8f2d0c..bce4579bd 100644 --- a/src/fdosecrets/objects/Collection.cpp +++ b/src/fdosecrets/objects/Collection.cpp @@ -21,6 +21,7 @@ #include "fdosecrets/objects/Item.h" #include "fdosecrets/objects/Prompt.h" #include "fdosecrets/objects/Service.h" +#include "fdosecrets/objects/Session.h" #include "core/Config.h" #include "core/Database.h" @@ -284,8 +285,13 @@ namespace FdoSecrets return ret; } + if (!pathToObject(secret.session)) { + return DBusReturn<>::Error(QStringLiteral(DBUS_ERROR_SECRET_NO_SESSION)); + } + prompt = nullptr; + bool newlyCreated = true; Item* item = nullptr; QString itemPath; StringStringMap attributes; @@ -303,6 +309,7 @@ namespace FdoSecrets } if (!existings.value().isEmpty() && replace) { item = existings.value().front(); + newlyCreated = false; } } @@ -337,10 +344,16 @@ namespace FdoSecrets ret = item->setProperties(properties); if (ret.isError()) { + if (newlyCreated) { + item->doDelete(); + } return ret; } ret = item->setSecret(secret); if (ret.isError()) { + if (newlyCreated) { + item->doDelete(); + } return ret; }