added a bunch of 'const'
[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 #define CHAP_VALUE_LENGTH               16
15
16 typedef struct auth_req {
17         RADIUS_PACKET           *packet;
18         RADIUS_PACKET           *proxy;
19         RADIUS_PACKET           *reply;
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 const char       *radacct_dir;
93 extern const char       *radlog_dir;
94 extern const char       *radius_dir;
95 extern const char       *radius_libdir;
96 extern UINT4            expiration_seconds;
97 extern int              radius_pid;
98 extern int              use_dbm;
99 extern int              log_stripped_names;
100 extern int              cache_passwd;
101 extern UINT4            myip;
102 extern int              log_auth_detail;
103 extern int              log_auth;
104 extern int              log_auth_pass;
105 extern int              auth_port;
106 extern int              acct_port;
107
108 /*
109  *      Function prototypes.
110  */
111
112 /* acct.c */
113 int             rad_accounting(REQUEST *);
114
115 /* radutmp.c */
116 int             radutmp_add(REQUEST *);
117 int             radutmp_zap(UINT4 nas, int port, char *user, time_t t);
118 int             radutmp_checksimul(char *name, VALUE_PAIR *, int maxsimul);
119
120 /* radiusd.c */
121 void            debug_pair(FILE *, VALUE_PAIR *);
122 int             log_err (char *);
123 void            sig_cleanup(int);
124
125 /* util.c */
126 struct passwd   *rad_getpwnam(char *);
127 #if defined (sun) && defined(__svr4__)
128 void            (*sun_signal(int signo, void (*func)(int)))(int);
129 #define signal sun_signal
130 #endif
131 void            request_free(REQUEST *request);
132 RADIUS_PACKET * build_reply(int code, REQUEST *request,
133                         VALUE_PAIR *vps, char *user_msg);
134 VALUE_PAIR      *rad_get_username(REQUEST *request);
135 int             rad_put_username(REQUEST *request, char *username, int length);
136
137 /* files.c */
138 CLIENT          *client_find(UINT4 ipno);
139 char            *client_name(UINT4 ipno);
140 int             read_clients_file(char *);
141 REALM           *realm_find(char *);
142 PAIR_LIST       *pairlist_read(const char *file, int complain);
143 void            pairlist_free(PAIR_LIST **);
144 int             read_config_files(void);
145
146 /* nas.c */
147 int             read_naslist_file(char *);
148 NAS             *nas_find(UINT4 ipno);
149 char            *nas_name(UINT4 ipno);
150 char            *nas_name2(RADIUS_PACKET *r);
151 NAS             *nas_findbyname(char *nasname);
152
153 /* version.c */
154 void            version(void);
155
156 /* log.c */
157 int             log(int, const char *, ...);
158 int             log_debug(const char *, ...);
159
160 /* pam.c */
161 #ifdef WITH_PAM
162 int             pam_pass(char *name, char *passwd, const char *pamauth);
163 #define PAM_DEFAULT_TYPE    "radius"
164 #endif
165
166 /* proxy.c */
167 int proxy_send(REQUEST *request);
168 int proxy_receive(REQUEST *request);
169
170 /* auth.c */
171 char            *auth_name(REQUEST *request, int do_cli);
172 int             rad_mangle(REQUEST *request);
173 int             rad_authenticate (REQUEST *);
174
175 /* exec.c */
176 char            *radius_xlate(char *, VALUE_PAIR *req, VALUE_PAIR *reply);
177 int             radius_exec_program(char *, VALUE_PAIR *, VALUE_PAIR **,
178                         int, char **user_msg);
179
180 /* timestr.c */
181 int             timestr_match(char *, time_t);
182
183 /* valuepair.c */
184 int             paircompare_register(int attr, int otherattr, COMPARE func);
185 void            paircompare_unregister(int attr, COMPARE func);
186 int             paircmp(VALUE_PAIR *request, VALUE_PAIR *check,
187                         VALUE_PAIR **reply);
188 void            pair_builtincompare_init(void);
189
190 /* xlat.c */
191 int            radius_xlat2(char * out, int outlen, char *str,
192                             REQUEST * request, VALUE_PAIR *reply);