include/radiusd.h new global variables proxy_port and proxyfd
[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 typedef struct auth_req {
15         RADIUS_PACKET           *packet;
16         RADIUS_PACKET           *proxy;
17         RADIUS_PACKET           *reply;
18         VALUE_PAIR              *config_items;
19         char                    username[MAX_STRING_LEN];
20         VALUE_PAIR              *password;
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         int                     trusted;
52         struct realm            *next;
53 } REALM;
54
55 typedef struct pair_list {
56         char                    *name;
57         VALUE_PAIR              *check;
58         VALUE_PAIR              *reply;
59         int                     lineno;
60         struct pair_list        *next;
61 } PAIR_LIST;
62
63 #define DEBUG   if(debug_flag)log_debug
64 #define DEBUG2  if (debug_flag > 1)log_debug
65
66 #define SECONDS_PER_DAY         86400
67 #define MAX_REQUEST_TIME        30
68 #define CLEANUP_DELAY           5
69 #define MAX_REQUESTS            255
70
71 #define L_DBG                   1
72 #define L_AUTH                  2
73 #define L_INFO                  3
74 #define L_ERR                   4
75 #define L_PROXY                 5
76 #define L_CONS                  128
77
78 #ifndef FALSE
79 #  define FALSE 0
80 #endif
81 #ifndef TRUE
82 #  define TRUE 1
83 #endif
84
85 /* for paircompare_register */
86 typedef int (*COMPARE)(VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);
87
88 /*
89  *      Global variables.
90  */
91 extern const char       *progname;
92 extern int              debug_flag;
93 extern const char       *radacct_dir;
94 extern const char       *radlog_dir;
95 extern const char       *radius_dir;
96 extern const char       *radius_libdir;
97 extern UINT4            expiration_seconds;
98 extern int              radius_pid;
99 extern int              use_dbm;
100 extern int              log_stripped_names;
101 extern int              cache_passwd;
102 extern UINT4            myip;
103 extern int              log_auth_detail;
104 extern int              log_auth;
105 extern int              log_auth_pass;
106 extern int              auth_port;
107 extern int              acct_port;
108 extern int              proxy_port;
109 extern int              proxyfd;
110
111 /*
112  *      Function prototypes.
113  */
114
115 /* acct.c */
116 int             rad_accounting(REQUEST *);
117
118 /* radutmp.c */
119 int             radutmp_add(REQUEST *);
120 int             radutmp_zap(UINT4 nas, int port, char *user, time_t t);
121 int             radutmp_checksimul(char *name, VALUE_PAIR *, int maxsimul);
122
123 /* radiusd.c */
124 void            debug_pair(FILE *, VALUE_PAIR *);
125 int             log_err (char *);
126 void            sig_cleanup(int);
127
128 /* util.c */
129 struct passwd   *rad_getpwnam(const char *);
130 #if defined (sun) && defined(__svr4__)
131 void            (*sun_signal(int signo, void (*func)(int)))(int);
132 #define signal sun_signal
133 #endif
134 void            request_free(REQUEST *request);
135 RADIUS_PACKET * build_reply(int code, REQUEST *request,
136                         VALUE_PAIR *vps, const char *user_msg);
137 VALUE_PAIR      *rad_get_username(REQUEST *request);
138 int             rad_put_username(REQUEST *request, const char *username, int length);
139
140 /* files.c */
141 CLIENT          *client_find(UINT4 ipno);
142 char            *client_name(UINT4 ipno);
143 int             read_clients_file(const char *);
144 REALM           *realm_find(const char *);
145 PAIR_LIST       *pairlist_read(const char *file, int complain);
146 void            pairlist_free(PAIR_LIST **);
147 int             read_config_files(void);
148
149 /* nas.c */
150 int             read_naslist_file(char *);
151 NAS             *nas_find(UINT4 ipno);
152 char            *nas_name(UINT4 ipno);
153 char            *nas_name2(RADIUS_PACKET *r);
154 NAS             *nas_findbyname(char *nasname);
155
156 /* version.c */
157 void            version(void);
158
159 /* log.c */
160 int             log(int, const char *, ...);
161 int             log_debug(const char *, ...);
162
163 /* pam.c */
164 #ifdef WITH_PAM
165 int             pam_pass(char *name, char *passwd, const char *pamauth);
166 #define PAM_DEFAULT_TYPE    "radius"
167 #endif
168
169 /* proxy.c */
170 int proxy_send(REQUEST *request);
171 int proxy_receive(REQUEST *request);
172
173 /* auth.c */
174 char            *auth_name(REQUEST *request, int do_cli);
175 int             rad_mangle(REQUEST *request);
176 int             rad_authenticate (REQUEST *);
177
178 /* exec.c */
179 char            *radius_xlate(const char *, VALUE_PAIR *req, VALUE_PAIR *reply);
180 int             radius_exec_program(const char *, VALUE_PAIR *, VALUE_PAIR **,
181                         int, const char **user_msg);
182
183 /* timestr.c */
184 int             timestr_match(char *, time_t);
185
186 /* valuepair.c */
187 int             paircompare_register(int attr, int otherattr, COMPARE func);
188 void            paircompare_unregister(int attr, COMPARE func);
189 int             paircmp(VALUE_PAIR *request, VALUE_PAIR *check,
190                         VALUE_PAIR **reply);
191 void            pair_builtincompare_init(void);
192
193 /* xlat.c */
194 int            radius_xlat2(char * out, int outlen, char *str,
195                             REQUEST * request, VALUE_PAIR *reply);