/**
  * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
  * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
  * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
  * License. You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */

{% if is_ibm_jdk %}

KafkaClient {
    com.ibm.security.auth.module.Krb5LoginModule required debug=false
    credsType=both
    useKeytab="file:/mnt/security/keytab"
    principal="client@EXAMPLE.COM";
};

KafkaServer {
    com.ibm.security.auth.module.Krb5LoginModule required debug=false
    credsType=both
    useKeytab="file:/mnt/security/keytab"
    principal="kafka/{{ node.account.hostname }}@EXAMPLE.COM";
};
{% if zk_sasl %}
Client {
    com.ibm.security.auth.module.Krb5LoginModule required debug=false
    credsType=both
    useKeytab="file:/mnt/security/keytab"
    principal="zkclient@EXAMPLE.COM";
};

Server {
       com.ibm.security.auth.module.Krb5LoginModule required debug=false
       credsType=both
       useKeyTab="file:/mnt/security/keytab"
       principal="zookeeper/{{ node.account.hostname }}@EXAMPLE.COM";
};
{% endif %}
{% else %}

KafkaClient {
    com.sun.security.auth.module.Krb5LoginModule required debug=false
    doNotPrompt=true
    useKeyTab=true
    storeKey=true
    keyTab="/mnt/security/keytab"
    principal="client@EXAMPLE.COM";
};

KafkaServer {
    com.sun.security.auth.module.Krb5LoginModule required debug=false
    doNotPrompt=true
    useKeyTab=true
    storeKey=true
    keyTab="/mnt/security/keytab"
    principal="kafka/{{ node.account.hostname }}@EXAMPLE.COM";
};

{% if zk_sasl %}
Client {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="/mnt/security/keytab"
       storeKey=true
       useTicketCache=false
       principal="zkclient@EXAMPLE.COM";
};

Server {
       com.sun.security.auth.module.Krb5LoginModule required
       useKeyTab=true
       keyTab="/mnt/security/keytab"
       storeKey=true
       useTicketCache=false
       principal="zookeeper/{{ node.account.hostname }}@EXAMPLE.COM";
};
{% endif %}
{% endif %}



