/* * Copyright (c) 2012-2015 iWave Software LLC * All Rights Reserved */ package com.iwave.ext.kerberos; import java.util.List; import java.util.Map; /** * The kerberos config file (krb5.conf) contains all of the configuration for * kerberos realms. This class is a builder to generate this file. * * @author Chris Dail */ public class Krb5ConfBuilder { /* * Sample file: * * [libdefaults] * * [realms] * IWAVETEST.COM = { * kdc = 10.2.1.228 * } * IWAVE.LOCAL = { * kdc = 10.2.1.10 * } * * [domain_realm] * .iwavetest.com = IWAVETEST.COM * .iwave.local = IWAVE.LOCAL */ /** * Build a krb5.conf file given a map of realms. * * @param domains Maps Domain -> List of KDC's * @return Contents of a krb5.conf file */ public static String build(Map<String, List<String>> domains) { StringBuilder sb = new StringBuilder(); sb.append("[libdefaults]\n"); if (!domains.isEmpty()) { String defaultRealm = domains.keySet().iterator().next(); sb.append("default_realm = ") .append(defaultRealm.toUpperCase()) .append("\n\n"); } sb.append("[realms]\n"); for (Map.Entry<String, List<String>> entry : domains.entrySet()) { sb.append(entry.getKey().toUpperCase()) .append(" = {\n"); for (String kdcAddress : entry.getValue()) { sb.append(" kdc = ") .append(kdcAddress) .append("\n"); } sb.append("\n}\n"); } sb.append("\n"); sb.append("[domain_realm]\n"); for (Map.Entry<String, List<String>> entry : domains.entrySet()) { String domain = entry.getKey(); sb.append('.') .append(domain.toLowerCase()) .append(" = ") .append(domain.toUpperCase()) .append("\n"); } sb.append("\n"); return sb.toString(); } }