ddf7d0
Index: nss/lib/sysinit/nsssysinit.c
ddf7d0
===================================================================
ddf7d0
--- nss.orig/lib/sysinit/nsssysinit.c
ddf7d0
+++ nss/lib/sysinit/nsssysinit.c
ddf7d0
@@ -36,41 +36,9 @@ testdir(char *dir)
ddf7d0
     return S_ISDIR(buf.st_mode);
ddf7d0
 }
ddf7d0
 
ddf7d0
-/**
ddf7d0
- * Append given @dir to @path and creates the directory with mode @mode.
ddf7d0
- * Returns 0 if successful, -1 otherwise.
ddf7d0
- * Assumes that the allocation for @path has sufficient space for @dir
ddf7d0
- * to be added.
ddf7d0
- */
ddf7d0
-static int
ddf7d0
-appendDirAndCreate(char *path, char *dir, mode_t mode)
ddf7d0
-{
ddf7d0
-    PORT_Strcat(path, dir);
ddf7d0
-    if (!testdir(path)) {
ddf7d0
-        if (mkdir(path, mode)) {
ddf7d0
-            return -1;
ddf7d0
-        }
ddf7d0
-    }
ddf7d0
-    return 0;
ddf7d0
-}
ddf7d0
-
ddf7d0
-#define XDG_NSS_USER_PATH1 "/.local"
ddf7d0
-#define XDG_NSS_USER_PATH2 "/share"
ddf7d0
-#define XDG_NSS_USER_PATH3 "/pki"
ddf7d0
-
ddf7d0
 #define NSS_USER_PATH1 "/.pki"
ddf7d0
 #define NSS_USER_PATH2 "/nssdb"
ddf7d0
-
ddf7d0
-/**
ddf7d0
- * Return the path to user's NSS database.
ddf7d0
- * We search in the following dirs in order:
ddf7d0
- * (1) $HOME/.pki/nssdb;
ddf7d0
- * (2) $XDG_DATA_HOME/pki/nssdb if XDG_DATA_HOME is set;
ddf7d0
- * (3) $HOME/.local/share/pki/nssdb (default XDG_DATA_HOME value).
ddf7d0
- * If (1) does not exist, then the returned dir will be set to either
ddf7d0
- * (2) or (3), depending if XDG_DATA_HOME is set.
ddf7d0
- */
ddf7d0
-char *
ddf7d0
+static char *
ddf7d0
 getUserDB(void)
ddf7d0
 {
ddf7d0
     char *userdir = PR_GetEnvSecure("HOME");
ddf7d0
@@ -81,47 +49,22 @@ getUserDB(void)
ddf7d0
     }
ddf7d0
 
ddf7d0
     nssdir = PORT_Alloc(strlen(userdir) + sizeof(NSS_USER_PATH1) + sizeof(NSS_USER_PATH2));
ddf7d0
+    if (nssdir == NULL) {
ddf7d0
+        return NULL;
ddf7d0
+    }
ddf7d0
     PORT_Strcpy(nssdir, userdir);
ddf7d0
-    PORT_Strcat(nssdir, NSS_USER_PATH1 NSS_USER_PATH2);
ddf7d0
-    if (testdir(nssdir)) {
ddf7d0
-        /* $HOME/.pki/nssdb exists */
ddf7d0
-        return nssdir;
ddf7d0
-    } else {
ddf7d0
-        /* either $HOME/.pki or $HOME/.pki/nssdb does not exist */
ddf7d0
+    /* verify it exists */
ddf7d0
+    if (!testdir(nssdir)) {
ddf7d0
         PORT_Free(nssdir);
ddf7d0
-    }
ddf7d0
-    int size = 0;
ddf7d0
-    char *xdguserdatadir = PR_GetEnvSecure("XDG_DATA_HOME");
ddf7d0
-    if (xdguserdatadir) {
ddf7d0
-        size = strlen(xdguserdatadir);
ddf7d0
-    } else {
ddf7d0
-        size = strlen(userdir) + sizeof(XDG_NSS_USER_PATH1) + sizeof(XDG_NSS_USER_PATH2);
ddf7d0
-    }
ddf7d0
-    size += sizeof(XDG_NSS_USER_PATH3) + sizeof(NSS_USER_PATH2);
ddf7d0
-
ddf7d0
-    nssdir = PORT_Alloc(size);
ddf7d0
-    if (nssdir == NULL) {
ddf7d0
         return NULL;
ddf7d0
     }
ddf7d0
-
ddf7d0
-    if (xdguserdatadir) {
ddf7d0
-        PORT_Strcpy(nssdir, xdguserdatadir);
ddf7d0
-        if (!testdir(nssdir)) {
ddf7d0
-            PORT_Free(nssdir);
ddf7d0
-            return NULL;
ddf7d0
-        }
ddf7d0
-
ddf7d0
-    } else {
ddf7d0
-        PORT_Strcpy(nssdir, userdir);
ddf7d0
-        if (appendDirAndCreate(nssdir, XDG_NSS_USER_PATH1, 0755) ||
ddf7d0
-            appendDirAndCreate(nssdir, XDG_NSS_USER_PATH2, 0755)) {
ddf7d0
-            PORT_Free(nssdir);
ddf7d0
-            return NULL;
ddf7d0
-        }
ddf7d0
+    PORT_Strcat(nssdir, NSS_USER_PATH1);
ddf7d0
+    if (!testdir(nssdir) && mkdir(nssdir, 0760)) {
ddf7d0
+        PORT_Free(nssdir);
ddf7d0
+        return NULL;
ddf7d0
     }
ddf7d0
-    /* ${XDG_DATA_HOME:-$HOME/.local/share}/pki/nssdb */
ddf7d0
-    if (appendDirAndCreate(nssdir, XDG_NSS_USER_PATH3, 0760) ||
ddf7d0
-        appendDirAndCreate(nssdir, NSS_USER_PATH2, 0760)) {
ddf7d0
+    PORT_Strcat(nssdir, NSS_USER_PATH2);
ddf7d0
+    if (!testdir(nssdir) && mkdir(nssdir, 0760)) {
ddf7d0
         PORT_Free(nssdir);
ddf7d0
         return NULL;
ddf7d0
     }