The FreeRADIUS server $Id: a4e7f8c94e8038b7627bcf52356b7ed15955c1d7 $
Loading...
Searching...
No Matches
radius.h
Go to the documentation of this file.
1#pragma once
2/*
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
16 */
17
18/*
19 * $Id: fc3d741e84d3d5eb980f1c5166dbe27560cb8f96 $
20 *
21 * @file protocols/radius/radius.h
22 * @brief Structures and prototypes for base RADIUS functionality.
23 *
24 * @copyright 1999-2017 The FreeRADIUS server project
25 */
26#include <freeradius-devel/radius/defs.h>
27#include <freeradius-devel/util/packet.h>
28#include <freeradius-devel/util/rand.h>
29#include <freeradius-devel/util/log.h>
30#include <freeradius-devel/util/dbuff.h>
31#include <freeradius-devel/io/test_point.h>
32
33#define RADIUS_AUTH_VECTOR_OFFSET 4
34#define RADIUS_HEADER_LENGTH 20
35#define RADIUS_MAX_STRING_LENGTH 253
36#define RADIUS_MAX_TUNNEL_PASSWORD_LENGTH 249
37#define RADIUS_AUTH_VECTOR_LENGTH 16
38#define RADIUS_MESSAGE_AUTHENTICATOR_LENGTH 16
39#define RADIUS_MAX_ATTRIBUTES 255
40#define RADIUS_MAX_PACKET_SIZE 4096
41
42#define RADIUS_VENDORPEC_USR 429
43#define RADIUS_VENDORPEC_LUCENT 4846
44#define RADIUS_VENDORPEC_STARENT 8164
45
46/*
47 * protocols/radius/base.c
48 */
49
50
51#define FR_RADIUS_PACKET_CODE_VALID(_x) ((_x > 0) && (_x < FR_RADIUS_CODE_MAX))
52
53#define AUTH_PASS_LEN (RADIUS_AUTH_VECTOR_LENGTH)
54
55#define FR_TUNNEL_FR_ENC_LENGTH(_x) (2 + 1 + _x + PAD(_x + 1, 16))
56
57/** Control whether Message-Authenticator is required in Access-Requests
58 *
59 * @note Don't change the enum values. They allow efficient bistmasking.
60 */
61typedef enum : uint8_t {
62 FR_RADIUS_REQUIRE_MA_NO = 0x00, //!< Do not require Message-Authenticator
63 FR_RADIUS_REQUIRE_MA_YES = 0x01, //!< Require Message-Authenticator
64 FR_RADIUS_REQUIRE_MA_AUTO = 0x02, //!< Only require Message-Authenticator if we've previously
65 ///< received a packet from this client with Message-Authenticator.
66 ///< @note This isn't used by the radius protocol code, but may be used
67 ///< to drive logic in modules.
68
70
71/** Control whether Proxy-State is allowed in Access-Requests
72 *
73 * @note Don't change the enum values. They allow efficient bistmasking.
74 */
75typedef enum : uint8_t {
76 FR_RADIUS_LIMIT_PROXY_STATE_NO = 0x00, //!< Do not limit Proxy-State. Allow proxy-state to be sent in
77 ///< all packets.
78 FR_RADIUS_LIMIT_PROXY_STATE_YES = 0x01, //!< Limit Proxy-State. Do not allow Proxy-State to be sent in
79 ///< packets which do not have a Message-Authenticator attribute.
80
81 FR_RADIUS_LIMIT_PROXY_STATE_AUTO = 0x02, //!< Do not allow Proxy-State unless:
82 ///< - All packets received from a client have containted proxy state.
83 ///< - The client has sent a packet with a Message-Authenticator.
84 ///< @note This isn't used by the radius protocol code, but may be used
85 ///< to drive logic in modules.
87
88/** Failure reasons */
118
120
125
126typedef struct {
127 char const *secret;
129
130 bool secure_transport; //!< for TLS
131
132 uint64_t proxy_state;
134
135typedef struct {
137
139
140 fr_fast_rand_t rand_ctx; //!< for tunnel passwords
141
142 uint8_t tag; //!< current tag for encoding
143
145
148
149 bool add_proxy_state; //!< do we add a Proxy-State?
151 bool foreign; //!< are we in a foreign protocol?
152#ifdef NAS_VIOLATES_RFC
153 bool allow_vulnerable_clients; //!< for vendors who violate the RFCs.
154#endif
155
157
158typedef struct {
160
162
163 TALLOC_CTX *tmp_ctx; //!< for temporary things cleaned up during decoding
164 uint8_t const *end; //!< end of the packet
165
166 fr_radius_decode_fail_t reason; //!< reason for decode failure
167
168 uint8_t request_code; //!< original code for the request.
169
170 bool tunnel_password_zeros; //!< check for trailing zeros on decode
171 bool verify; //!< can skip verify for dynamic clients
173 bool limit_proxy_state; //!< Don't allow Proxy-State in requests
174
175 fr_radius_tag_ctx_t **tags; //!< for decoding tagged attributes
176 fr_pair_list_t *tag_root; //!< Where to insert tag attributes.
177 TALLOC_CTX *tag_root_ctx; //!< Where to allocate new tag attributes.
179
180typedef enum : int8_t {
181 RADIUS_FLAG_ENCRYPT_INVALID = -1, //!< Invalid encryption flag.
182 RADIUS_FLAG_ENCRYPT_NONE = 0, //!< No encryption.
183 RADIUS_FLAG_ENCRYPT_USER_PASSWORD = 1, //!< Encrypt attribute RFC 2865 style.
184 RADIUS_FLAG_ENCRYPT_TUNNEL_PASSWORD = 2, //!< Encrypt attribute RFC 2868 style.
185 RADIUS_FLAG_ENCRYPT_ASCEND_SECRET = 3, //!< Encrypt attribute ascend style.
187
188typedef struct {
189 unsigned int long_extended : 1; //!< Attribute is a long extended attribute
190 unsigned int extended : 1; //!< Attribute is an extended attribute
191 unsigned int concat : 1; //!< Attribute is concatenated
192 unsigned int has_tag : 1; //!< Attribute has a tag
193 unsigned int abinary : 1; //!< Attribute is in "abinary" format
194 fr_radius_attr_flags_encrypt_t encrypt; //!< Attribute is encrypted
196
197DIAG_OFF(unused-function)
199
200/** Return RADIUS-specific flags for a given attribute
201 *
202 * Assert in debug builds when the attribute belongs to another dictionary, as
203 * the flags of one protocol say nothing about an attribute of another.
204 *
205 * If the attribute does not carry the protocol-specific extension, then assert.
206 * Other builds log the error and return zeroed flags instead of NULL.
207 */
209{
210 static fr_radius_attr_flags_t const no_flags = {};
211 fr_radius_attr_flags_t const *flags;
212
214 "%s is not a RADIUS attribute, it is from the \"%s\" dictionary",
215 da->name, fr_dict_root(da->dict)->name);
216
218 if (!fr_cond_assert_msg(flags, "%s is not a RADIUS attribute, it has no protocol extension",
219 da->name)) return &no_flags;
220
221 return flags;
222}
223
224static inline bool fr_radius_flag_has_tag(fr_dict_attr_t const *da)
225{
226 return fr_radius_attr_flags(da)->has_tag;
227}
228
229static inline bool fr_radius_flag_concat(fr_dict_attr_t const *da)
230{
231 return fr_radius_attr_flags(da)->concat;
232}
233
234static inline bool fr_radius_flag_abinary(fr_dict_attr_t const *da)
235{
236 return fr_radius_attr_flags(da)->abinary;
237}
238
243
244static inline bool fr_radius_flag_extended(fr_dict_attr_t const *da)
245{
247
248 return flags->extended || flags->long_extended;
249}
250
251static inline bool fr_radius_flag_long_extended(fr_dict_attr_t const *da)
252{
254}
255DIAG_ON(unused-function)
256
259
262
265
266extern char const *fr_radius_packet_name[FR_RADIUS_CODE_MAX];
267
268/*
269 * protocols/radius/base.c
270 */
272
273int fr_radius_sign(uint8_t *packet, uint8_t const *vector,
274 uint8_t const *secret, size_t secret_len) CC_HINT(nonnull (1,3));
275
276int fr_radius_verify(uint8_t *packet, uint8_t const *vector,
277 uint8_t const *secret, size_t secret_len,
278 bool require_message_authenticator, bool limit_proxy_state) CC_HINT(nonnull (1,3));
279
280bool fr_radius_ok(uint8_t const *packet, size_t *packet_len_p,
281 uint32_t max_attributes, bool require_message_authenticator, fr_radius_decode_fail_t *reason) CC_HINT(nonnull (1,2));
282
283ssize_t fr_radius_ascend_secret(fr_dbuff_t *dbuff, uint8_t const *in, size_t inlen,
284 char const *secret, size_t secret_len, uint8_t const *vector);
285
286ssize_t fr_radius_recv_header(int sockfd, fr_ipaddr_t *src_ipaddr, uint16_t *src_port, unsigned int *code);
287
289
291 uint8_t *packet, size_t packet_len,
292 fr_radius_decode_ctx_t *decode_ctx) CC_HINT(nonnull);
293
295 uint8_t *packet, size_t packet_len,
296 uint8_t const *vector, char const *secret) CC_HINT(nonnull(1,2,3,6));
297
298int fr_radius_global_init(void);
299
300void fr_radius_global_free(void);
301
302/*
303 * protocols/radius/packet.c
304 */
306 fr_packet_t const *original,
307 char const *secret) CC_HINT(nonnull (1,2,4));
308
309bool fr_radius_packet_ok(fr_packet_t *packet, uint32_t max_attributes, bool require_message_authenticator,
310 fr_radius_decode_fail_t *reason) CC_HINT(nonnull (1));
311
312int fr_radius_packet_verify(fr_packet_t *packet, fr_packet_t *original,
313 char const *secret) CC_HINT(nonnull (1,3));
314int fr_radius_packet_sign(fr_packet_t *packet, fr_packet_t const *original,
315 char const *secret) CC_HINT(nonnull (1,3));
316
317fr_packet_t *fr_packet_recv(TALLOC_CTX *ctx, int fd, int flags, uint32_t max_attributes, bool require_message_authenticator);
319 fr_packet_t const *original, char const *secret) CC_HINT(nonnull (1,2,4));
320
321#define fr_packet_log_hex(_log, _packet) _fr_packet_log_hex(_log, _packet, __FILE__, __LINE__)
322void _fr_packet_log_hex(fr_log_t const *log, fr_packet_t const *packet, char const *file, int line) CC_HINT(nonnull);
323
324/*
325 * protocols/radius/abinary.c
326 */
328
329ssize_t fr_radius_decode_abinary(fr_pair_t *vp, uint8_t const *data, size_t data_len);
330
331/*
332 * protocols/radius/encode.c
333 */
335
337
338/*
339 * protocols/radius/decode.c
340 */
341int fr_radius_decode_tlv_ok(uint8_t const *data, size_t length, size_t dv_type, size_t dv_length);
342
344 fr_dict_attr_t const *parent,
345 uint8_t const *data, size_t const attr_len,
346 void *packet_ctx) CC_HINT(nonnull);
347
348ssize_t fr_radius_decode_tlv(TALLOC_CTX *ctx, fr_pair_list_t *list,
349 fr_dict_attr_t const *parent,
350 uint8_t const *data, size_t data_len,
352
353ssize_t fr_radius_decode_pair(TALLOC_CTX *ctx, fr_pair_list_t *list,
354 uint8_t const *data, size_t data_len, fr_radius_decode_ctx_t *packet_ctx) CC_HINT(nonnull);
355
357 uint8_t const *data, size_t data_len) CC_HINT(nonnull);
358
359void fr_radius_packet_header_log(fr_log_t const *log, fr_packet_t *packet, bool received);
360
361void fr_radius_packet_log(fr_log_t const *log, fr_packet_t *packet, fr_pair_list_t *list, bool received);
void int line
Definition acutest.h:810
static int packet_ctx
the tests pass only the address of packet_ctx
#define DIAG_ON(_x)
Definition build.h:576
#define DIAG_OFF(_x)
Definition build.h:575
#define fr_assert_msg(_x, _msg,...)
Calls panic_action ifndef NDEBUG, else logs error and causes the server to exit immediately with code...
Definition debug.h:248
#define fr_cond_assert_msg(_x, _fmt,...)
Calls panic_action ifndef NDEBUG, else logs error and evaluates to value of _x.
Definition debug.h:194
fr_radius_packet_code_t
RADIUS packet codes.
Definition defs.h:31
@ FR_RADIUS_CODE_MAX
Maximum possible protocol code.
Definition defs.h:53
static int sockfd
Definition dhcpclient.c:55
@ FR_DICT_ATTR_EXT_PROTOCOL_SPECIFIC
Protocol specific extensions.
Definition dict.h:190
fr_dict_protocol_t const * fr_dict_protocol(fr_dict_t const *dict)
Return the protocol descriptor for the dictionary.
Definition dict_util.c:5389
fr_dict_attr_t const * fr_dict_root(fr_dict_t const *dict)
Return the root attribute of a dictionary.
Definition dict_util.c:2717
Protocol-specific callbacks in libfreeradius-PROTOCOL.
Definition dict.h:479
static void * fr_dict_attr_ext(fr_dict_attr_t const *da, fr_dict_attr_ext_t ext)
Definition dict_ext.h:122
IPv4/6 prefix.
unsigned short uint16_t
unsigned int uint32_t
long int ssize_t
unsigned char uint8_t
static fr_internal_encode_ctx_t encode_ctx
static char * secret
bool fr_radius_packet_ok(fr_packet_t *packet, uint32_t max_attributes, bool require_message_authenticator, fr_radius_decode_fail_t *reason))
See if the data pointed to by PTR is a valid RADIUS packet.
Definition packet.c:118
fr_dict_protocol_t libfreeradius_radius_dict_protocol
Definition base.c:1489
unsigned int has_tag
Attribute has a tag.
Definition radius.h:192
bool secure_transport
for TLS
Definition radius.h:130
ssize_t fr_radius_decode_foreign(TALLOC_CTX *ctx, fr_pair_list_t *out, uint8_t const *data, size_t data_len)
Definition decode.c:2098
fr_pair_t * parent
Definition radius.h:122
fr_radius_tag_ctx_t ** tags
for decoding tagged attributes
Definition radius.h:175
ssize_t fr_radius_packet_encode(fr_packet_t *packet, fr_pair_list_t *list, fr_packet_t const *original, char const *secret))
Encode a packet.
Definition packet.c:43
ssize_t fr_radius_ascend_secret(fr_dbuff_t *dbuff, uint8_t const *in, size_t inlen, char const *secret, size_t secret_len, uint8_t const *vector)
Do Ascend-Send / Recv-Secret calculation.
Definition base.c:250
fr_fast_rand_t rand_ctx
for tunnel passwords
Definition radius.h:140
fr_radius_ctx_t const * common
Definition radius.h:136
ssize_t fr_radius_decode_pair(TALLOC_CTX *ctx, fr_pair_list_t *list, uint8_t const *data, size_t data_len, fr_radius_decode_ctx_t *packet_ctx)
Create a "normal" fr_pair_t from the given data.
Definition decode.c:1978
uint8_t request_code
original code for the request.
Definition radius.h:168
ssize_t fr_radius_decode_abinary(fr_pair_t *vp, uint8_t const *data, size_t data_len)
Print an Ascend binary filter attribute to a string,.
Definition abinary.c:1332
ssize_t fr_radius_decode_simple(TALLOC_CTX *ctx, fr_pair_list_t *out, uint8_t *packet, size_t packet_len, uint8_t const *vector, char const *secret))
Simple wrapper for callers who just need a shared secret.
Definition base.c:1291
uint8_t const * request_authenticator
Definition radius.h:161
unsigned int abinary
Attribute is in "abinary" format.
Definition radius.h:193
ssize_t fr_radius_decode(TALLOC_CTX *ctx, fr_pair_list_t *out, uint8_t *packet, size_t packet_len, fr_radius_decode_ctx_t *decode_ctx)
Definition base.c:1178
fr_dcursor_t cursor
Definition radius.h:123
size_t fr_radius_limit_proxy_state_table_len
Definition base.c:102
int fr_radius_sign(uint8_t *packet, uint8_t const *vector, uint8_t const *secret, size_t secret_len))
Sign a previously encoded packet.
Definition base.c:361
fr_radius_attr_flags_encrypt_t
Definition radius.h:180
@ RADIUS_FLAG_ENCRYPT_INVALID
Invalid encryption flag.
Definition radius.h:181
@ RADIUS_FLAG_ENCRYPT_NONE
No encryption.
Definition radius.h:182
@ RADIUS_FLAG_ENCRYPT_USER_PASSWORD
Encrypt attribute RFC 2865 style.
Definition radius.h:183
@ RADIUS_FLAG_ENCRYPT_ASCEND_SECRET
Encrypt attribute ascend style.
Definition radius.h:185
@ RADIUS_FLAG_ENCRYPT_TUNNEL_PASSWORD
Encrypt attribute RFC 2868 style.
Definition radius.h:184
bool foreign
are we in a foreign protocol?
Definition radius.h:151
char const * secret
Definition radius.h:127
ssize_t fr_radius_decode_tlv(TALLOC_CTX *ctx, fr_pair_list_t *list, fr_dict_attr_t const *parent, uint8_t const *data, size_t data_len, fr_radius_decode_ctx_t *packet_ctx)
Convert TLVs to one or more VPs.
Definition decode.c:650
char const * fr_radius_decode_fail_reason[FR_RADIUS_FAIL_MAX+1]
Definition base.c:507
static bool fr_radius_flag_long_extended(fr_dict_attr_t const *da)
Definition radius.h:251
size_t fr_radius_require_ma_table_len
Definition base.c:93
int fr_radius_packet_send(fr_packet_t *packet, fr_pair_list_t *list, fr_packet_t const *original, char const *secret))
Reply to the request.
Definition packet.c:285
bool fr_radius_ok(uint8_t const *packet, size_t *packet_len_p, uint32_t max_attributes, bool require_message_authenticator, fr_radius_decode_fail_t *reason))
See if the data pointed to by PTR is a valid RADIUS packet.
Definition base.c:548
unsigned int concat
Attribute is concatenated.
Definition radius.h:191
uint8_t const * end
end of the packet
Definition radius.h:164
fr_radius_decode_fail_t
Failure reasons.
Definition radius.h:89
@ FR_RADIUS_FAIL_ATTRIBUTE_DECODE
Definition radius.h:105
@ FR_RADIUS_FAIL_UNEXPECTED_REQUEST_CODE
Definition radius.h:96
@ FR_RADIUS_FAIL_ATTRIBUTE_OVERFLOW
Definition radius.h:104
@ FR_RADIUS_FAIL_VERIFY
Definition radius.h:113
@ FR_RADIUS_FAIL_NONE
Definition radius.h:90
@ FR_RADIUS_FAIL_MA_INVALID_LENGTH
Definition radius.h:107
@ FR_RADIUS_FAIL_MIN_LENGTH_FIELD
Definition radius.h:93
@ FR_RADIUS_FAIL_INVALID_ATTRIBUTE
Definition radius.h:100
@ FR_RADIUS_FAIL_IO_ERROR
Definition radius.h:115
@ FR_RADIUS_FAIL_MAX_LENGTH_PACKET
Definition radius.h:92
@ FR_RADIUS_FAIL_MA_MISSING
Definition radius.h:108
@ FR_RADIUS_FAIL_TOO_MANY_ATTRIBUTES
Definition radius.h:98
@ FR_RADIUS_FAIL_UNEXPECTED_RESPONSE_CODE
Definition radius.h:97
@ FR_RADIUS_FAIL_UNKNOWN_PACKET_CODE
Definition radius.h:95
@ FR_RADIUS_FAIL_MIN_LENGTH_MISMATCH
Definition radius.h:94
@ FR_RADIUS_FAIL_NO_MATCHING_REQUEST
Definition radius.h:114
@ FR_RADIUS_FAIL_HEADER_OVERFLOW
Definition radius.h:102
@ FR_RADIUS_FAIL_MIN_LENGTH_PACKET
Definition radius.h:91
@ FR_RADIUS_FAIL_MAX
Definition radius.h:116
@ FR_RADIUS_FAIL_ATTRIBUTE_TOO_SHORT
Definition radius.h:103
@ FR_RADIUS_FAIL_MA_INVALID
Definition radius.h:109
@ FR_RADIUS_FAIL_PROXY_STATE_MISSING_MA
Definition radius.h:111
@ FR_RADIUS_FAIL_MA_TOO_MANY
Definition radius.h:110
int fr_radius_global_init(void)
Definition base.c:1313
bool limit_proxy_state
Don't allow Proxy-State in requests.
Definition radius.h:173
ssize_t fr_radius_encode_pair(fr_dbuff_t *dbuff, fr_dcursor_t *cursor, void *encode_ctx)
Encode a data structure into a RADIUS attribute.
Definition encode.c:1551
void fr_radius_packet_header_log(fr_log_t const *log, fr_packet_t *packet, bool received)
Definition packet.c:415
uint64_t proxy_state
Definition radius.h:132
uint8_t const * request_authenticator
Definition radius.h:138
static bool fr_radius_flag_extended(fr_dict_attr_t const *da)
Definition radius.h:244
uint8_t tag
current tag for encoding
Definition radius.h:142
unsigned int extended
Attribute is an extended attribute.
Definition radius.h:190
fr_radius_attr_flags_encrypt_t encrypt
Attribute is encrypted.
Definition radius.h:194
int fr_radius_decode_tlv_ok(uint8_t const *data, size_t length, size_t dv_type, size_t dv_length)
Check if a set of RADIUS formatted TLVs are OK.
Definition decode.c:249
bool require_message_authenticator
Definition radius.h:172
void _fr_packet_log_hex(fr_log_t const *log, fr_packet_t const *packet, char const *file, int line)
Definition packet.c:343
int fr_radius_packet_sign(fr_packet_t *packet, fr_packet_t const *original, char const *secret))
Sign a previously encoded packet.
Definition packet.c:158
TALLOC_CTX * tag_root_ctx
Where to allocate new tag attributes.
Definition radius.h:177
size_t secret_length
Definition radius.h:128
size_t fr_radius_request_name_table_len
Definition base.c:113
int fr_radius_packet_verify(fr_packet_t *packet, fr_packet_t *original, char const *secret))
Verify the Request/Response Authenticator (and Message-Authenticator if present) of a packet.
Definition packet.c:137
ssize_t fr_radius_encode_foreign(fr_dbuff_t *dbuff, fr_pair_list_t const *list)
Definition encode.c:1724
static fr_radius_attr_flags_encrypt_t fr_radius_flag_encrypted(fr_dict_attr_t const *da)
Definition radius.h:239
ssize_t fr_radius_decode_pair_value(TALLOC_CTX *ctx, fr_pair_list_t *list, fr_dict_attr_t const *parent, uint8_t const *data, size_t const attr_len, void *packet_ctx)
Create any kind of VP from the attribute contents.
Definition decode.c:1485
int fr_radius_allow_reply(fr_radius_packet_code_t code, bool allowed[static FR_RADIUS_CODE_MAX])
Definition base.c:230
static bool fr_radius_flag_has_tag(fr_dict_attr_t const *da)
Definition radius.h:224
bool verify
can skip verify for dynamic clients
Definition radius.h:171
fr_packet_t * fr_packet_recv(TALLOC_CTX *ctx, int fd, int flags, uint32_t max_attributes, bool require_message_authenticator)
Receive UDP client requests, and fill in the basics of a fr_packet_t structure.
Definition packet.c:199
fr_radius_ctx_t const * common
Definition radius.h:159
int fr_radius_verify(uint8_t *packet, uint8_t const *vector, uint8_t const *secret, size_t secret_len, bool require_message_authenticator, bool limit_proxy_state))
Verify the signature of a request / response packet.
Definition base.c:834
void fr_radius_global_free(void)
Definition base.c:1337
fr_radius_require_ma_t
Control whether Message-Authenticator is required in Access-Requests.
Definition radius.h:61
@ FR_RADIUS_REQUIRE_MA_NO
Do not require Message-Authenticator.
Definition radius.h:62
@ FR_RADIUS_REQUIRE_MA_YES
Require Message-Authenticator.
Definition radius.h:63
@ FR_RADIUS_REQUIRE_MA_AUTO
Only require Message-Authenticator if we've previously received a packet from this client with Messag...
Definition radius.h:64
unsigned int long_extended
Attribute is a long extended attribute.
Definition radius.h:189
fr_radius_limit_proxy_state_t
Control whether Proxy-State is allowed in Access-Requests.
Definition radius.h:75
@ FR_RADIUS_LIMIT_PROXY_STATE_NO
Do not limit Proxy-State.
Definition radius.h:76
@ FR_RADIUS_LIMIT_PROXY_STATE_AUTO
Do not allow Proxy-State unless:
Definition radius.h:81
@ FR_RADIUS_LIMIT_PROXY_STATE_YES
Limit Proxy-State.
Definition radius.h:78
fr_table_num_sorted_t const fr_radius_limit_proxy_state_table[]
Definition base.c:95
fr_radius_decode_fail_t reason
reason for decode failure
Definition radius.h:166
ssize_t fr_radius_encode_abinary(fr_pair_t const *vp, fr_dbuff_t *dbuff)
Encode a string to abinary.
Definition abinary.c:1208
fr_table_num_sorted_t const fr_radius_request_name_table[]
Definition base.c:104
fr_table_num_sorted_t const fr_radius_require_ma_table[]
Definition base.c:86
static bool fr_radius_flag_abinary(fr_dict_attr_t const *da)
Definition radius.h:234
ssize_t fr_radius_encode(fr_dbuff_t *dbuff, fr_pair_list_t *vps, fr_radius_encode_ctx_t *packet_ctx)
Definition base.c:1028
static fr_radius_attr_flags_t const * fr_radius_attr_flags(fr_dict_attr_t const *da)
Return RADIUS-specific flags for a given attribute.
Definition radius.h:208
bool tunnel_password_zeros
check for trailing zeros on decode
Definition radius.h:170
bool add_proxy_state
do we add a Proxy-State?
Definition radius.h:149
static bool fr_radius_flag_concat(fr_dict_attr_t const *da)
Definition radius.h:229
bool seen_message_authenticator
Definition radius.h:150
void fr_radius_packet_log(fr_log_t const *log, fr_packet_t *packet, fr_pair_list_t *list, bool received)
Definition packet.c:483
char const * fr_radius_packet_name[FR_RADIUS_CODE_MAX]
Definition base.c:115
ssize_t fr_radius_recv_header(int sockfd, fr_ipaddr_t *src_ipaddr, uint16_t *src_port, unsigned int *code)
Basic validation of RADIUS packet header.
Definition base.c:288
TALLOC_CTX * tmp_ctx
for temporary things cleaned up during decoding
Definition radius.h:163
fr_pair_list_t * tag_root
Where to insert tag attributes.
Definition radius.h:176
Smaller fast random number generator.
Definition rand.h:54
fr_pair_t * vp
Definition log.h:93
Stores an attribute, a value and various bits of other data.
Definition pair.h:68
An element in a lexicographically sorted array of name to num mappings.
Definition table.h:49
static fr_slen_t parent
Definition pair.h:864
static fr_sbuff_err_t char size_t fr_sbuff_t * in
Definition value.h:1061
static fr_slen_t data
Definition value.h:1366
static fr_sbuff_err_t char ** out
Definition value.h:1061
int nonnull(2, 5))