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];
38 child_pid_t child_pid;
41 struct auth_req *prev;
42 struct auth_req *next;
45 typedef struct client {
61 typedef struct realm {
72 typedef struct pair_list {
77 struct pair_list *next;
80 #define DEBUG if(debug_flag)log_debug
81 #define DEBUG2 if (debug_flag > 1)log_debug
83 #define SECONDS_PER_DAY 86400
84 #define MAX_REQUEST_TIME 30
85 #define CLEANUP_DELAY 5
86 #define MAX_REQUESTS 255
102 /* for paircompare_register */
103 typedef int (*COMPARE)(VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);
108 extern const char *progname;
109 extern int debug_flag;
110 extern const char *radacct_dir;
111 extern const char *radlog_dir;
112 extern const char *radius_dir;
113 extern const char *radius_libdir;
114 extern UINT4 expiration_seconds;
115 extern int radius_pid;
117 extern int log_stripped_names;
118 extern int cache_passwd;
120 extern int log_auth_detail;
122 extern int log_auth_pass;
123 extern int auth_port;
124 extern int acct_port;
125 extern int proxy_port;
129 * Function prototypes.
133 int rad_accounting(REQUEST *);
136 int radutmp_add(REQUEST *);
137 int radutmp_zap(UINT4 nas, int port, char *user, time_t t);
138 int radutmp_checksimul(char *name, VALUE_PAIR *, int maxsimul);
141 void debug_pair(FILE *, VALUE_PAIR *);
142 int log_err (char *);
143 void sig_cleanup(int);
146 struct passwd *rad_getpwnam(const char *);
147 #if defined (sun) && defined(__svr4__)
148 void (*sun_signal(int signo, void (*func)(int)))(int);
149 #define signal sun_signal
151 void request_free(REQUEST *request);
152 RADIUS_PACKET * build_reply(int code, REQUEST *request,
153 VALUE_PAIR *vps, const char *user_msg);
154 VALUE_PAIR *rad_get_username(REQUEST *request);
155 int rad_put_username(REQUEST *request, const char *username, int length);
158 CLIENT *client_find(UINT4 ipno);
159 char *client_name(UINT4 ipno);
160 int read_clients_file(const char *);
161 REALM *realm_find(const char *);
162 PAIR_LIST *pairlist_read(const char *file, int complain);
163 void pairlist_free(PAIR_LIST **);
164 int read_config_files(void);
167 int read_naslist_file(char *);
168 NAS *nas_find(UINT4 ipno);
169 char *nas_name(UINT4 ipno);
170 char *nas_name2(RADIUS_PACKET *r);
171 NAS *nas_findbyname(char *nasname);
177 int log(int, const char *, ...);
178 int log_debug(const char *, ...);
182 int pam_pass(char *name, char *passwd, const char *pamauth);
183 #define PAM_DEFAULT_TYPE "radius"
187 int proxy_send(REQUEST *request);
188 int proxy_receive(REQUEST *request);
191 char *auth_name(REQUEST *request, int do_cli);
192 int rad_authenticate (REQUEST *);
195 char *radius_xlate(const char *, VALUE_PAIR *req, VALUE_PAIR *reply);
196 int radius_exec_program(const char *, VALUE_PAIR *, VALUE_PAIR **,
197 int, const char **user_msg);
200 int timestr_match(char *, time_t);
203 int paircompare_register(int attr, int otherattr, COMPARE func);
204 void paircompare_unregister(int attr, COMPARE func);
205 int paircmp(VALUE_PAIR *request, VALUE_PAIR *check,
207 void pair_builtincompare_init(void);
210 int radius_xlat2(char * out, int outlen, char *str,
211 REQUEST * request, VALUE_PAIR *reply);