;   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.

; Sample file, you need to edit for your configuration
; see http://www.fnal.gov/docs/strongauth/krb5conf.html
; see http://web.mit.edu/kerberos/krb5-1.3/krb5-1.3.1/doc/krb5-admin.html
; see http://linux.die.net/man/5/krb5.conf

[libdefaults]
default_realm = EXAMPLE.COM
default_tkt_enctypes = aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
default_tgs_enctypes = aes256-cts-hmac-sha1-96,aes128-cts-hmac-sha1-96
forwardable=true

[realms]
EXAMPLE.COM = {
        kdc = kerberos.example.com:60088
}

[domain_realm]
example.com= EXAMPLE.COM
.example.com= EXAMPLE.COM
