/*
 *  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. 
 *  
 */
package org.apache.directory.shared.kerberos;


/**
 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
 */
public class KerberosAttribute
{
    // ------------------------------------------------------------------------
    // Krb5 Schema Attributes
    // ------------------------------------------------------------------------
    /** the krb5kdc schema principal name for a krb5KDCEntry */
    public static final String KRB5_PRINCIPAL_NAME_AT = "krb5PrincipalName";
    public static final String KRB5_PRINCIPAL_NAME_AT_OID = "1.3.6.1.4.1.5322.10.1.1";
    
    /** the krb5kdc schema key for a krb5KDCEntry */
    public static final String KRB5_KEY_AT = "krb5Key";
    public static final String KRB5_KEY_AT_OID = "1.3.6.1.4.1.5322.10.1.10";
    
    /** the krb5kdc schema key version identifier for a krb5KDCEntry */
    public static final String KRB5_KEY_VERSION_NUMBER_AT = "krb5KeyVersionNumber";
    public static final String KRB5_KEY_VERSION_NUMBER_AT_OID = "1.3.6.1.4.1.5322.10.1.2";
    
    /** the disabled boolean LDAP attribute for a Kerberos account */
    public static final String KRB5_ACCOUNT_DISABLED_AT = "krb5AccountDisabled";
    public static final String KRB5_ACCOUNT_DISABLED_AT_OID = "1.3.6.1.4.1.5322.10.1.13";
    
    /** the lockedout boolean LDAP attribute for a Kerberos account */
    public static final String KRB5_ACCOUNT_LOCKEDOUT_AT = "krb5AccountLockedOut";
    public static final String KRB5_ACCOUNT_LOCKEDOUT_AT_OID = "1.3.6.1.4.1.5322.10.1.14";
    
    /** the expiration time attribute LDAP attribute for a Kerberos account */
    public static final String KRB5_ACCOUNT_EXPIRATION_TIME_AT = "krb5AccountExpirationTime";
    public static final String KRB5_ACCOUNT_EXPIRATION_TIME_AT_OID = "1.3.6.1.4.1.5322.10.1.15";


    /** the Apache specific SAM type attribute */
    public static final String APACHE_SAM_TYPE_AT = "apacheSamType";
    public static final String APACHE_SAM_TYPE_AT_OID = "1.3.6.1.4.1.18060.0.4.1.2.9";
    
}
