]> git.cameronkatri.com Git - pw-darwin.git/blobdiff - libutil/login_cap.c
Really restore the old behaviour for pw usermod -m
[pw-darwin.git] / libutil / login_cap.c
index 529ce82273222c63f96c7b90ce73da9c6a7c3062..9c8d4a689750c078e728316ca3fea805d641bbbb 100644 (file)
@@ -61,6 +61,8 @@ static char * internal_string = NULL;
 static size_t internal_arraysz = 0;
 static const char ** internal_array = NULL;
 
+static char path_login_conf[] = _PATH_LOGIN_CONF;
+
 static char *
 allocstr(const char *str)
 {
@@ -215,15 +217,14 @@ login_getclassbyname(char const *name, const struct passwd *pwd)
 
        if (dir && snprintf(userpath, MAXPATHLEN, "%s/%s", dir,
                            _FILE_LOGIN_CONF) < MAXPATHLEN) {
-           login_dbarray[i] = userpath;
            if (_secure_path(userpath, pwd->pw_uid, pwd->pw_gid) != -1)
-               i++;            /* only use 'secure' data */
+               login_dbarray[i++] = userpath;
        }
        /*
         * XXX: Why to add the system database if the class is `me'?
         */
-       if (_secure_path(_PATH_LOGIN_CONF, 0, 0) != -1)
-           login_dbarray[i++] = _PATH_LOGIN_CONF;
+       if (_secure_path(path_login_conf, 0, 0) != -1)
+           login_dbarray[i++] = path_login_conf;
        login_dbarray[i] = NULL;
 
        memset(lc, 0, sizeof(login_cap_t));
@@ -238,7 +239,7 @@ login_getclassbyname(char const *name, const struct passwd *pwd)
                break;  /* Don't retry default on 'me' */
            if (i == 0)
                r = -1;
-           else if ((r = open(login_dbarray[0], O_RDONLY)) >= 0)
+           else if ((r = open(login_dbarray[0], O_RDONLY | O_CLOEXEC)) >= 0)
                close(r);
            /*
             * If there's at least one login class database,
@@ -741,7 +742,7 @@ login_getcapsize(login_cap_t *lc, const char *cap, rlim_t def, rlim_t error)
 
 /*
  * login_getcapbool()
- * From the login_cap_t <lc>, check for the existance of the capability
+ * From the login_cap_t <lc>, check for the existence of the capability
  * of <cap>.  Return <def> if <lc>->lc_cap is NULL, otherwise return
  * the whether or not <cap> exists there.
  */