include/radiusd.h
[freeradius.git] / src / include / radiusd.h
1 /*
2  * radiusd.h    Structures, prototypes and global variables
3  *              for the Cistron Radius server.
4  *
5  * Version:     $Id$
6  *
7  */
8
9 #include "libradius.h"
10 #include "radpaths.h"
11 #include "conf.h"
12 #include "missing.h"
13
14 #if 0
15 #if HAVE_PTHREAD_H
16 #include        <pthread.h>
17 typedef pthread_t child_pid_t ;
18 #else
19 typedef pid_t child_pid_t;
20 #endif
21
22 #else
23 /* FIX when threading is done! */
24 typedef pid_t child_pid_t;
25 #endif
26
27 #define NO_SUCH_CHILD_PID (0)
28
29 typedef struct auth_req {
30         RADIUS_PACKET           *packet;
31         RADIUS_PACKET           *proxy;
32         RADIUS_PACKET           *reply;
33         VALUE_PAIR              *config_items;
34         char                    username[MAX_STRING_LEN];
35         VALUE_PAIR              *name;
36         VALUE_PAIR              *password;
37         char                    secret[32];
38         child_pid_t             child_pid;
39         time_t                  timestamp;
40         int                     finished;
41         struct auth_req         *prev;
42         struct auth_req         *next;
43 } REQUEST;
44
45 typedef struct client {
46         UINT4                   ipaddr;
47         char                    longname[256];
48         u_char                  secret[32];
49         char                    shortname[32];
50         struct client           *next;
51 } CLIENT;
52
53 typedef struct nas {
54         UINT4                   ipaddr;
55         char                    longname[256];
56         char                    shortname[32];
57         char                    nastype[32];
58         struct nas              *next;
59 } NAS;
60
61 typedef struct realm {
62         char                    realm[64];
63         char                    server[64];
64         UINT4                   ipaddr;
65         int                     auth_port;
66         int                     acct_port;
67         int                     striprealm;
68         int                     trusted;
69         struct realm            *next;
70 } REALM;
71
72 typedef struct pair_list {
73         char                    *name;
74         VALUE_PAIR              *check;
75         VALUE_PAIR              *reply;
76         int                     lineno;
77         struct pair_list        *next;
78 } PAIR_LIST;
79
80 #define DEBUG   if(debug_flag)log_debug
81 #define DEBUG2  if (debug_flag > 1)log_debug
82
83 #define SECONDS_PER_DAY         86400
84 #define MAX_REQUEST_TIME        30
85 #define CLEANUP_DELAY           5
86 #define MAX_REQUESTS            255
87
88 #define L_DBG                   1
89 #define L_AUTH                  2
90 #define L_INFO                  3
91 #define L_ERR                   4
92 #define L_PROXY                 5
93 #define L_CONS                  128
94
95 #ifndef FALSE
96 #  define FALSE 0
97 #endif
98 #ifndef TRUE
99 #  define TRUE 1
100 #endif
101
102 /* for paircompare_register */
103 typedef int (*COMPARE)(VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);
104
105 /*
106  *      Global variables.
107  */
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;
116 extern int              use_dbm;
117 extern int              log_stripped_names;
118 extern int              cache_passwd;
119 extern UINT4            myip;
120 extern int              log_auth_detail;
121 extern int              log_auth;
122 extern int              log_auth_pass;
123 extern int              auth_port;
124 extern int              acct_port;
125 extern int              proxy_port;
126 extern int              proxyfd;
127
128 /*
129  *      Function prototypes.
130  */
131
132 /* acct.c */
133 int             rad_accounting(REQUEST *);
134
135 /* radutmp.c */
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);
139
140 /* radiusd.c */
141 void            debug_pair(FILE *, VALUE_PAIR *);
142 int             log_err (char *);
143 void            sig_cleanup(int);
144
145 /* util.c */
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
150 #endif
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);
156
157 /* files.c */
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);
165
166 /* nas.c */
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);
172
173 /* version.c */
174 void            version(void);
175
176 /* log.c */
177 int             log(int, const char *, ...);
178 int             log_debug(const char *, ...);
179
180 /* pam.c */
181 #ifdef WITH_PAM
182 int             pam_pass(char *name, char *passwd, const char *pamauth);
183 #define PAM_DEFAULT_TYPE    "radius"
184 #endif
185
186 /* proxy.c */
187 int proxy_send(REQUEST *request);
188 int proxy_receive(REQUEST *request);
189
190 /* auth.c */
191 char            *auth_name(REQUEST *request, int do_cli);
192 int             rad_authenticate (REQUEST *);
193
194 /* exec.c */
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);
198
199 /* timestr.c */
200 int             timestr_match(char *, time_t);
201
202 /* valuepair.c */
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,
206                         VALUE_PAIR **reply);
207 void            pair_builtincompare_init(void);
208
209 /* xlat.c */
210 int            radius_xlat2(char * out, int outlen, char *str,
211                             REQUEST * request, VALUE_PAIR *reply);