Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/crypto/krb5/src/lib/krad/t_daemon.py
39536 views
1
# Copyright 2013 Red Hat, Inc. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or without
4
# modification, are permitted provided that the following conditions are met:
5
#
6
# 1. Redistributions of source code must retain the above copyright
7
# notice, this list of conditions and the following disclaimer.
8
#
9
# 2. Redistributions in binary form must reproduce the above copyright
10
# notice, this list of conditions and the following disclaimer in
11
# the documentation and/or other materials provided with the
12
# distribution.
13
#
14
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
15
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
16
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
17
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
18
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
22
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
23
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26
from io import StringIO
27
import os
28
import sys
29
import signal
30
31
try:
32
from pyrad import dictionary, packet, server
33
except ImportError:
34
sys.stderr.write("pyrad not found!\n")
35
sys.exit(0)
36
37
# We could use a dictionary file, but since we need
38
# such few attributes, we'll just include them here
39
DICTIONARY = """
40
ATTRIBUTE\tUser-Name\t1\tstring
41
ATTRIBUTE\tUser-Password\t2\toctets
42
ATTRIBUTE\tNAS-Identifier\t32\tstring
43
ATTRIBUTE\tMessage-Authenticator\t80\toctets
44
"""
45
46
class TestServer(server.Server):
47
def _HandleAuthPacket(self, pkt):
48
server.Server._HandleAuthPacket(self, pkt)
49
50
passwd = []
51
52
for key in pkt.keys():
53
if key == "User-Password":
54
passwd = [pkt.PwDecrypt(x) for x in pkt[key]]
55
56
reply = self.CreateReplyPacket(pkt, message_authenticator=True)
57
if passwd == ['accept']:
58
reply.code = packet.AccessAccept
59
else:
60
reply.code = packet.AccessReject
61
self.SendReplyPacket(pkt.fd, reply)
62
63
srv = TestServer(addresses=["localhost"],
64
hosts={"127.0.0.1":
65
server.RemoteHost("127.0.0.1", b"foo", "localhost")},
66
dict=dictionary.Dictionary(StringIO(DICTIONARY)))
67
68
# Write a sentinel character to let the parent process know we're listening.
69
sys.stdout.write("~")
70
sys.stdout.flush()
71
72
srv.Run()
73
74