aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/util.cc
diff options
context:
space:
mode:
authorTom Hubrecht <github@mail.hubrecht.ovh>2024-05-28 15:40:03 +0200
committerTom Hubrecht <github@mail.hubrecht.ovh>2024-05-29 11:01:34 +0200
commitf79ee66646f66e5117583bcf9a579b7f538ca8bb (patch)
tree024548ec910b030c07b4d38b253b6f68a9a4fa17 /src/libutil/util.cc
parentb91055112035c256fffd44d77f746b977cfdf3ca (diff)
util.{hh,cc}: Split out users.{hh,cc}
Change-Id: I1bd92479a2cb7e5c2c2e1541b80474adb05ea0df
Diffstat (limited to 'src/libutil/util.cc')
-rw-r--r--src/libutil/util.cc97
1 files changed, 0 insertions, 97 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index 099a07622..8e813abc2 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -56,103 +56,6 @@
namespace nix {
-std::string getUserName()
-{
- auto pw = getpwuid(geteuid());
- std::string name = pw ? pw->pw_name : getEnv("USER").value_or("");
- if (name.empty())
- throw Error("cannot figure out user name");
- return name;
-}
-
-Path getHomeOf(uid_t userId)
-{
- std::vector<char> buf(16384);
- struct passwd pwbuf;
- struct passwd * pw;
- if (getpwuid_r(userId, &pwbuf, buf.data(), buf.size(), &pw) != 0
- || !pw || !pw->pw_dir || !pw->pw_dir[0])
- throw Error("cannot determine user's home directory");
- return pw->pw_dir;
-}
-
-Path getHome()
-{
- static Path homeDir = []()
- {
- std::optional<std::string> unownedUserHomeDir = {};
- auto homeDir = getEnv("HOME");
- if (homeDir) {
- // Only use $HOME if doesn't exist or is owned by the current user.
- struct stat st;
- int result = stat(homeDir->c_str(), &st);
- if (result != 0) {
- if (errno != ENOENT) {
- warn("couldn't stat $HOME ('%s') for reason other than not existing ('%d'), falling back to the one defined in the 'passwd' file", *homeDir, errno);
- homeDir.reset();
- }
- } else if (st.st_uid != geteuid()) {
- unownedUserHomeDir.swap(homeDir);
- }
- }
- if (!homeDir) {
- homeDir = getHomeOf(geteuid());
- if (unownedUserHomeDir.has_value() && unownedUserHomeDir != homeDir) {
- warn("$HOME ('%s') is not owned by you, falling back to the one defined in the 'passwd' file ('%s')", *unownedUserHomeDir, *homeDir);
- }
- }
- return *homeDir;
- }();
- return homeDir;
-}
-
-
-Path getCacheDir()
-{
- auto cacheDir = getEnv("XDG_CACHE_HOME");
- return cacheDir ? *cacheDir : getHome() + "/.cache";
-}
-
-
-Path getConfigDir()
-{
- auto configDir = getEnv("XDG_CONFIG_HOME");
- return configDir ? *configDir : getHome() + "/.config";
-}
-
-std::vector<Path> getConfigDirs()
-{
- Path configHome = getConfigDir();
- auto configDirs = getEnv("XDG_CONFIG_DIRS").value_or("/etc/xdg");
- std::vector<Path> result = tokenizeString<std::vector<std::string>>(configDirs, ":");
- result.insert(result.begin(), configHome);
- return result;
-}
-
-
-Path getDataDir()
-{
- auto dataDir = getEnv("XDG_DATA_HOME");
- return dataDir ? *dataDir : getHome() + "/.local/share";
-}
-
-Path getStateDir()
-{
- auto stateDir = getEnv("XDG_STATE_HOME");
- return stateDir ? *stateDir : getHome() + "/.local/state";
-}
-
-Path createNixStateDir()
-{
- Path dir = getStateDir() + "/nix";
- createDirs(dir);
- return dir;
-}
-
-
-
-
-
//////////////////////////////////////////////////////////////////////