2005-07-11 05:16:55 +04:00
/*
2008-10-27 13:35:07 +03:00
* Copyright ( c ) 1997 - 2005 Kungliga Tekniska Högskolan
* ( Royal Institute of Technology , Stockholm , Sweden ) .
* All rights reserved .
2005-07-11 05:16:55 +04:00
*
2008-10-27 13:35:07 +03:00
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
2005-07-11 05:16:55 +04:00
*
2008-10-27 13:35:07 +03:00
* 1. Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
2005-07-11 05:16:55 +04:00
*
2008-10-27 13:35:07 +03:00
* 2. Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in the
* documentation and / or other materials provided with the distribution .
2005-07-11 05:16:55 +04:00
*
2008-10-27 13:35:07 +03:00
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission .
2005-07-11 05:16:55 +04:00
*
2008-10-27 13:35:07 +03:00
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ` ` AS IS ' ' AND
* ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO , THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED . IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL
* DAMAGES ( INCLUDING , BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES ; LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION )
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT
* LIABILITY , OR TORT ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE .
2005-07-11 05:16:55 +04:00
*/
2008-10-27 13:35:07 +03:00
/*
* $ Id $
2005-07-11 05:16:55 +04:00
*/
# ifndef __KDC_LOCL_H__
# define __KDC_LOCL_H__
# include "headers.h"
2005-12-15 23:38:24 +03:00
typedef struct pk_client_params pk_client_params ;
2021-12-24 03:52:32 +03:00
typedef struct gss_client_params gss_client_params ;
2005-12-15 23:38:24 +03:00
# include <kdc-private.h>
2021-12-24 03:52:32 +03:00
# define FAST_EXPIRATION_TIME (3 * 60)
/* KFE == KDC_FIND_ETYPE */
# define KFE_IS_TGS 0x1
# define KFE_IS_PREAUTH 0x2
# define KFE_USE_CLIENT 0x4
# define heim_pcontext krb5_context
# define heim_pconfig krb5_kdc_configuration *
# include <heimbase-svc.h>
# define KDC_AUDIT_EATWHITE HEIM_SVC_AUDIT_EATWHITE
# define KDC_AUDIT_VIS HEIM_SVC_AUDIT_VIS
# define KDC_AUDIT_VISLAST HEIM_SVC_AUDIT_VISLAST
struct kdc_request_desc {
HEIM_SVC_REQUEST_DESC_COMMON_ELEMENTS ;
} ;
struct kdc_patypes ;
2022-03-01 04:17:54 +03:00
struct krb5_kdc_configuration {
KRB5_KDC_CONFIGURATION_COMMON_ELEMENTS ;
int num_kdc_processes ;
size_t max_datagram_reply_length ;
time_t kdc_warn_pwexpire ; /* time before expiration to print a warning */
unsigned int require_preauth : 1 ; /* require preauth for all principals */
unsigned int encode_as_rep_as_tgs_rep : 1 ; /* bug compatibility */
unsigned int check_ticket_addresses : 1 ;
unsigned int warn_ticket_addresses : 1 ;
unsigned int allow_null_ticket_addresses : 1 ;
unsigned int allow_anonymous : 1 ;
unsigned int historical_anon_realm : 1 ;
unsigned int strict_nametypes : 1 ;
enum krb5_kdc_trpolicy trpolicy ;
2023-07-04 06:16:27 +03:00
unsigned int disable_pac : 1 ;
2022-03-01 04:17:54 +03:00
unsigned int enable_unarmored_pa_enc_timestamp : 1 ;
unsigned int enable_pkinit : 1 ;
2023-07-04 06:16:27 +03:00
unsigned int require_pkinit_freshness : 1 ;
2022-03-01 04:17:54 +03:00
unsigned int pkinit_princ_in_cert : 1 ;
const char * pkinit_kdc_identity ;
const char * pkinit_kdc_anchors ;
const char * pkinit_kdc_friendly_name ;
const char * pkinit_kdc_ocsp_file ;
char * * pkinit_kdc_cert_pool ;
char * * pkinit_kdc_revoke ;
int pkinit_dh_min_bits ;
unsigned int pkinit_require_binding : 1 ;
unsigned int pkinit_allow_proxy_certs : 1 ;
unsigned int synthetic_clients : 1 ;
unsigned int pkinit_max_life_from_cert_extension : 1 ;
krb5_timestamp pkinit_max_life_from_cert ;
krb5_timestamp pkinit_max_life_bound ;
krb5_timestamp synthetic_clients_max_life ;
krb5_timestamp synthetic_clients_max_renew ;
int digests_allowed ;
unsigned int enable_digest : 1 ;
unsigned int enable_kx509 : 1 ;
unsigned int enable_gss_preauth : 1 ;
unsigned int enable_gss_auth_data : 1 ;
gss_OID_set gss_mechanisms_allowed ;
gss_OID_set gss_cross_realm_mechanisms_allowed ;
} ;
2021-12-24 03:52:32 +03:00
struct astgs_request_desc {
2022-03-01 04:17:54 +03:00
HEIM_SVC_REQUEST_DESC_COMMON_ELEMENTS ;
/* AS-REQ or TGS-REQ */
KDC_REQ req ;
/* AS-REP or TGS-REP */
KDC_REP rep ;
EncTicketPart et ;
EncKDCRepPart ek ;
/* client principal (AS) or TGT/S4U principal (TGS) */
krb5_principal client_princ ;
hdb_entry * client ;
HDB * clientdb ;
krb5_principal canon_client_princ ;
/* server principal */
krb5_principal server_princ ;
HDB * serverdb ;
hdb_entry * server ;
/* presented ticket in TGS-REQ (unused by AS) */
krb5_principal krbtgt_princ ;
hdb_entry * krbtgt ;
HDB * krbtgtdb ;
krb5_ticket * ticket ;
krb5_keyblock reply_key ;
krb5_pac pac ;
uint64_t pac_attributes ;
2021-12-24 03:52:32 +03:00
/* Only AS */
const struct kdc_patypes * pa_used ;
/* PA methods can affect both the reply key and the session key (pkinit) */
krb5_enctype sessionetype ;
krb5_keyblock session_key ;
krb5_timestamp pa_endtime ;
krb5_timestamp pa_max_life ;
krb5_keyblock strengthen_key ;
const Key * ticket_key ;
/* only valid for tgs-req */
unsigned int rk_is_subkey : 1 ;
unsigned int fast_asserted : 1 ;
2022-03-03 21:17:06 +03:00
unsigned int explicit_armor_present : 1 ;
2023-06-09 16:14:50 +03:00
krb5_keyblock enc_ad_key ;
2021-12-24 03:52:32 +03:00
krb5_crypto armor_crypto ;
2022-03-01 04:17:54 +03:00
hdb_entry * armor_server ;
HDB * armor_serverdb ;
2021-12-24 03:52:32 +03:00
krb5_ticket * armor_ticket ;
Key * armor_key ;
2023-06-20 01:52:01 +03:00
hdb_entry * armor_client ;
HDB * armor_clientdb ;
krb5_pac armor_pac ;
2022-03-03 21:17:06 +03:00
2021-12-24 03:52:32 +03:00
KDCFastState fast ;
} ;
typedef struct kx509_req_context_desc {
HEIM_SVC_REQUEST_DESC_COMMON_ELEMENTS ;
struct Kx509Request req ;
Kx509CSRPlus csr_plus ;
krb5_auth_context ac ;
const char * realm ; /* XXX Confusion: is this crealm or srealm? */
krb5_keyblock * key ;
hx509_request csr ;
krb5_times ticket_times ;
unsigned int send_chain : 1 ; /* Client expects a full chain */
unsigned int have_csr : 1 ; /* Client sent a CSR */
} * kx509_req_context ;
# undef heim_pconfig
# undef heim_pcontext
2005-07-11 05:16:55 +04:00
extern sig_atomic_t exit_flag ;
2009-09-21 10:18:34 +04:00
extern size_t max_request_udp ;
extern size_t max_request_tcp ;
2007-06-13 09:44:24 +04:00
extern const char * request_log ;
2005-07-11 05:16:55 +04:00
extern const char * port_str ;
extern krb5_addresses explicit_addresses ;
extern int enable_http ;
extern int detach_from_console ;
2021-12-24 03:52:32 +03:00
extern int daemon_child ;
extern int do_bonjour ;
extern int testing_flag ;
2005-07-11 05:16:55 +04:00
2007-01-10 04:57:32 +03:00
extern const struct units _kdc_digestunits [ ] ;
2008-03-19 02:17:42 +03:00
# define KDC_LOG_FILE "kdc.log"
2005-07-11 05:16:55 +04:00
extern struct timeval _kdc_now ;
# define kdc_time (_kdc_now.tv_sec)
2009-08-05 05:25:50 +04:00
extern char * runas_string ;
extern char * chroot_string ;
2005-07-11 05:16:55 +04:00
void
2021-12-24 03:52:32 +03:00
start_kdc ( krb5_context context , krb5_kdc_configuration * config , const char * argv0 ) ;
2005-07-11 05:16:55 +04:00
2006-03-11 07:03:12 +03:00
krb5_kdc_configuration *
2021-12-24 03:52:32 +03:00
configure ( krb5_context context , int argc , char * * argv , int * optidx ) ;
2005-07-11 05:16:55 +04:00
2010-01-12 10:16:45 +03:00
# ifdef __APPLE__
void bonjour_announce ( krb5_context , krb5_kdc_configuration * ) ;
# endif
2022-03-01 04:17:54 +03:00
/* no-copy setters */
# undef _KDC_REQUEST_GET_ACCESSOR
# undef _KDC_REQUEST_SET_ACCESSOR
# undef _KDC_REQUEST_GET_ACCESSOR_PTR
# undef _KDC_REQUEST_SET_ACCESSOR_PTR
# define _KDC_REQUEST_SET_ACCESSOR_PTR(R, T, t, f) \
void \
_kdc_request_set_ # # f # # _nocopy ( R r , T * v ) ;
# undef _KDC_REQUEST_GET_ACCESSOR_STRUCT
# undef _KDC_REQUEST_SET_ACCESSOR_STRUCT
# define _KDC_REQUEST_SET_ACCESSOR_STRUCT(R, T, t, f) \
void \
_kdc_request_set_ # # f # # _nocopy ( R r , T * v ) ;
# undef HEIMDAL_KDC_KDC_ACCESSORS_H
# include "kdc-accessors.h"
2005-07-11 05:16:55 +04:00
# endif /* __KDC_LOCL_H__ */