Notes on embedded zeros in passwords
[freeradius.git] / raddb / policy.d / filter
1 #
2 #       Example of forbidding all attempts to login via
3 #       realms.
4 #
5 deny_realms {
6         if (&User-Name && (&User-Name =~ /@|\\/)) {
7                 reject
8         }
9 }
10
11 #
12 #       Filter the username
13 #
14 #  Force some sanity on User-Name. This helps to avoid issues
15 #  issues where the back-end database is "forgiving" about
16 #  what constitutes a user name.
17 #
18 filter_username {
19         if (!&User-Name) {
20                 noop
21         }
22
23         #
24         #  reject mixed case e.g. "UseRNaMe"
25         #
26         #if (&User-Name != "%{tolower:%{User-Name}}") {
27         #       reject
28         #}
29
30         #
31         #  reject all whitespace
32         #  e.g. "user@ site.com", or "us er", or " user", or "user "
33         #
34         if (&User-Name =~ / /) {
35                 update reply {
36                         &Reply-Message += 'Rejected: Username contains whitespace'
37                 }
38                 reject
39         }
40
41         #
42         #  reject Multiple @'s
43         #  e.g. "user@site.com@site.com"
44         #
45         if (&User-Name =~ /@.*@/ ) {
46                 update reply {
47                         &Reply-Message += 'Rejected: Multiple @ in username'
48                 }
49                 reject
50         }
51
52         #
53         #  reject double dots
54         #  e.g. "user@site..com"
55         #
56         if (&User-Name =~ /\.\./ ) {
57                 update reply {
58                         &Reply-Message += 'Rejected: Username contains ..s'
59                 }
60                 reject
61         }
62
63         #
64         #  must have at least 1 string-dot-string after @
65         #  e.g. "user@site.com"
66         #
67         if ((&User-Name =~ /@/) && (&User-Name !~ /@(.+)\.(.+)$/))  {
68                 update reply {
69                         &Reply-Message += 'Rejected: Realm does not have at least one dot separator'
70                 }
71                 reject
72         }
73
74         #
75         #  Realm ends with a dot
76         #  e.g. "user@site.com."
77         #
78         if (&User-Name =~ /\.$/)  {
79                 update reply {
80                         &Reply-Message += 'Rejected: Realm ends with a dot'
81                 }
82                 reject
83         }
84
85         #
86         #  Realm begins with a dot
87         #  e.g. "user@.site.com"
88         #
89         if (&User-Name =~ /@\./)  {
90                 update reply {
91                         &Reply-Message += 'Rejected: Realm begins with a dot'
92                 }
93                 reject
94         }
95 }
96
97 #
98 #       Filter the User-Password
99 #
100 #  Some equipment sends passwords with embedded zeros.
101 #  This poliocy filters them out.
102 #
103 filter_password {
104         if (&User-Password &&
105            (&User-Password != "%{string:User-Password}")) {
106                 update request {
107                         &Tmp-String-0 := "%{string:User-Password}"
108                         &User-Password := "%{string:Tmp-String-0}"
109                 }
110          }
111 }