#ifndef KRB5_LIBOS_INT_PROTO__
#define KRB5_LIBOS_INT_PROTO__
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#include <krb5/locate_plugin.h>
typedef enum {
TCP_OR_UDP = 0,
TCP,
UDP,
HTTPS,
UNIXSOCK,
} k5_transport;
typedef enum {
UDP_FIRST = 0,
UDP_LAST,
NO_UDP,
ONLY_UDP
} k5_transport_strategy;
struct server_entry {
char *hostname;
int port;
k5_transport transport;
char *uri_path;
int family;
int primary;
size_t addrlen;
struct sockaddr_storage addr;
};
struct serverlist {
struct server_entry *servers;
size_t nservers;
};
#define SERVERLIST_INIT { NULL, 0 }
struct kdclist;
struct remote_address {
k5_transport transport;
int family;
socklen_t len;
struct sockaddr_storage saddr;
};
struct sendto_callback_info {
int (*pfn_callback)(SOCKET fd, void *data, krb5_data *message);
void (*pfn_cleanup)(void *data, krb5_data *message);
void *data;
};
struct canonprinc {
krb5_const_principal princ;
krb5_boolean no_hostrealm;
krb5_boolean subst_defrealm;
int step;
char *canonhost;
char *realm;
krb5_principal_data copy;
krb5_data components[2];
};
krb5_error_code k5_canonprinc(krb5_context context, struct canonprinc *iter,
krb5_const_principal *princ_out);
static inline void
free_canonprinc(struct canonprinc *iter)
{
free(iter->canonhost);
free(iter->realm);
}
krb5_error_code k5_expand_hostname(krb5_context context, const char *host,
krb5_boolean is_fallback,
char **canonhost_out);
krb5_error_code k5_locate_server(krb5_context, const krb5_data *realm,
struct serverlist *serverlist,
enum locate_service_type svc,
krb5_boolean no_udp);
krb5_error_code k5_locate_kdc(krb5_context context, const krb5_data *realm,
struct serverlist *serverlist,
krb5_boolean get_primaries, krb5_boolean no_udp);
void k5_free_serverlist(struct serverlist *);
krb5_error_code k5_kdclist_create(struct kdclist **kdcs_out);
krb5_error_code k5_kdclist_add(struct kdclist *kdcs, const krb5_data *realm,
struct server_entry *server);
krb5_boolean k5_kdclist_any_replicas(krb5_context context,
struct kdclist *kdcs);
void k5_kdclist_free(struct kdclist *kdcs);
#ifdef HAVE_NETINET_IN_H
krb5_error_code krb5_unpack_full_ipaddr(krb5_context,
const krb5_address *,
krb5_int32 *,
krb5_int16 *);
krb5_error_code krb5_make_full_ipaddr(krb5_context,
krb5_int32,
int,
krb5_address **);
#endif
struct srv_dns_entry {
struct srv_dns_entry *next;
int priority;
int weight;
unsigned short port;
char *host;
};
krb5_error_code
krb5int_make_srv_query_realm(krb5_context context, const krb5_data *realm,
const char *service, const char *protocol,
const char *sitename,
struct srv_dns_entry **answers);
void krb5int_free_srv_dns_data(struct srv_dns_entry *);
krb5_error_code
k5_make_uri_query(krb5_context context, const krb5_data *realm,
const char *service, const char *sitename,
struct srv_dns_entry **answers);
krb5_error_code k5_try_realm_txt_rr(krb5_context context, const char *prefix,
const char *name, char **realm);
char *k5_primary_domain(void);
int _krb5_use_dns_realm (krb5_context);
int _krb5_use_dns_kdc (krb5_context);
int _krb5_conf_boolean (const char *);
krb5_error_code k5_sendto(krb5_context context, const krb5_data *message,
const krb5_data *realm,
const struct serverlist *addrs,
k5_transport_strategy strategy,
struct sendto_callback_info *callback_info,
krb5_data *reply, struct sockaddr *remoteaddr,
socklen_t *remoteaddrlen, int *server_used,
int (*msg_handler)(krb5_context, const krb5_data *,
void *),
void *msg_handler_data);
krb5_error_code k5_sendto_kdc(krb5_context context, const krb5_data *message,
const krb5_data *realm, krb5_boolean use_primary,
krb5_boolean no_udp, krb5_data *reply_out,
struct kdclist *hist);
krb5_error_code krb5int_get_fq_local_hostname(char **);
int krb5int_net_writev (krb5_context, int, sg_buf *, int);
int k5_getcurtime(struct timeval *tvp);
krb5_error_code k5_expand_path_tokens(krb5_context context,
const char *path_in, char **path_out);
krb5_error_code k5_expand_path_tokens_extra(krb5_context context,
const char *path_in,
char **path_out, ...);
krb5_error_code k5_create_secure_file(krb5_context, const char * pathname);
krb5_error_code k5_sync_disk_file(krb5_context, FILE *fp);
krb5_error_code k5_os_init_context(krb5_context context, profile_t profile,
krb5_flags flags);
void k5_os_free_context(krb5_context);
krb5_error_code k5_os_hostaddr(krb5_context, const char *, krb5_address ***);
krb5_error_code k5_time_with_offset(krb5_timestamp offset,
krb5_int32 offset_usec,
krb5_timestamp *time_out,
krb5_int32 *usec_out);
void k5_set_prompt_types(krb5_context, krb5_prompt_type *);
krb5_boolean k5_is_numeric_address(const char *name);
krb5_error_code k5_make_realmlist(const char *realm, char ***realms_out);
krb5_error_code k5_kt_client_default_name(krb5_context context,
char **name_out);
krb5_error_code k5_write_messages(krb5_context, krb5_pointer, krb5_data *,
int);
void k5_init_trace(krb5_context context);
#include "k5-thread.h"
extern k5_mutex_t krb5int_us_time_mutex;
extern unsigned int krb5_max_skdc_timeout;
extern unsigned int krb5_skdc_timeout_shift;
extern unsigned int krb5_skdc_timeout_1;
void k5_hostrealm_free_context(krb5_context);
krb5_error_code hostrealm_profile_initvt(krb5_context context, int maj_ver,
int min_ver,
krb5_plugin_vtable vtable);
krb5_error_code hostrealm_registry_initvt(krb5_context context, int maj_ver,
int min_ver,
krb5_plugin_vtable vtable);
krb5_error_code hostrealm_dns_initvt(krb5_context context, int maj_ver,
int min_ver, krb5_plugin_vtable vtable);
krb5_error_code hostrealm_domain_initvt(krb5_context context, int maj_ver,
int min_ver,
krb5_plugin_vtable vtable);
void k5_localauth_free_context(krb5_context);
krb5_error_code localauth_names_initvt(krb5_context context, int maj_ver,
int min_ver, krb5_plugin_vtable vtable);
krb5_error_code localauth_rule_initvt(krb5_context context, int maj_ver,
int min_ver, krb5_plugin_vtable vtable);
krb5_error_code localauth_k5login_initvt(krb5_context context, int maj_ver,
int min_ver,
krb5_plugin_vtable vtable);
krb5_error_code localauth_an2ln_initvt(krb5_context context, int maj_ver,
int min_ver, krb5_plugin_vtable vtable);
#endif