change_password_rpc.py
1 |
#!/usr/bin/env python3
|
---|---|
2 |
|
3 |
import socketserver |
4 |
import subprocess |
5 |
|
6 |
from xmlrpc.server import ( |
7 |
SimpleXMLRPCDispatcher, |
8 |
SimpleXMLRPCRequestHandler, |
9 |
) |
10 |
|
11 |
|
12 |
class UnixStreamXMLRPCRequestHandler( |
13 |
SimpleXMLRPCRequestHandler |
14 |
): |
15 |
disable_nagle_algorithm = False
|
16 |
|
17 |
def address_string(self): |
18 |
return self.client_address |
19 |
|
20 |
|
21 |
class UnixStreamXMLRPCServer( |
22 |
socketserver.UnixStreamServer, SimpleXMLRPCDispatcher |
23 |
): |
24 |
def __init__( |
25 |
self,
|
26 |
addr, |
27 |
log_requests=True,
|
28 |
allow_none=True,
|
29 |
encoding=None,
|
30 |
bind_and_activate=True,
|
31 |
use_builtin_types=True,
|
32 |
): |
33 |
self.logRequests = log_requests
|
34 |
SimpleXMLRPCDispatcher.__init__( |
35 |
self, allow_none, encoding, use_builtin_types
|
36 |
) |
37 |
socketserver.UnixStreamServer.__init__( |
38 |
self,
|
39 |
addr, |
40 |
UnixStreamXMLRPCRequestHandler, |
41 |
bind_and_activate, |
42 |
) |
43 |
|
44 |
|
45 |
# Server Demo
|
46 |
|
47 |
server = UnixStreamXMLRPCServer("/run/eole-sso/socket")
|
48 |
|
49 |
with server:
|
50 |
server.register_introspection_functions() |
51 |
|
52 |
# Register a function under a different name
|
53 |
def change_password(username, password, from_url): |
54 |
cmd = "/usr/sbin/changepasswordeole.pl {} '{}'".format(username, password)
|
55 |
try:
|
56 |
ret = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True)
|
57 |
except subprocess.CalledProcessError as e: |
58 |
return 'failure' |
59 |
return 'success' |
60 |
|
61 |
server.register_function(change_password) |
62 |
|
63 |
# Run the server's main loop
|
64 |
server.serve_forever() |