configure.in pthread.h and libpthread
[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              *password;
36         char                    secret[32];
37         child_pid_t             child_pid;
38         time_t                  timestamp;
39         int                     finished;
40         struct auth_req         *next;
41 } REQUEST;
42
43 typedef struct client {
44         UINT4                   ipaddr;
45         char                    longname[256];
46         u_char                  secret[32];
47         char                    shortname[32];
48         struct client           *next;
49 } CLIENT;
50
51 typedef struct nas {
52         UINT4                   ipaddr;
53         char                    longname[256];
54         char                    shortname[32];
55         char                    nastype[32];
56         struct nas              *next;
57 } NAS;
58
59 typedef struct realm {
60         char                    realm[64];
61         char                    server[64];
62         UINT4                   ipaddr;
63         int                     auth_port;
64         int                     acct_port;
65         int                     striprealm;
66         int                     trusted;
67         struct realm            *next;
68 } REALM;
69
70 typedef struct pair_list {
71         char                    *name;
72         VALUE_PAIR              *check;
73         VALUE_PAIR              *reply;
74         int                     lineno;
75         struct pair_list        *next;
76 } PAIR_LIST;
77
78 #define DEBUG   if(debug_flag)log_debug
79 #define DEBUG2  if (debug_flag > 1)log_debug
80
81 #define SECONDS_PER_DAY         86400
82 #define MAX_REQUEST_TIME        30
83 #define CLEANUP_DELAY           5
84 #define MAX_REQUESTS            255
85
86 #define L_DBG                   1
87 #define L_AUTH                  2
88 #define L_INFO                  3
89 #define L_ERR                   4
90 #define L_PROXY                 5
91 #define L_CONS                  128
92
93 #ifndef FALSE
94 #  define FALSE 0
95 #endif
96 #ifndef TRUE
97 #  define TRUE 1
98 #endif
99
100 /* for paircompare_register */
101 typedef int (*COMPARE)(VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);
102
103 /*
104  *      Global variables.
105  */
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;
114 extern int              use_dbm;
115 extern int              log_stripped_names;
116 extern int              cache_passwd;
117 extern UINT4            myip;
118 extern int              log_auth_detail;
119 extern int              log_auth;
120 extern int              log_auth_pass;
121 extern int              auth_port;
122 extern int              acct_port;
123 extern int              proxy_port;
124 extern int              proxyfd;
125
126 /*
127  *      Function prototypes.
128  */
129
130 /* acct.c */
131 int             rad_accounting(REQUEST *);
132
133 /* radutmp.c */
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);
137
138 /* radiusd.c */
139 void            debug_pair(FILE *, VALUE_PAIR *);
140 int             log_err (char *);
141 void            sig_cleanup(int);
142
143 /* util.c */
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
148 #endif
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);
154
155 /* files.c */
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);
163
164 /* nas.c */
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);
170
171 /* version.c */
172 void            version(void);
173
174 /* log.c */
175 int             log(int, const char *, ...);
176 int             log_debug(const char *, ...);
177
178 /* pam.c */
179 #ifdef WITH_PAM
180 int             pam_pass(char *name, char *passwd, const char *pamauth);
181 #define PAM_DEFAULT_TYPE    "radius"
182 #endif
183
184 /* proxy.c */
185 int proxy_send(REQUEST *request);
186 int proxy_receive(REQUEST *request);
187
188 /* auth.c */
189 char            *auth_name(REQUEST *request, int do_cli);
190 int             rad_mangle(REQUEST *request);
191 int             rad_authenticate (REQUEST *);
192
193 /* exec.c */
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);
197
198 /* timestr.c */
199 int             timestr_match(char *, time_t);
200
201 /* valuepair.c */
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,
205                         VALUE_PAIR **reply);
206 void            pair_builtincompare_init(void);
207
208 /* xlat.c */
209 int            radius_xlat2(char * out, int outlen, char *str,
210                             REQUEST * request, VALUE_PAIR *reply);