Merge lp:~akuzminsky/twindb-agent/bug-1432002 into lp:twindb-agent

Proposed by Aleksandr Kuzminsky
Status: Merged
Approved by: Aleksandr Kuzminsky
Approved revision: 17
Merged at revision: 17
Proposed branch: lp:~akuzminsky/twindb-agent/bug-1432002
Merge into: lp:twindb-agent
Diff against target: 79 lines (+62/-0)
1 file modified
twindb.py (+62/-0)
To merge this branch: bzr merge lp:~akuzminsky/twindb-agent/bug-1432002
Reviewer Review Type Date Requested Status
Ovais Tariq Pending
Review via email: mp+253013@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'twindb.py'
2--- twindb.py 2015-03-07 04:39:13 +0000
3+++ twindb.py 2015-03-16 02:21:57 +0000
4@@ -1738,6 +1738,66 @@
5 return backup_size
6
7
8+def handler_send_key(config, job):
9+ """
10+ Processes send_key job
11+ """
12+ # Get owner of the GPG key
13+ try:
14+ gpg_pub_key = job["params"]["gpg_pub_key"]
15+ if gpg_pub_key:
16+ cmd_1 = ["gpg", "--list-packets"]
17+ logger.debug("Starting %r" % cmd_1)
18+ p1 = subprocess.Popen(cmd_1, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
19+ cout, cerr = p1.communicate(gpg_pub_key)
20+ for line in cout.split("\n"):
21+ if "keyid:" in line:
22+ keyid = line.replace("keyid:", "").strip()
23+ break
24+ logger.debug("Requestor's public key id is %s" % keyid)
25+ else:
26+ logger.error("Requestor public key is empty")
27+ return
28+ except OSError as err:
29+ logger.error(err)
30+ return
31+ # Import public GPG key. It's a user public key sent by the dispatcher
32+ try:
33+ logger.debug("Importing requestor's key %s" % keyid)
34+ cmd_1 = ["gpg", "--import"]
35+ p1 = subprocess.Popen(cmd_1, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
36+ p1.communicate(gpg_pub_key)
37+ except OSError as err:
38+ logger.error(err)
39+ return
40+ # Get private key and encrypt it
41+ try:
42+ gpg_pub_key = job["params"]["gpg_pub_key"]
43+ if gpg_pub_key:
44+ logger.debug("Exporting private key of server %s" % server_id)
45+ cmd_1 = ["gpg", "--armor", "--export-secret-key", server_id]
46+ cmd_2 = ["gpg", "--armor", "--encrypt", "--sign", "--batch", "-r", keyid, "--local-user", server_id, "--trust-model", "always"]
47+ logger.debug("Starting %r" % cmd_1)
48+ p1 = subprocess.Popen(cmd_1, stdout=subprocess.PIPE)
49+ logger.debug("Starting %r" % cmd_2)
50+ p2 = subprocess.Popen(cmd_2, stdin=p1.stdout, stdout=subprocess.PIPE)
51+ cout, cerr = p2.communicate()
52+ enc_private_key = cout
53+ logger.debug("Encrypted private key %s" % enc_private_key)
54+ except OSError as err:
55+ logger.error(err)
56+ return
57+ # Now send the private key to dispatcher
58+ job_id = job["job_id"]
59+ data = {
60+ "type": "send_key",
61+ "params": {
62+ "enc_private_key": enc_private_key,
63+ "job_id": job_id
64+ }
65+ }
66+ get_response(data)
67+
68 # Check if directory is empty
69 # Inputs
70 # dir - directory name
71@@ -2341,6 +2401,8 @@
72 elif job["type"] == "restore":
73 #return restore_backup(config, job)
74 return False
75+ elif job["type"] == "send_key":
76+ return handler_send_key(config, job)
77 else:
78 logger.error("Unsupported job type " + job["type"])
79 return False

Subscribers

People subscribed via source and target branches

to all changes: