/*
* Copyright 2014 Sachidananda Urs <sacchi@gmail.com>
* Copyright 2001 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* @(#) tcpd.h 1.5 96/03/19 16:22:24
*
* Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
*/
#ifndef _TCPD_H
#define _TCPD_H
/*
* HAVE_IPV6 is traditionally configured at tcp_wrappers build time but for
* Solaris it must always be defined to keep the library interface binary
* compatible.
*/
#define HAVE_IPV6
/* Structure to describe one communications endpoint. */
typedef struct sockaddr_gen {
union {
#ifdef HAVE_IPV6
#endif
} sg_addr;
} sockaddr_gen;
typedef union gen_addr {
#ifdef HAVE_IPV6
#endif
} gen_addr;
extern void sockgen_simplify();
#ifdef HAVE_IPV6
sizeof (struct in6_addr) : \
sizeof (struct in_addr))
sizeof (struct sockaddr_in6) : \
sizeof (struct sockaddr_in))
#ifndef IPV6_ABITS
#endif
#else /* HAVE_IPV6 */
#endif /* HAVE_IPV6 */
struct host_info {
};
/* Structure to describe what we know about a service request. */
struct request_info {
};
/* Common string operations. Less clutter should be more readable. */
/*
* Initially, all above strings have the empty value. Information that
* cannot be determined at runtime is set to "unknown", so that we can
* distinguish between `unavailable' and `not yet looked up'. A hostname
* that we do not believe in is set to "paranoid".
*/
extern char unknown[];
extern char paranoid[];
#ifdef HAVE_IPV6
#else
#endif
/* Global functions. */
#else
#endif
extern int hosts_ctl(); /* wrapper around request_init() */
extern int hosts_access(); /* access control */
extern void shell_cmd(); /* execute shell command */
extern char *percent_x(); /* do %<char> expansion */
extern void rfc931(); /* client name from RFC 931 daemon */
extern void clean_exit(); /* clean up and exit */
extern void refuse(); /* clean up and exit */
extern char *xgets(); /* fgets() on steroids */
extern char *split_at(); /* strchr() and split */
extern unsigned long dot_quad_addr(); /* restricted inet_addr() */
extern int numeric_addr(); /* IP4/IP6 inet_addr (restricted) */
extern struct hostent *tcpd_gethostbyname();
#ifdef HAVE_IPV6
extern char *skip_ipv6_addrs(); /* skip over colons in IPv6 addrs */
#else
#define skip_ipv6_addrs(x) x
#endif
/* Global variables. */
extern int allow_severity; /* for connection logging */
extern int deny_severity; /* for connection logging */
extern char *hosts_allow_table; /* for verification mode redirection */
extern char *hosts_deny_table; /* for verification mode redirection */
extern int hosts_access_verbose; /* for verbose matching mode */
extern int rfc931_timeout; /* user lookup timeout */
extern int resident; /* > 0 if resident process */
/*
* Routines for controlled initialization and update of request structure
* attributes. Each attribute has its own key.
*/
#ifdef __STDC__
#else
#endif
/*
* Routines for delayed evaluation of request attributes. Each attribute
* type has its own access method. The trivial ones are implemented by
* macros. The other ones are wrappers around the transport-specific host
* name, address, and client user lookup methods. The request_info and
* host_info structures serve as caches for the lookup results.
*/
extern char *eval_user(); /* client user */
extern char *eval_hostname(); /* printable hostname */
extern char *eval_hostaddr(); /* printable host address */
extern char *eval_hostinfo(); /* host name or address */
extern char *eval_client(); /* whatever is available */
extern char *eval_server(); /* whatever is available */
/* Socket-specific methods, including DNS hostname lookups. */
extern void sock_host(); /* look up endpoint addresses */
extern void sock_hostname(); /* translate address to hostname */
extern void sock_hostaddr(); /* address to printable address */
#define sock_methods(r) \
/* The System V Transport-Level Interface (TLI) interface. */
extern void tli_host(); /* look up endpoint addresses etc. */
#endif
/*
* when available. The jump buffer (tcpd_buf) is not declared here, or
* everyone would have to include <setjmp.h>.
*/
#ifdef __STDC__
extern void tcpd_warn(char *, ...); /* report problem and proceed */
extern void tcpd_jump(char *, ...); /* report problem and jump */
#else
extern void tcpd_warn();
extern void tcpd_jump();
#endif
struct tcpd_context {
};
extern struct tcpd_context tcpd_context;
/*
* While processing access control rules, error conditions are handled by
* jumping back into the hosts_access() routine. This is cleaner than
* checking the return value of each and every silly little function. The
* (-1) returns are here because zero is already taken by longjmp().
*/
/*
* In verification mode an option function should just say what it would do,
* instead of really doing it. An option function that would not return
* should clear the dry_run flag to inform the caller of this unusual
* behavior.
*/
extern void process_options(); /* execute options */
extern int dry_run; /* verification flag */
/* Bug workarounds. */
#ifdef INET_ADDR_BUG /* inet_addr() returns struct */
extern long fix_inet_addr();
#endif
#ifdef BROKEN_FGETS /* partial reads from sockets */
extern char *fix_fgets();
#endif
#ifdef RECVFROM_BUG /* no address family info */
extern int fix_recvfrom();
#endif
#ifdef GETPEERNAME_BUG /* claims success with UDP */
extern int fix_getpeername();
#endif
#ifdef SOLARIS_24_GETHOSTBYNAME_BUG /* lists addresses as aliases */
extern struct hostent *fix_gethostbyname();
#endif
#ifdef USE_STRSEP /* libc calls strtok() */
extern char *fix_strtok();
#endif
#ifdef LIBC_CALLS_STRTOK /* libc calls strtok() */
extern char *my_strtok();
#endif
#endif /* _TCPD_H */