pyrad 2.4__py3-none-any.whl → 2.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- docs/Makefile +20 -0
- docs/make.bat +36 -0
- docs/source/_static/logo.png +0 -0
- docs/source/api/client.rst +10 -0
- docs/source/api/dictionary.rst +10 -0
- docs/source/api/host.rst +7 -0
- docs/source/api/packet.rst +48 -0
- docs/source/api/proxy.rst +7 -0
- docs/source/api/server.rst +13 -0
- docs/source/conf.py +158 -0
- docs/source/index.rst +75 -0
- example/acct.py +41 -0
- example/auth.py +37 -0
- example/auth_async.py +164 -0
- example/client-coa.py +61 -0
- example/coa.py +40 -0
- example/dictionary +405 -0
- example/dictionary.freeradius +91 -0
- example/pyrad.log +0 -0
- example/server.py +68 -0
- example/server_async.py +117 -0
- example/status.py +26 -0
- pyrad/__init__.py +3 -3
- pyrad/client.py +14 -6
- pyrad/client_async.py +16 -13
- pyrad/dictfile.py +2 -5
- pyrad/dictionary.py +6 -7
- pyrad/host.py +1 -1
- pyrad/packet.py +145 -114
- pyrad/proxy.py +2 -2
- pyrad/server.py +3 -7
- pyrad/server_async.py +3 -4
- pyrad/tests/__init__.py +5 -0
- pyrad/tests/mock.py +145 -0
- pyrad/tests/test_bidict.py +56 -0
- pyrad/tests/test_client.py +183 -0
- pyrad/tests/test_dictionary.py +357 -0
- pyrad/tests/test_host.py +87 -0
- pyrad/tests/test_packet.py +679 -0
- pyrad/tests/test_proxy.py +96 -0
- pyrad/tests/test_server.py +323 -0
- pyrad/tests/test_tools.py +126 -0
- pyrad/tools.py +254 -158
- {pyrad-2.4.dist-info → pyrad-2.5.0.dist-info}/METADATA +44 -20
- pyrad-2.5.0.dist-info/RECORD +51 -0
- {pyrad-2.4.dist-info → pyrad-2.5.0.dist-info}/WHEEL +1 -1
- {pyrad-2.4.dist-info → pyrad-2.5.0.dist-info/licenses}/LICENSE.txt +1 -1
- pyrad-2.5.0.dist-info/top_level.txt +3 -0
- pyrad-2.4.dist-info/RECORD +0 -19
- pyrad-2.4.dist-info/top_level.txt +0 -1
- {pyrad-2.4.dist-info → pyrad-2.5.0.dist-info}/zip-safe +0 -0
example/client-coa.py
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
#
|
|
3
|
+
# Copyright 6WIND, 2017
|
|
4
|
+
#
|
|
5
|
+
|
|
6
|
+
from pyrad import dictionary, packet, server
|
|
7
|
+
import sys
|
|
8
|
+
import prctl
|
|
9
|
+
|
|
10
|
+
class FakeCoA(server.Server):
|
|
11
|
+
|
|
12
|
+
def HandleCoaPacket(self, pkt):
|
|
13
|
+
"""Accounting packet handler.
|
|
14
|
+
Function that is called when a valid
|
|
15
|
+
accounting packet has been received.
|
|
16
|
+
|
|
17
|
+
:param pkt: packet to process
|
|
18
|
+
:type pkt: Packet class instance
|
|
19
|
+
"""
|
|
20
|
+
print("Received a coa request %d" % pkt.code)
|
|
21
|
+
print(" Attributes: ")
|
|
22
|
+
for attr in pkt.keys():
|
|
23
|
+
print(" %s: %s" % (attr, pkt[attr]))
|
|
24
|
+
|
|
25
|
+
reply = self.CreateReplyPacket(pkt)
|
|
26
|
+
# try ACK or NACK
|
|
27
|
+
# reply.code = packet.CoANAK
|
|
28
|
+
reply.code = packet.CoAACK
|
|
29
|
+
self.SendReplyPacket(pkt.fd, reply)
|
|
30
|
+
|
|
31
|
+
def HandleDisconnectPacket(self, pkt):
|
|
32
|
+
print("Received a disconnect request %d" % pkt.code)
|
|
33
|
+
print(" Attributes: ")
|
|
34
|
+
for attr in pkt.keys():
|
|
35
|
+
print(" %s: %s" % (attr, pkt[attr]))
|
|
36
|
+
|
|
37
|
+
reply = self.CreateReplyPacket(pkt)
|
|
38
|
+
# try ACK or NACK
|
|
39
|
+
# reply.code = packet.DisconnectNAK
|
|
40
|
+
reply.code = packet.DisconnectACK
|
|
41
|
+
self.SendReplyPacket(pkt.fd, reply)
|
|
42
|
+
|
|
43
|
+
if __name__ == '__main__':
|
|
44
|
+
|
|
45
|
+
prctl.set_name('radius-FakeCoA-client')
|
|
46
|
+
|
|
47
|
+
if len(sys.argv) != 2:
|
|
48
|
+
print ("usage: client-coa.py 3799")
|
|
49
|
+
sys.exit(1)
|
|
50
|
+
|
|
51
|
+
bindport=int(sys.argv[1])
|
|
52
|
+
|
|
53
|
+
# create server/coa only and read dictionary
|
|
54
|
+
# bind and listen only on 127.0.0.1:argv[1]
|
|
55
|
+
coa = FakeCoA(addresses=["127.0.0.1"], dict=dictionary.Dictionary("dictionary"), coaport=bindport, auth_enabled=False, acct_enabled=False, coa_enabled=True)
|
|
56
|
+
|
|
57
|
+
# add peers (address, secret, name)
|
|
58
|
+
coa.hosts["127.0.0.1"] = server.RemoteHost("127.0.0.1", b"Kah3choteereethiejeimaeziecumi", "localhost")
|
|
59
|
+
|
|
60
|
+
# start
|
|
61
|
+
coa.Run()
|
example/coa.py
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
from pyrad.client import Client
|
|
3
|
+
from pyrad import dictionary
|
|
4
|
+
from pyrad import packet
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
if len(sys.argv) != 3:
|
|
8
|
+
print ("usage: coa.py {coa|dis} daemon-1234")
|
|
9
|
+
sys.exit(1)
|
|
10
|
+
|
|
11
|
+
ADDRESS = "127.0.0.1"
|
|
12
|
+
SECRET = b"Kah3choteereethiejeimaeziecumi"
|
|
13
|
+
ATTRIBUTES = {
|
|
14
|
+
"Acct-Session-Id": "1337"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
ATTRIBUTES["NAS-Identifier"] = sys.argv[2]
|
|
18
|
+
|
|
19
|
+
# create coa client
|
|
20
|
+
client = Client(server=ADDRESS, secret=SECRET, dict=dictionary.Dictionary("dictionary"))
|
|
21
|
+
|
|
22
|
+
# set coa timeout
|
|
23
|
+
client.timeout = 30
|
|
24
|
+
|
|
25
|
+
# create coa request packet
|
|
26
|
+
attributes = {k.replace("-", "_"): ATTRIBUTES[k] for k in ATTRIBUTES}
|
|
27
|
+
|
|
28
|
+
if sys.argv[1] == "coa":
|
|
29
|
+
# create coa request
|
|
30
|
+
request = client.CreateCoAPacket(**attributes)
|
|
31
|
+
elif sys.argv[1] == "dis":
|
|
32
|
+
# create disconnect request
|
|
33
|
+
request = client.CreateCoAPacket(code=packet.DisconnectRequest, **attributes)
|
|
34
|
+
else:
|
|
35
|
+
sys.exit(1)
|
|
36
|
+
|
|
37
|
+
# send request
|
|
38
|
+
result = client.SendPacket(request)
|
|
39
|
+
print(result)
|
|
40
|
+
print(result.code)
|
example/dictionary
ADDED
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Version $Id: dictionary,v 1.1.1.1 2002/10/11 12:25:39 wichert Exp $
|
|
3
|
+
#
|
|
4
|
+
# This file contains dictionary translations for parsing
|
|
5
|
+
# requests and generating responses. All transactions are
|
|
6
|
+
# composed of Attribute/Value Pairs. The value of each attribute
|
|
7
|
+
# is specified as one of 4 data types. Valid data types are:
|
|
8
|
+
#
|
|
9
|
+
# string - 0-253 octets
|
|
10
|
+
# ipaddr - 4 octets in network byte order
|
|
11
|
+
# integer - 32 bit value in big endian order (high byte first)
|
|
12
|
+
# date - 32 bit value in big endian order - seconds since
|
|
13
|
+
# 00:00:00 GMT, Jan. 1, 1970
|
|
14
|
+
#
|
|
15
|
+
# FreeRADIUS includes extended data types which are not defined
|
|
16
|
+
# in RFC 2865 or RFC 2866. These data types are:
|
|
17
|
+
#
|
|
18
|
+
# abinary - Ascend's binary filter format.
|
|
19
|
+
# octets - raw octets, printed and input as hex strings.
|
|
20
|
+
# e.g.: 0x123456789abcdef
|
|
21
|
+
#
|
|
22
|
+
#
|
|
23
|
+
# Enumerated values are stored in the user file with dictionary
|
|
24
|
+
# VALUE translations for easy administration.
|
|
25
|
+
#
|
|
26
|
+
# Example:
|
|
27
|
+
#
|
|
28
|
+
# ATTRIBUTE VALUE
|
|
29
|
+
# --------------- -----
|
|
30
|
+
# Framed-Protocol = PPP
|
|
31
|
+
# 7 = 1 (integer encoding)
|
|
32
|
+
#
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# Include compatibility dictionary for older users file. Move this
|
|
36
|
+
# directive to the end of the file if you want to see the old names
|
|
37
|
+
# in the logfiles too.
|
|
38
|
+
#
|
|
39
|
+
#$INCLUDE dictionary.compat # compability issues
|
|
40
|
+
#$INCLUDE dictionary.acc
|
|
41
|
+
#$INCLUDE dictionary.ascend
|
|
42
|
+
#$INCLUDE dictionary.bay
|
|
43
|
+
#$INCLUDE dictionary.cisco
|
|
44
|
+
#$INCLUDE dictionary.livingston
|
|
45
|
+
#$INCLUDE dictionary.microsoft
|
|
46
|
+
#$INCLUDE dictionary.quintum
|
|
47
|
+
#$INCLUDE dictionary.redback
|
|
48
|
+
#$INCLUDE dictionary.shasta
|
|
49
|
+
#$INCLUDE dictionary.shiva
|
|
50
|
+
#$INCLUDE dictionary.tunnel
|
|
51
|
+
#$INCLUDE dictionary.usr
|
|
52
|
+
#$INCLUDE dictionary.versanet
|
|
53
|
+
#$INCLUDE dictionary.erx
|
|
54
|
+
$INCLUDE dictionary.freeradius
|
|
55
|
+
#$INCLUDE dictionary.alcatel
|
|
56
|
+
|
|
57
|
+
#
|
|
58
|
+
# Following are the proper new names. Use these.
|
|
59
|
+
#
|
|
60
|
+
ATTRIBUTE User-Name 1 string
|
|
61
|
+
ATTRIBUTE User-Password 2 string
|
|
62
|
+
ATTRIBUTE CHAP-Password 3 octets
|
|
63
|
+
ATTRIBUTE NAS-IP-Address 4 ipaddr
|
|
64
|
+
ATTRIBUTE NAS-Port 5 integer
|
|
65
|
+
ATTRIBUTE Service-Type 6 integer
|
|
66
|
+
ATTRIBUTE Framed-Protocol 7 integer
|
|
67
|
+
ATTRIBUTE Framed-IP-Address 8 ipaddr
|
|
68
|
+
ATTRIBUTE Framed-IP-Netmask 9 ipaddr
|
|
69
|
+
ATTRIBUTE Framed-Routing 10 integer
|
|
70
|
+
ATTRIBUTE Filter-Id 11 string
|
|
71
|
+
ATTRIBUTE Framed-MTU 12 integer
|
|
72
|
+
ATTRIBUTE Framed-Compression 13 integer
|
|
73
|
+
ATTRIBUTE Login-IP-Host 14 ipaddr
|
|
74
|
+
ATTRIBUTE Login-Service 15 integer
|
|
75
|
+
ATTRIBUTE Login-TCP-Port 16 integer
|
|
76
|
+
ATTRIBUTE Reply-Message 18 string
|
|
77
|
+
ATTRIBUTE Callback-Number 19 string
|
|
78
|
+
ATTRIBUTE Callback-Id 20 string
|
|
79
|
+
ATTRIBUTE Framed-Route 22 string
|
|
80
|
+
ATTRIBUTE Framed-IPX-Network 23 ipaddr
|
|
81
|
+
ATTRIBUTE State 24 octets
|
|
82
|
+
ATTRIBUTE Class 25 octets
|
|
83
|
+
ATTRIBUTE Vendor-Specific 26 octets
|
|
84
|
+
ATTRIBUTE Session-Timeout 27 integer
|
|
85
|
+
ATTRIBUTE Idle-Timeout 28 integer
|
|
86
|
+
ATTRIBUTE Termination-Action 29 integer
|
|
87
|
+
ATTRIBUTE Called-Station-Id 30 string
|
|
88
|
+
ATTRIBUTE Calling-Station-Id 31 string
|
|
89
|
+
ATTRIBUTE NAS-Identifier 32 string
|
|
90
|
+
ATTRIBUTE Proxy-State 33 octets
|
|
91
|
+
ATTRIBUTE Login-LAT-Service 34 string
|
|
92
|
+
ATTRIBUTE Login-LAT-Node 35 string
|
|
93
|
+
ATTRIBUTE Login-LAT-Group 36 octets
|
|
94
|
+
ATTRIBUTE Framed-AppleTalk-Link 37 integer
|
|
95
|
+
ATTRIBUTE Framed-AppleTalk-Network 38 integer
|
|
96
|
+
ATTRIBUTE Framed-AppleTalk-Zone 39 string
|
|
97
|
+
|
|
98
|
+
ATTRIBUTE Acct-Status-Type 40 integer
|
|
99
|
+
ATTRIBUTE Acct-Delay-Time 41 integer
|
|
100
|
+
ATTRIBUTE Acct-Input-Octets 42 integer
|
|
101
|
+
ATTRIBUTE Acct-Output-Octets 43 integer
|
|
102
|
+
ATTRIBUTE Acct-Session-Id 44 string
|
|
103
|
+
ATTRIBUTE Acct-Authentic 45 integer
|
|
104
|
+
ATTRIBUTE Acct-Session-Time 46 integer
|
|
105
|
+
ATTRIBUTE Acct-Input-Packets 47 integer
|
|
106
|
+
ATTRIBUTE Acct-Output-Packets 48 integer
|
|
107
|
+
ATTRIBUTE Acct-Terminate-Cause 49 integer
|
|
108
|
+
ATTRIBUTE Acct-Multi-Session-Id 50 string
|
|
109
|
+
ATTRIBUTE Acct-Link-Count 51 integer
|
|
110
|
+
ATTRIBUTE Acct-Input-Gigawords 52 integer
|
|
111
|
+
ATTRIBUTE Acct-Output-Gigawords 53 integer
|
|
112
|
+
ATTRIBUTE Event-Timestamp 55 date
|
|
113
|
+
|
|
114
|
+
ATTRIBUTE CHAP-Challenge 60 string
|
|
115
|
+
ATTRIBUTE NAS-Port-Type 61 integer
|
|
116
|
+
ATTRIBUTE Port-Limit 62 integer
|
|
117
|
+
ATTRIBUTE Login-LAT-Port 63 integer
|
|
118
|
+
|
|
119
|
+
ATTRIBUTE Acct-Tunnel-Connection 68 string
|
|
120
|
+
|
|
121
|
+
ATTRIBUTE ARAP-Password 70 string
|
|
122
|
+
ATTRIBUTE ARAP-Features 71 string
|
|
123
|
+
ATTRIBUTE ARAP-Zone-Access 72 integer
|
|
124
|
+
ATTRIBUTE ARAP-Security 73 integer
|
|
125
|
+
ATTRIBUTE ARAP-Security-Data 74 string
|
|
126
|
+
ATTRIBUTE Password-Retry 75 integer
|
|
127
|
+
ATTRIBUTE Prompt 76 integer
|
|
128
|
+
ATTRIBUTE Connect-Info 77 string
|
|
129
|
+
ATTRIBUTE Configuration-Token 78 string
|
|
130
|
+
ATTRIBUTE EAP-Message 79 string
|
|
131
|
+
ATTRIBUTE Message-Authenticator 80 octets
|
|
132
|
+
ATTRIBUTE ARAP-Challenge-Response 84 string # 10 octets
|
|
133
|
+
ATTRIBUTE Acct-Interim-Interval 85 integer
|
|
134
|
+
ATTRIBUTE NAS-Port-Id 87 string
|
|
135
|
+
ATTRIBUTE Framed-Pool 88 string
|
|
136
|
+
ATTRIBUTE NAS-IPv6-Address 95 octets # really IPv6
|
|
137
|
+
ATTRIBUTE Framed-Interface-Id 96 octets # 8 octets
|
|
138
|
+
ATTRIBUTE Framed-IPv6-Prefix 97 ipv6prefix # stupid format
|
|
139
|
+
ATTRIBUTE Login-IPv6-Host 98 octets # really IPv6
|
|
140
|
+
ATTRIBUTE Framed-IPv6-Route 99 string
|
|
141
|
+
ATTRIBUTE Framed-IPv6-Pool 100 string
|
|
142
|
+
ATTRIBUTE Delegated-IPv6-Prefix 123 ipv6prefix
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
ATTRIBUTE Digest-Response 206 string
|
|
146
|
+
ATTRIBUTE Digest-Attributes 207 octets # stupid format
|
|
147
|
+
|
|
148
|
+
#
|
|
149
|
+
# Experimental Non Protocol Attributes used by Cistron-Radiusd
|
|
150
|
+
#
|
|
151
|
+
|
|
152
|
+
# These attributes CAN go in the reply item list.
|
|
153
|
+
ATTRIBUTE Fall-Through 500 integer
|
|
154
|
+
ATTRIBUTE Exec-Program 502 string
|
|
155
|
+
ATTRIBUTE Exec-Program-Wait 503 string
|
|
156
|
+
|
|
157
|
+
# These attributes CANNOT go in the reply item list.
|
|
158
|
+
ATTRIBUTE User-Category 1029 string
|
|
159
|
+
ATTRIBUTE Group-Name 1030 string
|
|
160
|
+
ATTRIBUTE Huntgroup-Name 1031 string
|
|
161
|
+
ATTRIBUTE Simultaneous-Use 1034 integer
|
|
162
|
+
ATTRIBUTE Strip-User-Name 1035 integer
|
|
163
|
+
ATTRIBUTE Hint 1040 string
|
|
164
|
+
ATTRIBUTE Pam-Auth 1041 string
|
|
165
|
+
ATTRIBUTE Login-Time 1042 string
|
|
166
|
+
ATTRIBUTE Stripped-User-Name 1043 string
|
|
167
|
+
ATTRIBUTE Current-Time 1044 string
|
|
168
|
+
ATTRIBUTE Realm 1045 string
|
|
169
|
+
ATTRIBUTE No-Such-Attribute 1046 string
|
|
170
|
+
ATTRIBUTE Packet-Type 1047 integer
|
|
171
|
+
ATTRIBUTE Proxy-To-Realm 1048 string
|
|
172
|
+
ATTRIBUTE Replicate-To-Realm 1049 string
|
|
173
|
+
ATTRIBUTE Acct-Session-Start-Time 1050 date
|
|
174
|
+
ATTRIBUTE Acct-Unique-Session-Id 1051 string
|
|
175
|
+
ATTRIBUTE Client-IP-Address 1052 ipaddr
|
|
176
|
+
ATTRIBUTE Ldap-UserDn 1053 string
|
|
177
|
+
ATTRIBUTE NS-MTA-MD5-Password 1054 string
|
|
178
|
+
ATTRIBUTE SQL-User-Name 1055 string
|
|
179
|
+
ATTRIBUTE LM-Password 1057 octets
|
|
180
|
+
ATTRIBUTE NT-Password 1058 octets
|
|
181
|
+
ATTRIBUTE SMB-Account-CTRL 1059 integer
|
|
182
|
+
ATTRIBUTE SMB-Account-CTRL-TEXT 1061 string
|
|
183
|
+
ATTRIBUTE User-Profile 1062 string
|
|
184
|
+
ATTRIBUTE Digest-Realm 1063 string
|
|
185
|
+
ATTRIBUTE Digest-Nonce 1064 string
|
|
186
|
+
ATTRIBUTE Digest-Method 1065 string
|
|
187
|
+
ATTRIBUTE Digest-URI 1066 string
|
|
188
|
+
ATTRIBUTE Digest-QOP 1067 string
|
|
189
|
+
ATTRIBUTE Digest-Algorithm 1068 string
|
|
190
|
+
ATTRIBUTE Digest-Body-Digest 1069 string
|
|
191
|
+
ATTRIBUTE Digest-CNonce 1070 string
|
|
192
|
+
ATTRIBUTE Digest-Nonce-Count 1071 string
|
|
193
|
+
ATTRIBUTE Digest-User-Name 1072 string
|
|
194
|
+
ATTRIBUTE Pool-Name 1073 string
|
|
195
|
+
ATTRIBUTE Ldap-Group 1074 string
|
|
196
|
+
ATTRIBUTE Module-Success-Message 1075 string
|
|
197
|
+
ATTRIBUTE Module-Failure-Message 1076 string
|
|
198
|
+
# X99-Fast 1077 integer
|
|
199
|
+
|
|
200
|
+
#
|
|
201
|
+
# Non-Protocol Attributes
|
|
202
|
+
# These attributes are used internally by the server
|
|
203
|
+
#
|
|
204
|
+
ATTRIBUTE Auth-Type 1000 integer
|
|
205
|
+
ATTRIBUTE Menu 1001 string
|
|
206
|
+
ATTRIBUTE Termination-Menu 1002 string
|
|
207
|
+
ATTRIBUTE Prefix 1003 string
|
|
208
|
+
ATTRIBUTE Suffix 1004 string
|
|
209
|
+
ATTRIBUTE Group 1005 string
|
|
210
|
+
ATTRIBUTE Crypt-Password 1006 string
|
|
211
|
+
ATTRIBUTE Connect-Rate 1007 integer
|
|
212
|
+
ATTRIBUTE Add-Prefix 1008 string
|
|
213
|
+
ATTRIBUTE Add-Suffix 1009 string
|
|
214
|
+
ATTRIBUTE Expiration 1010 date
|
|
215
|
+
ATTRIBUTE Autz-Type 1011 integer
|
|
216
|
+
|
|
217
|
+
#
|
|
218
|
+
# Integer Translations
|
|
219
|
+
#
|
|
220
|
+
|
|
221
|
+
# User Types
|
|
222
|
+
|
|
223
|
+
VALUE Service-Type Login-User 1
|
|
224
|
+
VALUE Service-Type Framed-User 2
|
|
225
|
+
VALUE Service-Type Callback-Login-User 3
|
|
226
|
+
VALUE Service-Type Callback-Framed-User 4
|
|
227
|
+
VALUE Service-Type Outbound-User 5
|
|
228
|
+
VALUE Service-Type Administrative-User 6
|
|
229
|
+
VALUE Service-Type NAS-Prompt-User 7
|
|
230
|
+
VALUE Service-Type Authenticate-Only 8
|
|
231
|
+
VALUE Service-Type Callback-NAS-Prompt 9
|
|
232
|
+
VALUE Service-Type Call-Check 10
|
|
233
|
+
VALUE Service-Type Callback-Administrative 11
|
|
234
|
+
|
|
235
|
+
# Framed Protocols
|
|
236
|
+
|
|
237
|
+
VALUE Framed-Protocol PPP 1
|
|
238
|
+
VALUE Framed-Protocol SLIP 2
|
|
239
|
+
VALUE Framed-Protocol ARAP 3
|
|
240
|
+
VALUE Framed-Protocol Gandalf-SLML 4
|
|
241
|
+
VALUE Framed-Protocol Xylogics-IPX-SLIP 5
|
|
242
|
+
VALUE Framed-Protocol X.75-Synchronous 6
|
|
243
|
+
|
|
244
|
+
# Framed Routing Values
|
|
245
|
+
|
|
246
|
+
VALUE Framed-Routing None 0
|
|
247
|
+
VALUE Framed-Routing Broadcast 1
|
|
248
|
+
VALUE Framed-Routing Listen 2
|
|
249
|
+
VALUE Framed-Routing Broadcast-Listen 3
|
|
250
|
+
|
|
251
|
+
# Framed Compression Types
|
|
252
|
+
|
|
253
|
+
VALUE Framed-Compression None 0
|
|
254
|
+
VALUE Framed-Compression Van-Jacobson-TCP-IP 1
|
|
255
|
+
VALUE Framed-Compression IPX-Header-Compression 2
|
|
256
|
+
VALUE Framed-Compression Stac-LZS 3
|
|
257
|
+
|
|
258
|
+
# Login Services
|
|
259
|
+
|
|
260
|
+
VALUE Login-Service Telnet 0
|
|
261
|
+
VALUE Login-Service Rlogin 1
|
|
262
|
+
VALUE Login-Service TCP-Clear 2
|
|
263
|
+
VALUE Login-Service PortMaster 3
|
|
264
|
+
VALUE Login-Service LAT 4
|
|
265
|
+
VALUE Login-Service X25-PAD 5
|
|
266
|
+
VALUE Login-Service X25-T3POS 6
|
|
267
|
+
VALUE Login-Service TCP-Clear-Quiet 8
|
|
268
|
+
|
|
269
|
+
# Login-TCP-Port (see /etc/services for more examples)
|
|
270
|
+
|
|
271
|
+
VALUE Login-TCP-Port Telnet 23
|
|
272
|
+
VALUE Login-TCP-Port Rlogin 513
|
|
273
|
+
VALUE Login-TCP-Port Rsh 514
|
|
274
|
+
|
|
275
|
+
# Status Types
|
|
276
|
+
|
|
277
|
+
VALUE Acct-Status-Type Start 1
|
|
278
|
+
VALUE Acct-Status-Type Stop 2
|
|
279
|
+
VALUE Acct-Status-Type Interim-Update 3
|
|
280
|
+
VALUE Acct-Status-Type Alive 3
|
|
281
|
+
VALUE Acct-Status-Type Accounting-On 7
|
|
282
|
+
VALUE Acct-Status-Type Accounting-Off 8
|
|
283
|
+
# RFC 2867 Additional Status-Type Values
|
|
284
|
+
VALUE Acct-Status-Type Tunnel-Start 9
|
|
285
|
+
VALUE Acct-Status-Type Tunnel-Stop 10
|
|
286
|
+
VALUE Acct-Status-Type Tunnel-Reject 11
|
|
287
|
+
VALUE Acct-Status-Type Tunnel-Link-Start 12
|
|
288
|
+
VALUE Acct-Status-Type Tunnel-Link-Stop 13
|
|
289
|
+
VALUE Acct-Status-Type Tunnel-Link-Reject 14
|
|
290
|
+
|
|
291
|
+
# Authentication Types
|
|
292
|
+
|
|
293
|
+
VALUE Acct-Authentic RADIUS 1
|
|
294
|
+
VALUE Acct-Authentic Local 2
|
|
295
|
+
|
|
296
|
+
# Termination Options
|
|
297
|
+
|
|
298
|
+
VALUE Termination-Action Default 0
|
|
299
|
+
VALUE Termination-Action RADIUS-Request 1
|
|
300
|
+
|
|
301
|
+
# NAS Port Types
|
|
302
|
+
|
|
303
|
+
VALUE NAS-Port-Type Async 0
|
|
304
|
+
VALUE NAS-Port-Type Sync 1
|
|
305
|
+
VALUE NAS-Port-Type ISDN 2
|
|
306
|
+
VALUE NAS-Port-Type ISDN-V120 3
|
|
307
|
+
VALUE NAS-Port-Type ISDN-V110 4
|
|
308
|
+
VALUE NAS-Port-Type Virtual 5
|
|
309
|
+
VALUE NAS-Port-Type PIAFS 6
|
|
310
|
+
VALUE NAS-Port-Type HDLC-Clear-Channel 7
|
|
311
|
+
VALUE NAS-Port-Type X.25 8
|
|
312
|
+
VALUE NAS-Port-Type X.75 9
|
|
313
|
+
VALUE NAS-Port-Type G.3-Fax 10
|
|
314
|
+
VALUE NAS-Port-Type SDSL 11
|
|
315
|
+
VALUE NAS-Port-Type ADSL-CAP 12
|
|
316
|
+
VALUE NAS-Port-Type ADSL-DMT 13
|
|
317
|
+
VALUE NAS-Port-Type IDSL 14
|
|
318
|
+
VALUE NAS-Port-Type Ethernet 15
|
|
319
|
+
VALUE NAS-Port-Type xDSL 16
|
|
320
|
+
VALUE NAS-Port-Type Cable 17
|
|
321
|
+
VALUE NAS-Port-Type Wireless-Other 18
|
|
322
|
+
VALUE NAS-Port-Type Wireless-802.11 19
|
|
323
|
+
|
|
324
|
+
# Acct Terminate Causes, available in 3.3.2 and later
|
|
325
|
+
|
|
326
|
+
VALUE Acct-Terminate-Cause User-Request 1
|
|
327
|
+
VALUE Acct-Terminate-Cause Lost-Carrier 2
|
|
328
|
+
VALUE Acct-Terminate-Cause Lost-Service 3
|
|
329
|
+
VALUE Acct-Terminate-Cause Idle-Timeout 4
|
|
330
|
+
VALUE Acct-Terminate-Cause Session-Timeout 5
|
|
331
|
+
VALUE Acct-Terminate-Cause Admin-Reset 6
|
|
332
|
+
VALUE Acct-Terminate-Cause Admin-Reboot 7
|
|
333
|
+
VALUE Acct-Terminate-Cause Port-Error 8
|
|
334
|
+
VALUE Acct-Terminate-Cause NAS-Error 9
|
|
335
|
+
VALUE Acct-Terminate-Cause NAS-Request 10
|
|
336
|
+
VALUE Acct-Terminate-Cause NAS-Reboot 11
|
|
337
|
+
VALUE Acct-Terminate-Cause Port-Unneeded 12
|
|
338
|
+
VALUE Acct-Terminate-Cause Port-Preempted 13
|
|
339
|
+
VALUE Acct-Terminate-Cause Port-Suspended 14
|
|
340
|
+
VALUE Acct-Terminate-Cause Service-Unavailable 15
|
|
341
|
+
VALUE Acct-Terminate-Cause Callback 16
|
|
342
|
+
VALUE Acct-Terminate-Cause User-Error 17
|
|
343
|
+
VALUE Acct-Terminate-Cause Host-Request 18
|
|
344
|
+
|
|
345
|
+
#VALUE Tunnel-Type L2TP 3
|
|
346
|
+
#VALUE Tunnel-Medium-Type IP 1
|
|
347
|
+
|
|
348
|
+
VALUE Prompt No-Echo 0
|
|
349
|
+
VALUE Prompt Echo 1
|
|
350
|
+
|
|
351
|
+
#
|
|
352
|
+
# Non-Protocol Integer Translations
|
|
353
|
+
#
|
|
354
|
+
|
|
355
|
+
VALUE Auth-Type Local 0
|
|
356
|
+
VALUE Auth-Type System 1
|
|
357
|
+
VALUE Auth-Type SecurID 2
|
|
358
|
+
VALUE Auth-Type Crypt-Local 3
|
|
359
|
+
VALUE Auth-Type Reject 4
|
|
360
|
+
VALUE Auth-Type ActivCard 5
|
|
361
|
+
VALUE Auth-Type EAP 6
|
|
362
|
+
VALUE Auth-Type ARAP 7
|
|
363
|
+
|
|
364
|
+
#
|
|
365
|
+
# Cistron extensions
|
|
366
|
+
#
|
|
367
|
+
VALUE Auth-Type Ldap 252
|
|
368
|
+
VALUE Auth-Type Pam 253
|
|
369
|
+
VALUE Auth-Type Accept 254
|
|
370
|
+
|
|
371
|
+
VALUE Auth-Type PAP 1024
|
|
372
|
+
VALUE Auth-Type CHAP 1025
|
|
373
|
+
VALUE Auth-Type LDAP 1026
|
|
374
|
+
VALUE Auth-Type PAM 1027
|
|
375
|
+
VALUE Auth-Type MS-CHAP 1028
|
|
376
|
+
VALUE Auth-Type Kerberos 1029
|
|
377
|
+
VALUE Auth-Type CRAM 1030
|
|
378
|
+
VALUE Auth-Type NS-MTA-MD5 1031
|
|
379
|
+
VALUE Auth-Type CRAM 1032
|
|
380
|
+
VALUE Auth-Type SMB 1033
|
|
381
|
+
|
|
382
|
+
#
|
|
383
|
+
# Authorization type, too.
|
|
384
|
+
#
|
|
385
|
+
VALUE Autz-Type Local 0
|
|
386
|
+
|
|
387
|
+
#
|
|
388
|
+
# Experimental Non-Protocol Integer Translations for Cistron-Radiusd
|
|
389
|
+
#
|
|
390
|
+
VALUE Fall-Through No 0
|
|
391
|
+
VALUE Fall-Through Yes 1
|
|
392
|
+
|
|
393
|
+
VALUE Packet-Type Access-Request 1
|
|
394
|
+
VALUE Packet-Type Access-Accept 2
|
|
395
|
+
VALUE Packet-Type Access-Reject 3
|
|
396
|
+
VALUE Packet-Type Accounting-Request 4
|
|
397
|
+
VALUE Packet-Type Accounting-Response 5
|
|
398
|
+
VALUE Packet-Type Accounting-Status 6
|
|
399
|
+
VALUE Packet-Type Password-Request 7
|
|
400
|
+
VALUE Packet-Type Password-Accept 8
|
|
401
|
+
VALUE Packet-Type Password-Reject 9
|
|
402
|
+
VALUE Packet-Type Accounting-Message 10
|
|
403
|
+
VALUE Packet-Type Access-Challenge 11
|
|
404
|
+
VALUE Packet-Type Status-Server 12
|
|
405
|
+
VALUE Packet-Type Status-Client 13
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# -*- text -*-
|
|
2
|
+
# Copyright (C) 2015 The FreeRADIUS Server project and contributors
|
|
3
|
+
#
|
|
4
|
+
# The FreeRADIUS Vendor-Specific dictionary.
|
|
5
|
+
#
|
|
6
|
+
# Version: $Id: ea468da88509aeff96b6f0d38ebc97411b9775b3 $
|
|
7
|
+
#
|
|
8
|
+
# For a complete list of Private Enterprise Codes, see:
|
|
9
|
+
#
|
|
10
|
+
# http://www.isi.edu/in-notes/iana/assignments/enterprise-numbers
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
VENDOR FreeRADIUS 11344
|
|
14
|
+
|
|
15
|
+
BEGIN-VENDOR FreeRADIUS
|
|
16
|
+
|
|
17
|
+
#
|
|
18
|
+
# This attribute is really a bitmask.
|
|
19
|
+
#
|
|
20
|
+
ATTRIBUTE FreeRADIUS-Statistics-Type 127 integer
|
|
21
|
+
|
|
22
|
+
VALUE FreeRADIUS-Statistics-Type None 0
|
|
23
|
+
VALUE FreeRADIUS-Statistics-Type Authentication 1
|
|
24
|
+
VALUE FreeRADIUS-Statistics-Type Accounting 2
|
|
25
|
+
VALUE FreeRADIUS-Statistics-Type Proxy-Authentication 4
|
|
26
|
+
VALUE FreeRADIUS-Statistics-Type Proxy-Accounting 8
|
|
27
|
+
VALUE FreeRADIUS-Statistics-Type Internal 0x10
|
|
28
|
+
VALUE FreeRADIUS-Statistics-Type Client 0x20
|
|
29
|
+
VALUE FreeRADIUS-Statistics-Type Server 0x40
|
|
30
|
+
VALUE FreeRADIUS-Statistics-Type Home-Server 0x80
|
|
31
|
+
|
|
32
|
+
VALUE FreeRADIUS-Statistics-Type Auth-Acct 0x03
|
|
33
|
+
VALUE FreeRADIUS-Statistics-Type Proxy-Auth-Acct 0x0c
|
|
34
|
+
|
|
35
|
+
VALUE FreeRADIUS-Statistics-Type All 0x1f
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# FreeRADIUS statistic result attributes
|
|
39
|
+
#
|
|
40
|
+
ATTRIBUTE FreeRADIUS-Total-Access-Requests 128 integer
|
|
41
|
+
ATTRIBUTE FreeRADIUS-Total-Access-Accepts 129 integer
|
|
42
|
+
ATTRIBUTE FreeRADIUS-Total-Access-Rejects 130 integer
|
|
43
|
+
ATTRIBUTE FreeRADIUS-Total-Access-Challenges 131 integer
|
|
44
|
+
ATTRIBUTE FreeRADIUS-Total-Auth-Responses 132 integer
|
|
45
|
+
ATTRIBUTE FreeRADIUS-Total-Auth-Duplicate-Requests 133 integer
|
|
46
|
+
ATTRIBUTE FreeRADIUS-Total-Auth-Malformed-Requests 134 integer
|
|
47
|
+
ATTRIBUTE FreeRADIUS-Total-Auth-Invalid-Requests 135 integer
|
|
48
|
+
ATTRIBUTE FreeRADIUS-Total-Auth-Dropped-Requests 136 integer
|
|
49
|
+
ATTRIBUTE FreeRADIUS-Total-Auth-Unknown-Types 137 integer
|
|
50
|
+
|
|
51
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Access-Requests 138 integer
|
|
52
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Access-Accepts 139 integer
|
|
53
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Access-Rejects 140 integer
|
|
54
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Access-Challenges 141 integer
|
|
55
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Auth-Responses 142 integer
|
|
56
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Auth-Duplicate-Requests 143 integer
|
|
57
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Auth-Malformed-Requests 144 integer
|
|
58
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Auth-Invalid-Requests 145 integer
|
|
59
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Auth-Dropped-Requests 146 integer
|
|
60
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Auth-Unknown-Types 147 integer
|
|
61
|
+
|
|
62
|
+
ATTRIBUTE FreeRADIUS-Total-Accounting-Requests 148 integer
|
|
63
|
+
ATTRIBUTE FreeRADIUS-Total-Accounting-Responses 149 integer
|
|
64
|
+
ATTRIBUTE FreeRADIUS-Total-Acct-Duplicate-Requests 150 integer
|
|
65
|
+
ATTRIBUTE FreeRADIUS-Total-Acct-Malformed-Requests 151 integer
|
|
66
|
+
ATTRIBUTE FreeRADIUS-Total-Acct-Invalid-Requests 152 integer
|
|
67
|
+
ATTRIBUTE FreeRADIUS-Total-Acct-Dropped-Requests 153 integer
|
|
68
|
+
ATTRIBUTE FreeRADIUS-Total-Acct-Unknown-Types 154 integer
|
|
69
|
+
|
|
70
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Accounting-Requests 155 integer
|
|
71
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Accounting-Responses 156 integer
|
|
72
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Acct-Duplicate-Requests 157 integer
|
|
73
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Acct-Malformed-Requests 158 integer
|
|
74
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Acct-Invalid-Requests 159 integer
|
|
75
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Acct-Dropped-Requests 160 integer
|
|
76
|
+
ATTRIBUTE FreeRADIUS-Total-Proxy-Acct-Unknown-Types 161 integer
|
|
77
|
+
|
|
78
|
+
ATTRIBUTE FreeRADIUS-Queue-Len-Internal 162 integer
|
|
79
|
+
ATTRIBUTE FreeRADIUS-Queue-Len-Proxy 163 integer
|
|
80
|
+
ATTRIBUTE FreeRADIUS-Queue-Len-Auth 164 integer
|
|
81
|
+
ATTRIBUTE FreeRADIUS-Queue-Len-Acct 165 integer
|
|
82
|
+
ATTRIBUTE FreeRADIUS-Queue-Len-Detail 166 integer
|
|
83
|
+
|
|
84
|
+
ATTRIBUTE FreeRADIUS-Stats-Start-Time 176 date
|
|
85
|
+
ATTRIBUTE FreeRADIUS-Stats-HUP-Time 177 date
|
|
86
|
+
|
|
87
|
+
ATTRIBUTE FreeRADIUS-Queue-PPS-In 181 integer
|
|
88
|
+
ATTRIBUTE FreeRADIUS-Queue-PPS-In 182 integer
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
END-VENDOR FreeRADIUS
|
example/pyrad.log
ADDED
|
File without changes
|
example/server.py
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
from pyrad import dictionary, packet, server
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
logging.basicConfig(filename="pyrad.log", level="DEBUG",
|
|
6
|
+
format="%(asctime)s [%(levelname)-8s] %(message)s")
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class FakeServer(server.Server):
|
|
10
|
+
|
|
11
|
+
def HandleAuthPacket(self, pkt):
|
|
12
|
+
print("Received an authentication request")
|
|
13
|
+
print("Attributes: ")
|
|
14
|
+
for attr in pkt.keys():
|
|
15
|
+
print("%s: %s" % (attr, pkt[attr]))
|
|
16
|
+
|
|
17
|
+
reply = self.CreateReplyPacket(pkt, **{
|
|
18
|
+
"Service-Type": "Framed-User",
|
|
19
|
+
"Framed-IP-Address": '192.168.0.1',
|
|
20
|
+
"Framed-IPv6-Prefix": "fc66::1/64"
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
reply.code = packet.AccessAccept
|
|
24
|
+
self.SendReplyPacket(pkt.fd, reply)
|
|
25
|
+
|
|
26
|
+
def HandleAcctPacket(self, pkt):
|
|
27
|
+
|
|
28
|
+
print("Received an accounting request")
|
|
29
|
+
print("Attributes: ")
|
|
30
|
+
for attr in pkt.keys():
|
|
31
|
+
print("%s: %s" % (attr, pkt[attr]))
|
|
32
|
+
|
|
33
|
+
reply = self.CreateReplyPacket(pkt)
|
|
34
|
+
self.SendReplyPacket(pkt.fd, reply)
|
|
35
|
+
|
|
36
|
+
def HandleCoaPacket(self, pkt):
|
|
37
|
+
|
|
38
|
+
print("Received an coa request")
|
|
39
|
+
print("Attributes: ")
|
|
40
|
+
for attr in pkt.keys():
|
|
41
|
+
print("%s: %s" % (attr, pkt[attr]))
|
|
42
|
+
|
|
43
|
+
reply = self.CreateReplyPacket(pkt)
|
|
44
|
+
self.SendReplyPacket(pkt.fd, reply)
|
|
45
|
+
|
|
46
|
+
def HandleDisconnectPacket(self, pkt):
|
|
47
|
+
|
|
48
|
+
print("Received an disconnect request")
|
|
49
|
+
print("Attributes: ")
|
|
50
|
+
for attr in pkt.keys():
|
|
51
|
+
print("%s: %s" % (attr, pkt[attr]))
|
|
52
|
+
|
|
53
|
+
reply = self.CreateReplyPacket(pkt)
|
|
54
|
+
# COA NAK
|
|
55
|
+
reply.code = 45
|
|
56
|
+
self.SendReplyPacket(pkt.fd, reply)
|
|
57
|
+
|
|
58
|
+
if __name__ == '__main__':
|
|
59
|
+
|
|
60
|
+
# create server and read dictionary
|
|
61
|
+
srv = FakeServer(dict=dictionary.Dictionary("dictionary"), coa_enabled=True)
|
|
62
|
+
|
|
63
|
+
# add clients (address, secret, name)
|
|
64
|
+
srv.hosts["127.0.0.1"] = server.RemoteHost("127.0.0.1", b"Kah3choteereethiejeimaeziecumi", "localhost")
|
|
65
|
+
srv.BindToAddress("0.0.0.0")
|
|
66
|
+
|
|
67
|
+
# start server
|
|
68
|
+
srv.Run()
|