changeset 51006:3982b9671e71

8198352: java.util.MissingResourceException: sun.security.util.AuthResources when trying to use com.sun.security.auth.module.UnixLoginModule Reviewed-by: xuelei
author weijun
date Mon, 09 Jul 2018 12:20:56 +0800
parents 0083d474b0e1
children fc9dd181d70e
files src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericGroupPrincipal.java test/jdk/com/sun/security/auth/UnixPrincipalHashCode.java test/jdk/com/sun/security/auth/uphc.policy
diffstat 3 files changed, 66 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericGroupPrincipal.java	Sun Jul 08 20:00:46 2018 -0400
+++ b/src/jdk.security.auth/share/classes/com/sun/security/auth/UnixNumericGroupPrincipal.java	Mon Jul 09 12:20:56 2018 +0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
 package com.sun.security.auth;
 
 import java.security.Principal;
+import java.util.Objects;
 
 /**
  * This class implements the {@code Principal} interface
@@ -195,6 +196,6 @@
      * @return a hash code for this {@code UnixNumericGroupPrincipal}.
      */
     public int hashCode() {
-        return toString().hashCode();
+        return Objects.hash(name, isPrimaryGroup());
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/security/auth/UnixPrincipalHashCode.java	Mon Jul 09 12:20:56 2018 +0800
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8198352
+ * @requires os.family != "windows"
+ * @run main/othervm/policy=uphc.policy
+ *      -Djava.security.auth.login.config=uphc.conf
+ *      UnixPrincipalHashCode
+ * @summary java.util.MissingResourceException: sun.security.util.AuthResources
+ *          when trying to use com.sun.security.auth.module.UnixLoginModule
+ */
+
+import javax.security.auth.Subject;
+import javax.security.auth.login.LoginContext;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.security.PrivilegedAction;
+import java.util.List;
+
+public class UnixPrincipalHashCode {
+    public static void main(java.lang.String[] args) throws Exception {
+        Files.write(Path.of("uphc.conf"), List.of(
+                "entry {",
+                "    com.sun.security.auth.module.UnixLoginModule required;",
+                "};"));
+        LoginContext lc = new LoginContext("entry");
+        lc.login();
+        Subject subject = lc.getSubject();
+        PrivilegedAction action = () -> {
+            System.out.println(subject);
+            return null;
+        };
+        Subject.doAsPrivileged(subject, action, null);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/com/sun/security/auth/uphc.policy	Mon Jul 09 12:20:56 2018 +0800
@@ -0,0 +1,6 @@
+grant {
+   permission java.io.FilePermission "./-", "write";
+   permission javax.security.auth.AuthPermission "modifyPrincipals";
+   permission javax.security.auth.AuthPermission "createLoginContext";
+   permission javax.security.auth.AuthPermission "doAsPrivileged";
+};