⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radiusd.h

📁 使用最广泛的radius的linux的源码
💻 H
字号:
#ifndef RADIUSD_H#define RADIUSD_H/* * radiusd.h	Structures, prototypes and global variables *		for the FreeRADIUS server. * * Version:	$Id: radiusd.h,v 1.263 2008/04/30 10:00:53 aland Exp $ * *   This program is free software; you can redistribute it and/or modify *   it under the terms of the GNU General Public License as published by *   the Free Software Foundation; either version 2 of the License, or *   (at your option) any later version. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * * Copyright 1999,2000,2002,2003,2004,2005,2006,2007,2008  The FreeRADIUS server project * */#include <freeradius-devel/ident.h>RCSIDH(radiusd_h, "$Id: radiusd.h,v 1.263 2008/04/30 10:00:53 aland Exp $")#include <freeradius-devel/libradius.h>#include <freeradius-devel/radpaths.h>#include <freeradius-devel/conf.h>#include <freeradius-devel/conffile.h>#include <freeradius-devel/event.h>typedef struct auth_req REQUEST;#include <freeradius-devel/realms.h>#ifdef HAVE_PTHREAD_H#include	<pthread.h>typedef pthread_t child_pid_t;#define child_kill pthread_kill#elsetypedef pid_t child_pid_t;#define child_kill kill#endif#define NO_SUCH_CHILD_PID (child_pid_t) (0)#ifndef NDEBUG#define REQUEST_MAGIC (0xdeadbeef)#endif/* *	See util.c */typedef struct request_data_t request_data_t;typedef struct rad_snmp_client_entry_t rad_snmp_client_entry_t;typedef struct radclient {	fr_ipaddr_t		ipaddr;	int			prefix;	char			*longname;	char			*secret;	char			*shortname;	int			message_authenticator;	char			*nastype;	char			*login;	char			*password;	char			*server;	int			number;	/* internal use only */	const CONF_SECTION	*cs;#ifdef WITH_SNMP	rad_snmp_client_entry_t *auth, *acct;#endif} RADCLIENT;/* *	Types of listeners. * *	Ordered by priority! */typedef enum RAD_LISTEN_TYPE {	RAD_LISTEN_NONE = 0,	RAD_LISTEN_PROXY,	RAD_LISTEN_AUTH,	RAD_LISTEN_ACCT,	RAD_LISTEN_DETAIL,	RAD_LISTEN_VQP,	RAD_LISTEN_DHCP,	RAD_LISTEN_SNMP,	RAD_LISTEN_MAX} RAD_LISTEN_TYPE;/* *	For listening on multiple IP's and ports. */typedef struct rad_listen_t rad_listen_t;#define REQUEST_DATA_REGEX (0xadbeef00)#define REQUEST_MAX_REGEX (8)struct auth_req {#ifndef NDEBUG	uint32_t		magic; /* for debugging only */#endif	RADIUS_PACKET		*packet;	RADIUS_PACKET		*proxy;	RADIUS_PACKET		*reply;	RADIUS_PACKET		*proxy_reply;	VALUE_PAIR		*config_items;	VALUE_PAIR		*username;	VALUE_PAIR		*password;	struct main_config_t	*root;	request_data_t		*data;	RADCLIENT		*client;	child_pid_t    		child_pid;	time_t			timestamp;	int			number; /* internal server number */	rad_listen_t		*listener;	rad_listen_t		*proxy_listener;	int                     simul_max;	int                     simul_count;	int                     simul_mpp; /* WEIRD: 1 is false, 2 is true */	int			options; /* miscellanous options */	const char		*module; /* for debugging unresponsive children */	const char		*component; /* ditto */	struct timeval		received;	struct timeval		when; 		/* to wake up */	int			delay;	int			master_state;	int			child_state;	RAD_LISTEN_TYPE		priority;	fr_event_t		*ev;	struct timeval		next_when;	fr_event_callback_t	next_callback;	int			in_request_hash;	int			in_proxy_hash;	home_server	       	*home_server;	home_pool_t		*home_pool; /* for dynamic failover */	struct timeval		proxy_when;	int			num_proxied_requests;	int			num_proxied_responses;	const char		*server;	REQUEST			*parent;};				/* REQUEST typedef */#define RAD_REQUEST_OPTION_NONE            (0)#define REQUEST_ACTIVE 		(1)#define REQUEST_STOP_PROCESSING (2)#define REQUEST_COUNTED	        (3)#define REQUEST_QUEUED		(1)#define REQUEST_RUNNING		(2)#define REQUEST_PROXIED		(3)#define REQUEST_REJECT_DELAY	(4)#define REQUEST_CLEANUP_DELAY	(5)#define REQUEST_DONE		(6)/* *  Function handler for requests. */typedef		int (*RAD_REQUEST_FUNP)(REQUEST *);typedef struct radclient_list RADCLIENT_LIST;typedef struct pair_list {	const char		*name;	VALUE_PAIR		*check;	VALUE_PAIR		*reply;	int			lineno;	int			order;	struct pair_list	*next;	struct pair_list	*lastdefault;} PAIR_LIST;typedef int (*rad_listen_recv_t)(rad_listen_t *, RAD_REQUEST_FUNP *, REQUEST **);typedef int (*rad_listen_send_t)(rad_listen_t *, REQUEST *);typedef int (*rad_listen_print_t)(rad_listen_t *, char *, size_t);typedef int (*rad_listen_encode_t)(rad_listen_t *, REQUEST *);typedef int (*rad_listen_decode_t)(rad_listen_t *, REQUEST *);struct rad_listen_t {	struct rad_listen_t *next; /* should be rbtree stuff */	/*	 *	For normal sockets.	 */	RAD_LISTEN_TYPE	type;	int		fd;	const char	*server;	rad_listen_recv_t recv;	rad_listen_send_t send;	rad_listen_encode_t encode;	rad_listen_decode_t decode;	rad_listen_print_t print;	void		*data;};typedef enum radlog_dest_t {  RADLOG_STDOUT = 0,  RADLOG_FILES,  RADLOG_SYSLOG,  RADLOG_STDERR,  RADLOG_NULL,  RADLOG_NUM_DEST} radlog_dest_t;typedef struct main_config_t {	struct main_config *next;	int		refcount;	fr_ipaddr_t	myip;	/* from the command-line only */	int		port;	/* from the command-line only */	int		log_auth;	int		log_auth_badpass;	int		log_auth_goodpass;	int		allow_core_dumps;	int		debug_level;	int		proxy_requests;	int		reject_delay;	int		status_server;	int		max_request_time;	int		cleanup_delay;	int		max_requests;#ifdef DELETE_BLOCKED_REQUESTS	int		kill_unresponsive_children;#endif	char		*log_file;	char		*checkrad;	const char      *pid_file;	rad_listen_t	*listen;	int		syslog_facility;	int		radlog_fd;	radlog_dest_t	radlog_dest;	CONF_SECTION	*config;	const char	*name;	int		do_snmp;} MAIN_CONFIG_T;#define DEBUG	if(debug_flag)log_debug#define DEBUG2  if (debug_flag > 1)log_debug#define DEBUG3  if (debug_flag > 2)log_debug#define SECONDS_PER_DAY		86400#define MAX_REQUEST_TIME	30#define CLEANUP_DELAY		5#define MAX_REQUESTS		256#define RETRY_DELAY             5#define RETRY_COUNT             3#define DEAD_TIME               120#define L_DBG			1#define L_AUTH			2#define L_INFO			3#define L_ERR			4#define L_PROXY			5#define L_ACCT			6#define L_CONS			128#ifndef FALSE#define FALSE 0#endif#ifndef TRUE/* *	This definition of true as NOT false is definitive. :) Making *	it '1' can cause problems on stupid platforms.  See articles *	on C portability for more information. */#define TRUE (!FALSE)#endif/* for paircompare_register */typedef int (*RAD_COMPARE_FUNC)(void *instance, REQUEST *,VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);typedef enum request_fail_t {  REQUEST_FAIL_UNKNOWN = 0,  REQUEST_FAIL_NO_THREADS,	/* no threads to handle it */  REQUEST_FAIL_DECODE,		/* rad_decode didn't like it */  REQUEST_FAIL_PROXY,		/* call to proxy modules failed */  REQUEST_FAIL_PROXY_SEND,	/* proxy_send didn't like it */  REQUEST_FAIL_NO_RESPONSE,	/* we weren't told to respond, so we reject */  REQUEST_FAIL_HOME_SERVER,	/* the home server didn't respond */  REQUEST_FAIL_HOME_SERVER2,	/* another case of the above */  REQUEST_FAIL_HOME_SERVER3,	/* another case of the above */  REQUEST_FAIL_NORMAL_REJECT,	/* authentication failure */  REQUEST_FAIL_SERVER_TIMEOUT	/* the server took too long to process the request */} request_fail_t;/* *	Global variables. * *	We really shouldn't have this many. */extern const char	*progname;extern int		debug_flag;extern const char	*radacct_dir;extern const char	*radlog_dir;extern const char	*radlib_dir;extern const char	*radius_dir;extern const char	*radius_libdir;extern uint32_t		expiration_seconds;extern int		log_stripped_names;extern int		log_auth_detail;extern const char      *radiusd_version;void			radius_signal_self(int flag);#define RADIUS_SIGNAL_SELF_NONE		(0)#define RADIUS_SIGNAL_SELF_HUP		(1 << 0)#define RADIUS_SIGNAL_SELF_TERM		(1 << 1)#define RADIUS_SIGNAL_SELF_EXIT		(1 << 2)#define RADIUS_SIGNAL_SELF_DETAIL	(1 << 3)#define RADIUS_SIGNAL_SELF_NEW_FD	(1 << 4)#define RADIUS_SIGNAL_SELF_MAX		(1 << 5)/* *	Function prototypes. *//* acct.c */int		rad_accounting(REQUEST *);/* session.c */int		rad_check_ts(uint32_t nasaddr, unsigned int port, const char *user,			     const char *sessionid);int		session_zap(REQUEST *request, uint32_t nasaddr,			    unsigned int port, const char *user,			    const char *sessionid, uint32_t cliaddr,			    char proto,int session_time);/* radiusd.c */#undef debug_pairvoid		debug_pair(VALUE_PAIR *);void		debug_pair_list(VALUE_PAIR *);int		log_err (char *);/* util.c */void (*reset_signal(int signo, void (*func)(int)))(int);void		request_free(REQUEST **request);int		rad_mkdir(char *directory, int mode);int		rad_checkfilename(const char *filename);void		*rad_malloc(size_t size); /* calls exit(1) on error! */REQUEST		*request_alloc(void);REQUEST		*request_alloc_fake(REQUEST *oldreq);int		request_data_add(REQUEST *request,				 void *unique_ptr, int unique_int,				 void *opaque, void (*free_opaque)(void *));void		*request_data_get(REQUEST *request,				  void *unique_ptr, int unique_int);void		*request_data_reference(REQUEST *request,				  void *unique_ptr, int unique_int);int		rad_copy_string(char *dst, const char *src);int		rad_copy_variable(char *dst, const char *from);/* client.c */RADCLIENT_LIST	*clients_init(void);void		clients_free(RADCLIENT_LIST *clients);RADCLIENT_LIST	*clients_parse_section(CONF_SECTION *section);void		client_free(RADCLIENT *client);int		client_add(RADCLIENT_LIST *clients, RADCLIENT *client);RADCLIENT	*client_find(const RADCLIENT_LIST *clients,			     const fr_ipaddr_t *ipaddr);RADCLIENT	*client_findbynumber(const RADCLIENT_LIST *clients,				     int number);RADCLIENT	*client_find_old(const fr_ipaddr_t *ipaddr);/* files.c */int		pairlist_read(const char *file, PAIR_LIST **list, int complain);void		pairlist_free(PAIR_LIST **);/* version.c */void		version(void);/* log.c */int		vradlog(int, const char *, va_list ap);int		radlog(int, const char *, ...)#ifdef __GNUC__		__attribute__ ((format (printf, 2, 3)))#endif;int		log_debug(const char *, ...)#ifdef __GNUC__		__attribute__ ((format (printf, 1, 2)))#endif;void 		vp_listdebug(VALUE_PAIR *vp);/* auth.c */char	*auth_name(char *buf, size_t buflen, REQUEST *request, int do_cli);int		rad_authenticate (REQUEST *);int		rad_postauth(REQUEST *);/* exec.c */int		radius_exec_program(const char *,  REQUEST *, int,				    char *user_msg, int msg_len,				    VALUE_PAIR *input_pairs,				    VALUE_PAIR **output_pairs,					int shell_escape);/* timestr.c */int		timestr_match(char *, time_t);/* valuepair.c */int		paircompare_register(int attr, int otherattr,				     RAD_COMPARE_FUNC func,				     void *instance);void		paircompare_unregister(int attr, RAD_COMPARE_FUNC func);int		paircompare(REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,			    VALUE_PAIR **reply);void		pairxlatmove(REQUEST *, VALUE_PAIR **to, VALUE_PAIR **from);int radius_compare_vps(REQUEST *request, VALUE_PAIR *check, VALUE_PAIR *vp);int radius_callback_compare(REQUEST *req, VALUE_PAIR *request,			    VALUE_PAIR *check, VALUE_PAIR *check_pairs,			    VALUE_PAIR **reply_pairs);VALUE_PAIR	*radius_paircreate(REQUEST *request, VALUE_PAIR **vps,				  int attribute, int type);VALUE_PAIR *radius_pairmake(REQUEST *request, VALUE_PAIR **vps,			    const char *attribute, const char *value,			    int operator);/* xlat.c */typedef size_t (*RADIUS_ESCAPE_STRING)(char *out, size_t outlen, const char *in);int            radius_xlat(char * out, int outlen, const char *fmt,			   REQUEST * request, RADIUS_ESCAPE_STRING func);typedef size_t (*RAD_XLAT_FUNC)(void *instance, REQUEST *, char *, char *, size_t, RADIUS_ESCAPE_STRING func);int		xlat_register(const char *module, RAD_XLAT_FUNC func,			      void *instance);void		xlat_unregister(const char *module, RAD_XLAT_FUNC func);void		xlat_free(void);/* threads.c */extern		int thread_pool_init(CONF_SECTION *cs, int spawn_flag);extern		int thread_pool_addrequest(REQUEST *, RAD_REQUEST_FUNP);extern		pid_t rad_fork(void);extern		pid_t rad_waitpid(pid_t pid, int *status);extern          int total_active_threads(void);extern          void thread_pool_lock(void);extern          void thread_pool_unlock(void);#ifndef HAVE_PTHREAD_H#define rad_fork(n) fork()#define rad_waitpid(a,b) waitpid(a,b, 0)#endif/* mainconfig.c *//* Define a global config structure */extern struct main_config_t mainconfig;int read_mainconfig(int reload);int free_mainconfig(void);/* listen.c */void listen_free(rad_listen_t **head);int listen_init(CONF_SECTION *cs, rad_listen_t **head);rad_listen_t *proxy_new_listener(void);RADCLIENT *client_listener_find(const rad_listen_t *listener,				const fr_ipaddr_t *ipaddr);/* event.c */int radius_event_init(CONF_SECTION *cs, int spawn_flag);void radius_event_free(void);int radius_event_process(void);void radius_handle_request(REQUEST *request, RAD_REQUEST_FUNP fun);int received_request(rad_listen_t *listener,		     RADIUS_PACKET *packet, REQUEST **prequest,		     RADCLIENT *client);REQUEST *received_proxy_response(RADIUS_PACKET *packet);/* evaluate.c */int radius_evaluate_condition(REQUEST *request, int modreturn, int depth,			      const char **ptr, int evaluate_it, int *presult);int radius_update_attrlist(REQUEST *request, CONF_SECTION *cs,			   VALUE_PAIR *input_vps, const char *name);void radius_pairmove(REQUEST *request, VALUE_PAIR **to, VALUE_PAIR *from);#endif /*RADIUSD_H*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -