/*
 * 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.
 */
StormServer {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="{{storm_server_keytab_path}}"
   storeKey=true
   useTicketCache=false
   principal="{{storm_jaas_server_principal}}";
};
StormClient {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="{{storm_client_keytab_path}}"
   storeKey=true
   useTicketCache=false
   serviceName="{{storm_jaas_stormclient_servicename}}"
   debug=true
   principal="{{storm_jaas_client_principal}}";
};
Client {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="{{storm_client_keytab_path}}"
   storeKey=true
   useTicketCache=false
   serviceName="zookeeper"
   principal="{{storm_jaas_client_principal}}";
};
