9 unstable releases
0.4.0 | Jan 15, 2024 |
---|---|
0.3.1 | May 18, 2022 |
0.2.1 | May 31, 2021 |
0.2.0 | Feb 3, 2021 |
0.0.3 | Dec 12, 2020 |
#1636 in Network programming
516 downloads per month
325KB
5.5K
SLoC
radius-rs
An async/await native implementation of the RADIUS server and client for Rust. And this also can be used for parsing/constructing (i.e. decoding/encoding) purposes as a RADIUS library.
Description
This RADIUS server and client implementation use tokio to support asynchronous operations natively. This implementation satisfies basic functions that are described in RFC2865.
Usage
Simple example implementations are here:
Those examples implement a quite simple Access-Request
processor. You can try those with the following commands.
$ RUST_LOG=debug cargo run --example server
$ RUST_LOG=debug cargo run --example client # in another shell
Supported Dictionaries
This supports the following RFC dictionaries at the moment:
- RFC2865
- RFC2866
- RFC2867
- RFC2868
- RFC2869
- RFC3162
- RFC3576
- RFC3580
- RFC4072
- RFC4372
- RFC4603
- RFC4675
- RFC4818
- RFC4849
- RFC5090
- RFC5176
- RFC5607
- RFC5904
- RFC6519
- RFC6572
- RFC6677
- RFC6911
- RFC7055
- RFC7155
Implementation guide for your RADIUS application
Common
Packet
struct represents request packet and response one.- This struct has a list of AVPs.
- You can get a specific AVP by RFC dictionary module.
- e.g.
rfc2865::lookup_user_name(packet)
- This method returns
Some(Result<String, AVPError>)
if the packet containsUser-Name
attribute. - On the other hand, if the package doesn't have that attribute, it returns
None
.
- This method returns
- e.g.
- You can construct a packet with RFC dictionary module.
- e.g.
rfc2865::add_user_name(&mut packet, "user")
- This method adds a
User-Name
AVP to the packet.
- This method adds a
- e.g.
- Please refer to the rustdoc for each RFC dictionary module in detail.
Server
- Must implement
RequestHandler<T, E>
interface.- This interface method is the core function of the server application what you need.
- Please refer also to the example implementation: server
Client
- Please refer also to the example implementation: client
Roadmap
- Support the following RFC dictionaries:
- rfc4679
- rfc5447
- rfc5580
- rfc6929
- rfc6930
- rfc7268
- rfc7499
- rfc7930
- rfc8045
- rfc8559
Development guide for this library
How to generate code from dictionary
$ make gen
code-generator
sub project has the responsibility to generate the Rust code according to
given RFC dictionary files. The dictionary files are in dicts
directory.
The format of the dictionary files respect the FreeRADIUS project's ones.
Note
The original implementation and design of this are inspired by layeh/radius.
Author
moznion (moznion@gmail.com)
Dependencies
~4–12MB
~109K SLoC