Initial revision
[freeradius.git] / src / include / radiusd.h
1 /*
2  * radiusd.h    Structures, prototypes and global variables
3  *              for the Cistron Radius server.
4  *
5  * Version:     @(#)radiusd.h  2.00  19-Jul-1999  miquels@cistron.nl
6  *
7  */
8
9 #include "libradius.h"
10 #include "conf.h"
11
12 #define CHAP_VALUE_LENGTH               16
13
14 #define PW_AUTH_UDP_PORT                1645
15 #define PW_ACCT_UDP_PORT                1646
16
17 typedef struct auth_req {
18         RADIUS_PACKET           *packet;
19         RADIUS_PACKET           *proxy;
20         char                    username[MAX_STRING_LEN];
21         char                    secret[32];
22         int                     child_pid;
23         time_t                  timestamp;
24         int                     finished;
25         struct auth_req         *next;
26 } REQUEST;
27
28 typedef struct client {
29         UINT4                   ipaddr;
30         char                    longname[256];
31         u_char                  secret[32];
32         char                    shortname[32];
33         struct client           *next;
34 } CLIENT;
35
36 typedef struct nas {
37         UINT4                   ipaddr;
38         char                    longname[256];
39         char                    shortname[32];
40         char                    nastype[32];
41         struct nas              *next;
42 } NAS;
43
44 typedef struct realm {
45         char                    realm[64];
46         char                    server[64];
47         UINT4                   ipaddr;
48         int                     auth_port;
49         int                     acct_port;
50         int                     striprealm;
51         struct realm            *next;
52 } REALM;
53
54 typedef struct pair_list {
55         char                    *name;
56         VALUE_PAIR              *check;
57         VALUE_PAIR              *reply;
58         int                     lineno;
59         struct pair_list        *next;
60 } PAIR_LIST;
61
62 #define DEBUG   if(debug_flag)log_debug
63 #define DEBUG2  if (debug_flag > 1)log_debug
64
65 #define SECONDS_PER_DAY         86400
66 #define MAX_REQUEST_TIME        30
67 #define CLEANUP_DELAY           5
68 #define MAX_REQUESTS            255
69
70 #define L_DBG                   1
71 #define L_AUTH                  2
72 #define L_INFO                  3
73 #define L_ERR                   4
74 #define L_PROXY                 5
75 #define L_CONS                  128
76
77 #ifndef FALSE
78 #  define FALSE 0
79 #endif
80 #ifndef TRUE
81 #  define TRUE 1
82 #endif
83
84 /* for paircompare_register */
85 typedef int (*COMPARE)(VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);
86
87 /*
88  *      Global variables.
89  */
90 extern char             *progname;
91 extern int              debug_flag;
92 extern char             *radacct_dir;
93 extern char             *radius_dir;
94 extern char             *radius_libdir;
95 extern UINT4            expiration_seconds;
96 extern int              radius_pid;
97 extern int              use_dbm;
98 extern int              log_stripped_names;
99 extern int              cache_passwd;
100 extern UINT4            myip;
101 extern int              log_auth_detail;
102 extern int              log_auth;
103 extern int              log_auth_pass;
104 extern int              auth_port;
105 extern int              acct_port;
106
107 /*
108  *      Function prototypes.
109  */
110
111 /* acct.c */
112 int             rad_accounting(REQUEST *, int);
113
114 /* radutmp.c */
115 int             radutmp_add(REQUEST *);
116 int             radutmp_zap(UINT4 nas, int port, char *user, time_t t);
117 int             radutmp_checksimul(char *name, VALUE_PAIR *, int maxsimul);
118
119 /* radiusd.c */
120 void            debug_pair(FILE *, VALUE_PAIR *);
121 int             log_err (char *);
122 void            sig_cleanup(int);
123
124 /* util.c */
125 struct passwd   *rad_getpwnam(char *);
126 #if defined (sun) && defined(__svr4__)
127 void            (*sun_signal(int signo, void (*func)(int)))(int);
128 #define signal sun_signal
129 #endif
130 void            request_free(REQUEST *request);
131 RADIUS_PACKET * build_reply(int code, REQUEST *request,
132                         VALUE_PAIR *vps, char *user_msg);
133
134 /* files.c */
135 CLIENT          *client_find(UINT4 ipno);
136 char            *client_name(UINT4 ipno);
137 int             read_clients_file(char *);
138 REALM           *realm_find(char *);
139 PAIR_LIST       *pairlist_read(char *file, int complain);
140 void            pairlist_free(PAIR_LIST **);
141 int             read_config_files(void);
142
143 /* nas.c */
144 int             read_naslist_file(char *);
145 NAS             *nas_find(UINT4 ipno);
146 char            *nas_name(UINT4 ipno);
147 char            *nas_name2(RADIUS_PACKET *r);
148 NAS             *nas_findbyname(char *nasname);
149
150 /* version.c */
151 void            version();
152
153 /* log.c */
154 int             log(int, char *, ...);
155 int             log_debug(char *, ...);
156
157 /* pam.c */
158 #ifdef WITH_PAM
159 int             pam_pass(char *name, char *passwd, const char *pamauth);
160 #define PAM_DEFAULT_TYPE    "radius"
161 #endif
162
163 /* proxy.c */
164 int proxy_send(REQUEST *request, int activefd);
165 int proxy_receive(REQUEST *request, int activefd);
166
167 /* auth.c */
168 char            *auth_name(REQUEST *request, int do_cli);
169 int             rad_mangle(REQUEST *request);
170 int             rad_authenticate (REQUEST *, int);
171
172 /* exec.c */
173 char            *radius_xlate(char *, VALUE_PAIR *req, VALUE_PAIR *reply);
174 int             radius_exec_program(char *, VALUE_PAIR *, VALUE_PAIR **,
175                         int, char **user_msg);
176
177 /* timestr.c */
178 int             timestr_match(char *, time_t);
179
180 /* valuepair.c */
181 int             paircompare_register(int attr, int otherattr, COMPARE func);
182 void            paircompare_unregister(int attr, COMPARE func);
183 int             paircmp(VALUE_PAIR *request, VALUE_PAIR *check,
184                         VALUE_PAIR **reply);
185 void            pair_builtincompare_init(void);
186