2 * radiusd.h Structures, prototypes and global variables
3 * for the Cistron Radius server.
17 typedef pthread_t child_pid_t ;
19 typedef pid_t child_pid_t;
23 /* FIX when threading is done! */
24 typedef pid_t child_pid_t;
27 #define NO_SUCH_CHILD_PID (0)
29 typedef struct auth_req {
30 RADIUS_PACKET *packet;
33 VALUE_PAIR *config_items;
34 char username[MAX_STRING_LEN];
37 child_pid_t child_pid;
40 struct auth_req *next;
43 typedef struct client {
59 typedef struct realm {
70 typedef struct pair_list {
75 struct pair_list *next;
78 #define DEBUG if(debug_flag)log_debug
79 #define DEBUG2 if (debug_flag > 1)log_debug
81 #define SECONDS_PER_DAY 86400
82 #define MAX_REQUEST_TIME 30
83 #define CLEANUP_DELAY 5
84 #define MAX_REQUESTS 255
100 /* for paircompare_register */
101 typedef int (*COMPARE)(VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);
106 extern const char *progname;
107 extern int debug_flag;
108 extern const char *radacct_dir;
109 extern const char *radlog_dir;
110 extern const char *radius_dir;
111 extern const char *radius_libdir;
112 extern UINT4 expiration_seconds;
113 extern int radius_pid;
115 extern int log_stripped_names;
116 extern int cache_passwd;
118 extern int log_auth_detail;
120 extern int log_auth_pass;
121 extern int auth_port;
122 extern int acct_port;
123 extern int proxy_port;
127 * Function prototypes.
131 int rad_accounting(REQUEST *);
134 int radutmp_add(REQUEST *);
135 int radutmp_zap(UINT4 nas, int port, char *user, time_t t);
136 int radutmp_checksimul(char *name, VALUE_PAIR *, int maxsimul);
139 void debug_pair(FILE *, VALUE_PAIR *);
140 int log_err (char *);
141 void sig_cleanup(int);
144 struct passwd *rad_getpwnam(const char *);
145 #if defined (sun) && defined(__svr4__)
146 void (*sun_signal(int signo, void (*func)(int)))(int);
147 #define signal sun_signal
149 void request_free(REQUEST *request);
150 RADIUS_PACKET * build_reply(int code, REQUEST *request,
151 VALUE_PAIR *vps, const char *user_msg);
152 VALUE_PAIR *rad_get_username(REQUEST *request);
153 int rad_put_username(REQUEST *request, const char *username, int length);
156 CLIENT *client_find(UINT4 ipno);
157 char *client_name(UINT4 ipno);
158 int read_clients_file(const char *);
159 REALM *realm_find(const char *);
160 PAIR_LIST *pairlist_read(const char *file, int complain);
161 void pairlist_free(PAIR_LIST **);
162 int read_config_files(void);
165 int read_naslist_file(char *);
166 NAS *nas_find(UINT4 ipno);
167 char *nas_name(UINT4 ipno);
168 char *nas_name2(RADIUS_PACKET *r);
169 NAS *nas_findbyname(char *nasname);
175 int log(int, const char *, ...);
176 int log_debug(const char *, ...);
180 int pam_pass(char *name, char *passwd, const char *pamauth);
181 #define PAM_DEFAULT_TYPE "radius"
185 int proxy_send(REQUEST *request);
186 int proxy_receive(REQUEST *request);
189 char *auth_name(REQUEST *request, int do_cli);
190 int rad_mangle(REQUEST *request);
191 int rad_authenticate (REQUEST *);
194 char *radius_xlate(const char *, VALUE_PAIR *req, VALUE_PAIR *reply);
195 int radius_exec_program(const char *, VALUE_PAIR *, VALUE_PAIR **,
196 int, const char **user_msg);
199 int timestr_match(char *, time_t);
202 int paircompare_register(int attr, int otherattr, COMPARE func);
203 void paircompare_unregister(int attr, COMPARE func);
204 int paircmp(VALUE_PAIR *request, VALUE_PAIR *check,
206 void pair_builtincompare_init(void);
209 int radius_xlat2(char * out, int outlen, char *str,
210 REQUEST * request, VALUE_PAIR *reply);