1 /*
   2  * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @bug 4501327 4868379 8039132
  27  * @run main/othervm AddressesAndNameType 1
  28  * @run main/othervm AddressesAndNameType 2
  29  * @run main/othervm AddressesAndNameType 3
  30  * @summary noaddresses settings and server name type
  31  */
  32 
  33 import java.net.InetAddress;
  34 import java.util.Set;
  35 import sun.security.krb5.Config;
  36 
  37 import javax.security.auth.kerberos.KerberosPrincipal;
  38 import javax.security.auth.kerberos.KerberosTicket;
  39 
  40 public class AddressesAndNameType {
  41 
  42     public static void main(String[] args)
  43             throws Exception {
  44 
  45         OneKDC kdc = new OneKDC(null);
  46         kdc.writeJAASConf();
  47 
  48         String extraLine;
  49         switch (args[0]) {
  50             case "1": extraLine = "noaddresses = false"; break;
  51             case "2": extraLine = "noaddresses = true"; break;
  52             default: extraLine = ""; break;
  53         }
  54 
  55         KDC.saveConfig(OneKDC.KRB5_CONF, kdc,
  56                 extraLine);
  57         Config.refresh();
  58 
  59         Context c = Context.fromUserPass(OneKDC.USER, OneKDC.PASS, false);
  60         Set<KerberosTicket> tickets =
  61                 c.s().getPrivateCredentials(KerberosTicket.class);
  62 
  63         if (tickets.isEmpty()) throw new Exception();
  64         KerberosTicket ticket = tickets.iterator().next();
  65         InetAddress[] addresses = ticket.getClientAddresses();
  66 
  67         switch (args[0]) {
  68             case "1":
  69                 if (addresses == null || addresses.length == 0) {
  70                     throw new Exception("No addresses");
  71                 }
  72                 if (ticket.getServer().getNameType()
  73                         != KerberosPrincipal.KRB_NT_SRV_INST) {
  74                     throw new Exception(
  75                             "Wrong type: " + ticket.getServer().getNameType());
  76                 }
  77                 break;
  78             default:
  79                 if (addresses != null && addresses.length != 0) {
  80                     throw new Exception("See addresses");
  81                 }
  82                 break;
  83         }
  84     }
  85 }