b5e13dc28d4204b455863ce79a501a6ba074c50b
[freeradius.git] / raddb / policy.d / filter
1 #
2 #       Forbid all EAP types.  Enable this by putting "forbid_eap"
3 #       into the "authorize" section.
4 #
5 forbid_eap {
6         if (EAP-Message) {
7                 reject
8         }
9 }
10
11 #
12 #       Forbid all non-EAP types outside of an EAP tunnel.
13 #
14 permit_only_eap {
15         if (!EAP-Message) {
16                 #  We MAY be inside of a TTLS tunnel.
17                 #  PEAP and EAP-FAST require EAP inside of
18                 #  the tunnel, so this check is OK.
19                 #  If so, then there MUST be an outer EAP message.
20                 if (!"%{outer.request:EAP-Message}") {
21                         reject
22                 }
23         }
24 }
25
26 #
27 #       Remove Reply-Message from response if were doing EAP
28 #
29 #  Be RFC 3579 2.6.5 compliant - EAP-Message and Reply-Message should
30 #  not be present in the same response.
31 #
32 remove_reply_message_if_eap {
33         if(reply:EAP-Message && reply:Reply-Message) {
34                 update reply {
35                         Reply-Message !* ANY
36                 }
37         }
38         else {
39                 noop
40         }
41 }
42
43 #
44 #       Example of forbidding all attempts to login via
45 #       realms.
46 #
47 deny_realms {
48         if (User-Name =~ /@|\\/) {
49                 reject
50         }
51 }
52
53 #
54 #       Filter the username
55 #
56 #  Force some sanity on User-Name. This helps to avoid issues
57 #  issues where the back-end database is "forgiving" about
58 #  what constitutes a user name.
59 #
60 filter_username {
61         #
62         #  reject mixed case
63         #  e.g. "UseRNaMe"
64         #
65         if (User-Name != "%{tolower:%{User-Name}}") {
66                 reject
67         }
68
69         #
70         #  reject all whitespace
71         #  e.g. "user@ site.com", or "us er", or " user", or "user "
72         #
73         if (User-Name =~ / /) {
74                 update reply {
75                         Reply-Message += "Rejected: Username contains whitespace"
76                 }
77                 reject
78         }
79
80         #
81         #  reject Multiple @'s
82         #  e.g. "user@site.com@site.com"
83         #
84         if(User-Name =~ /@.*@/ ) {
85                 update reply {
86                         Reply-Message += "Rejected: Multiple @ in username"
87                 }
88                 reject
89         }
90         
91         #
92         #  reject double dots
93         #  e.g. "user@site..com"
94         #
95         if (User-Name =~ /\\.\\./ ) {
96                 update reply {
97                         Reply-Message += "Rejected: Username comtains ..s"
98                 }
99                 reject
100         }
101         
102         #
103         #  must have at least 1 string-dot-string after @ 
104         #  e.g. "user@site.com"
105         #
106         if (User-Name !~ /@(.+)\\.(.+)$/)  {
107                 update reply {
108                         Reply-Message += "Rejected: Realm does not have at least one dot seperator"
109                 }
110                 reject
111         }
112
113         #
114         #  Realm ends with a dot
115         #  e.g. "user@site.com."
116         #
117         if (User-Name =~ /\\.$/)  {
118                 update reply {
119                         Reply-Message += "Rejected: Realm ends with a dot"
120                 }
121                 reject
122         }
123
124         #
125         #  Realm begins with a dot
126         #  e.g. "user@.site.com"
127         #
128         if (User-Name =~ /@\\./)  {
129                 update reply {
130                         Reply-Message += "Rejected: Realm begins with a dot"
131                 }
132                 reject
133         }
134 }
135