#!/usr/bin/env python import SocketServer import json import guestfs import re PORT = 16510 ADDRESS = "0.0.0.0" class MyTCPServer(SocketServer.ThreadingTCPServer): allow_reuse_address = True class MyTCPServerHandler(SocketServer.BaseRequestHandler): def handle(self): try: # recive data data = json.loads(self.request.recv(1024).strip()) dom_name = data['vname'] passwd_hash = data['passwd'] # GuestFS gfs = guestfs.GuestFS (python_return_dict=True) try: gfs.add_domain(dom_name) gfs.launch() parts = gfs.list_partitions() for part in parts: try: gfs.mount(part, '/') if gfs.is_file('/etc/shadow'): file_shadow = gfs.cat('/etc/shadow') new_root_hash = "root:" + passwd_hash + ":" file_shadow_new = re.sub('^root:.*?:', new_root_hash, file_shadow) gfs.write("/etc/shadow", file_shadow_new) gfs.chmod('640', '/etc/shadow') gfs.umount(part) self.request.sendall(json.dumps({'return':'success'})) except RuntimeError: pass gfs.shutdown() gfs.close() except RuntimeError, err: self.request.sendall(json.dumps({'return': 'error', 'message': err.message})) except Exception, e: print "Exception wile receiving message: ", e server = MyTCPServer((ADDRESS, PORT), MyTCPServerHandler) server.serve_forever()