diff options
author | Albert Astals Cid <aacid@kde.org> | 2022-01-17 16:11:14 +0100 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2022-01-17 16:17:22 +0100 |
commit | b3ca5e58c3839b34c45319848db6b19af344a7f3 (patch) | |
tree | 020803159b5da427e87d80a6ebf1d7b6f4dbdf72 | |
parent | ee974518464914b0e52549044a244863fd4342f7 (diff) |
Use GDir in getDefaultFirefoxCertDB_Linux
-rw-r--r-- | goo/gdir.h | 4 | ||||
-rw-r--r-- | poppler/SignatureHandler.cc | 44 |
2 files changed, 19 insertions, 29 deletions
@@ -41,6 +41,10 @@ class GooString; +#ifndef _WIN32 +# include <dirent.h> +#endif + //------------------------------------------------------------------------ // GDir and GDirEntry //------------------------------------------------------------------------ diff --git a/poppler/SignatureHandler.cc b/poppler/SignatureHandler.cc index 7cbbeb48..36b970a1 100644 --- a/poppler/SignatureHandler.cc +++ b/poppler/SignatureHandler.cc @@ -22,9 +22,11 @@ #include <config.h> #include "SignatureHandler.h" +#include "goo/gdir.h" #include "goo/gmem.h" -#include <dirent.h> +#include <optional> + #include <Error.h> /* NSS headers */ @@ -665,33 +667,18 @@ std::unique_ptr<X509CertificateInfo> SignatureHandler::getCertificateInfo() cons } } -static GooString *getDefaultFirefoxCertDB_Linux() +static std::optional<std::string> getDefaultFirefoxCertDB_Linux() { - GooString *finalPath = nullptr; - DIR *toSearchIn; - struct dirent *subFolder; - - GooString *homePath = new GooString(getenv("HOME")); - homePath = homePath->append("/.mozilla/firefox/"); + const std::string firefoxPath = std::string(getenv("HOME")) + "/.mozilla/firefox/"; - if ((toSearchIn = opendir(homePath->c_str())) == nullptr) { - error(errInternal, 0, "couldn't find default Firefox Folder"); - delete homePath; - return nullptr; - } - do { - if ((subFolder = readdir(toSearchIn)) != nullptr) { - if (strstr(subFolder->d_name, "default") != nullptr) { - finalPath = homePath->append(subFolder->d_name); - closedir(toSearchIn); - return finalPath; - } + GDir firefoxDir(firefoxPath.c_str()); + std::unique_ptr<GDirEntry> entry; + while (entry = firefoxDir.getNextEntry(), entry != nullptr) { + if (entry->isDir() && entry->getName()->toStr().find("default") != std::string::npos) { + return entry->getFullPath()->toStr(); } - } while (subFolder != nullptr); - - closedir(toSearchIn); - delete homePath; - return nullptr; + } + return {}; } std::string SignatureHandler::sNssDir; @@ -720,13 +707,13 @@ void SignatureHandler::setNSSDir(const GooString &nssDir) initSuccess = (NSS_Init(nssDir.c_str()) == SECSuccess); sNssDir = nssDir.toStr(); } else { - GooString *certDBPath = getDefaultFirefoxCertDB_Linux(); - if (certDBPath == nullptr) { + const std::optional<std::string> certDBPath = getDefaultFirefoxCertDB_Linux(); + if (!certDBPath) { initSuccess = (NSS_Init("sql:/etc/pki/nssdb") == SECSuccess); sNssDir = "sql:/etc/pki/nssdb"; } else { initSuccess = (NSS_Init(certDBPath->c_str()) == SECSuccess); - sNssDir = certDBPath->toStr(); + sNssDir = *certDBPath; } if (!initSuccess) { GooString homeNssDb(getenv("HOME")); @@ -737,7 +724,6 @@ void SignatureHandler::setNSSDir(const GooString &nssDir) NSS_NoDB_Init(nullptr); } } - delete certDBPath; } if (initSuccess) { |