1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/os_crypt/sync/key_storage_util_linux.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/logging.h"
namespace os_crypt {
namespace {
bool ReadBackendUse(const base::FilePath& user_data_dir, bool* use) {
if (user_data_dir.empty())
return false;
base::FilePath pref_path = user_data_dir.Append(kBackendPreferenceFileName);
*use = !base::PathExists(pref_path);
return true;
}
} // namespace
SelectedLinuxBackend SelectBackend(const std::string& type,
bool use_backend,
base::nix::DesktopEnvironment desktop_env) {
// Explicitly requesting a store overrides other production logic.
if (type == "kwallet")
return SelectedLinuxBackend::KWALLET;
if (type == "kwallet5")
return SelectedLinuxBackend::KWALLET5;
if (type == "kwallet6")
return SelectedLinuxBackend::KWALLET6;
if (type == "gnome-libsecret")
return SelectedLinuxBackend::GNOME_LIBSECRET;
if (type == "basic")
return SelectedLinuxBackend::BASIC_TEXT;
// Ignore the backends if requested to.
if (!use_backend)
return SelectedLinuxBackend::BASIC_TEXT;
// Detect the store to use automatically.
const char* name = base::nix::GetDesktopEnvironmentName(desktop_env);
VLOG(1) << "Password storage detected desktop environment: "
<< (name ? name : "(unknown)");
switch (desktop_env) {
case base::nix::DESKTOP_ENVIRONMENT_KDE4:
return SelectedLinuxBackend::KWALLET;
case base::nix::DESKTOP_ENVIRONMENT_KDE5:
return SelectedLinuxBackend::KWALLET5;
case base::nix::DESKTOP_ENVIRONMENT_KDE6:
return SelectedLinuxBackend::KWALLET6;
case base::nix::DESKTOP_ENVIRONMENT_CINNAMON:
case base::nix::DESKTOP_ENVIRONMENT_DEEPIN:
case base::nix::DESKTOP_ENVIRONMENT_GNOME:
case base::nix::DESKTOP_ENVIRONMENT_PANTHEON:
case base::nix::DESKTOP_ENVIRONMENT_UKUI:
case base::nix::DESKTOP_ENVIRONMENT_UNITY:
case base::nix::DESKTOP_ENVIRONMENT_XFCE:
return SelectedLinuxBackend::GNOME_LIBSECRET;
// KDE3 didn't use DBus, which our KWallet store uses.
case base::nix::DESKTOP_ENVIRONMENT_KDE3:
case base::nix::DESKTOP_ENVIRONMENT_LXQT:
case base::nix::DESKTOP_ENVIRONMENT_OTHER:
return SelectedLinuxBackend::BASIC_TEXT;
}
}
bool GetBackendUse(const base::FilePath& user_data_dir) {
bool setting;
if (ReadBackendUse(user_data_dir, &setting))
return setting;
return true;
}
} // namespace os_crypt
|