1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2024-12-26 08:05:22 +00:00
webvirtcloud/conf/daemon/gstfsd

59 lines
2.1 KiB
Text
Raw Normal View History

2015-05-21 08:52:10 +00:00
#!/usr/bin/env python
2015-05-27 13:41:08 +00:00
#
# gstfsd - WebVirtCloud daemon for managing VM's filesystem
#
2015-05-21 08:52:10 +00:00
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):
# recive data
data = json.loads(self.request.recv(1024).strip())
# GuestFS
2015-06-08 19:45:56 +00:00
gfs = guestfs.GuestFS(python_return_dict=True)
2015-05-21 08:52:10 +00:00
try:
gfs.add_domain(data['vname'])
gfs.launch()
parts = gfs.list_partitions()
for part in parts:
try:
gfs.mount(part, '/')
if gfs.is_file('/etc/shadow'):
if data['action'] == 'password':
file_shadow = gfs.cat('/etc/shadow')
new_root_hash = "root:" + data['passwd'] + ":"
file_shadow_new = re.sub('^root:.*?:', new_root_hash, file_shadow)
gfs.write('/etc/shadow', file_shadow_new)
gfs.chmod(640, '/etc/shadow')
self.request.sendall(json.dumps({'return': 'success'}))
if data['action'] == 'publickey':
if not gfs.is_dir('/root/.ssh'):
2015-06-08 19:45:56 +00:00
gfs.mkdir('/root/.ssh')
gfs.chmod(0700, "/root/.ssh")
gfs.write('/root/.ssh/authorized_keys', data['key'])
gfs.chmod(0600, '/root/.ssh/authorized_keys')
self.request.sendall(json.dumps({'return': 'success'}))
gfs.umount(part)
2015-05-21 08:52:10 +00:00
except RuntimeError:
pass
gfs.shutdown()
gfs.close()
except RuntimeError, err:
self.request.sendall(json.dumps({'return': 'error', 'message': err.message}))
server = MyTCPServer((ADDRESS, PORT), MyTCPServerHandler)
server.serve_forever()