forked from mrda/junkcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathis_hostname_safe.py
More file actions
executable file
·78 lines (70 loc) · 2.52 KB
/
is_hostname_safe.py
File metadata and controls
executable file
·78 lines (70 loc) · 2.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env python
#
# is_hostname_safe - determine whether a supplied string is hostname safe.
#
# Copyright (C) 2014 Michael Davies <michael@the-davies.net>
#
# By "hostname safe" we mean the whether the hostname part of a FQDN
# follows the approporiate standards for a hostname. Specifically:
# * http://en.wikipedia.org/wiki/Hostname
# * http://tools.ietf.org/html/rfc952
# * http://tools.ietf.org/html/rfc1123
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
#
import re
import sys
def is_hostname_safe(hostname):
regex = '^[a-z0-9]([a-z0-9\-]{0,61}[a-z0-9]|[a-z0-9]{0,62})?$'
p = re.compile(regex)
return p.match(hostname) is not None
if __name__ == '__main__':
if len(sys.argv) == 2:
print is_hostname_safe(sys.argv[1])
else:
# Otherwise just run the tests
tests = {
'spam': True,
'-spam': False,
'spam-': False,
'spam-eggs': True,
'spam eggs': False,
'9spam': True,
'spam7': True,
'br34kf4st': True,
'$pam': False,
'egg$': False,
'spam#eggs': False,
' eggs': False,
'spam ': False,
'': False,
's': True,
's' * 63: True,
's' * 64: False,
}
print "\nTesting is_hostname_safe()\n"
final_result = True
for id, name in enumerate(tests):
result = is_hostname_safe(name)
test_result = result == tests[name]
if test_result:
print "Test %s: PASSED Testing '%s', got '%s'" % \
(id, name, tests[name])
else:
print "Test %s: *** FAILED '%s' != '%s' got '%s'" % \
(id, name, tests[name], result)
final_result = final_result and test_result
print "\nAll tests passed? %s\n" % final_result