]>
Commit | Line | Data |
---|---|---|
e9ee6d7c | 1 | From 139f49fe0cb825885fd4cddde96195d87149f07d Mon Sep 17 00:00:00 2001 |
ca0fe5f5 WB |
2 | From: Wolfgang Bumiller <w.bumiller@proxmox.com> |
3 | Date: Wed, 9 Dec 2015 16:51:23 +0100 | |
9c3bec39 | 4 | Subject: [PATCH 27/47] vma: add firewall |
ca0fe5f5 WB |
5 | |
6 | --- | |
7 | blockdev.c | 78 ++++++++++++++++++++++++++++++++++---------------------- | |
8 | hmp.c | 2 +- | |
9 | qapi-schema.json | 1 + | |
1a91ab45 | 10 | 3 files changed, 50 insertions(+), 31 deletions(-) |
ca0fe5f5 WB |
11 | |
12 | diff --git a/blockdev.c b/blockdev.c | |
e9ee6d7c | 13 | index 437ed57..19828de 100644 |
ca0fe5f5 WB |
14 | --- a/blockdev.c |
15 | +++ b/blockdev.c | |
1a91ab45 | 16 | @@ -3163,6 +3163,44 @@ void qmp_backup_cancel(Error **errp) |
ca0fe5f5 WB |
17 | } |
18 | } | |
19 | ||
20 | +static int config_to_vma(const char *file, BackupFormat format, | |
21 | + const char *backup_dir, VmaWriter *vmaw, | |
22 | + Error **errp) | |
23 | +{ | |
24 | + char *cdata = NULL; | |
25 | + gsize clen = 0; | |
26 | + GError *err = NULL; | |
27 | + if (!g_file_get_contents(file, &cdata, &clen, &err)) { | |
28 | + error_setg(errp, "unable to read file '%s'", file); | |
29 | + return 1; | |
30 | + } | |
31 | + | |
32 | + char *basename = g_path_get_basename(file); | |
33 | + | |
34 | + if (format == BACKUP_FORMAT_VMA) { | |
35 | + if (vma_writer_add_config(vmaw, basename, cdata, clen) != 0) { | |
36 | + error_setg(errp, "unable to add %s config data to vma archive", file); | |
37 | + g_free(cdata); | |
38 | + g_free(basename); | |
39 | + return 1; | |
40 | + } | |
41 | + } else if (format == BACKUP_FORMAT_DIR) { | |
42 | + char config_path[PATH_MAX]; | |
43 | + snprintf(config_path, PATH_MAX, "%s/%s", backup_dir, basename); | |
44 | + if (!g_file_set_contents(config_path, cdata, clen, &err)) { | |
45 | + error_setg(errp, "unable to write config file '%s'", config_path); | |
46 | + g_free(cdata); | |
47 | + g_free(basename); | |
48 | + return 1; | |
49 | + } | |
50 | + } | |
51 | + | |
52 | + g_free(basename); | |
53 | + g_free(cdata); | |
54 | + | |
55 | + return 0; | |
56 | +} | |
57 | + | |
68a30562 | 58 | bool block_job_should_pause(BlockJob *job); |
ca0fe5f5 WB |
59 | static void pvebackup_run_next_job(void) |
60 | { | |
1a91ab45 | 61 | @@ -3190,6 +3228,7 @@ static void pvebackup_run_next_job(void) |
ca0fe5f5 WB |
62 | UuidInfo *qmp_backup(const char *backup_file, bool has_format, |
63 | BackupFormat format, | |
64 | bool has_config_file, const char *config_file, | |
65 | + bool has_firewall_file, const char *firewall_file, | |
66 | bool has_devlist, const char *devlist, | |
67 | bool has_speed, int64_t speed, Error **errp) | |
68 | { | |
e9ee6d7c | 69 | @@ -3342,38 +3381,17 @@ UuidInfo *qmp_backup(const char *backup_file, bool has_format, |
ca0fe5f5 WB |
70 | |
71 | /* add configuration file to archive */ | |
72 | if (has_config_file) { | |
73 | - char *cdata = NULL; | |
74 | - gsize clen = 0; | |
75 | - GError *err = NULL; | |
76 | - if (!g_file_get_contents(config_file, &cdata, &clen, &err)) { | |
77 | - error_setg(errp, "unable to read file '%s'", config_file); | |
78 | - goto err; | |
79 | - } | |
80 | - | |
81 | - char *basename = g_path_get_basename(config_file); | |
82 | - | |
83 | - if (format == BACKUP_FORMAT_VMA) { | |
84 | - if (vma_writer_add_config(vmaw, basename, cdata, clen) != 0) { | |
85 | - error_setg(errp, "unable to add config data to vma archive"); | |
86 | - g_free(cdata); | |
87 | - g_free(basename); | |
88 | - goto err; | |
89 | - } | |
90 | - } else if (format == BACKUP_FORMAT_DIR) { | |
91 | - char config_path[PATH_MAX]; | |
92 | - snprintf(config_path, PATH_MAX, "%s/%s", backup_dir, basename); | |
93 | - if (!g_file_set_contents(config_path, cdata, clen, &err)) { | |
94 | - error_setg(errp, "unable to write config file '%s'", config_path); | |
95 | - g_free(cdata); | |
96 | - g_free(basename); | |
97 | - goto err; | |
98 | - } | |
99 | - } | |
100 | - | |
101 | - g_free(basename); | |
102 | - g_free(cdata); | |
103 | + if(config_to_vma(config_file, format, backup_dir, vmaw, errp) != 0) { | |
104 | + goto err; | |
105 | + } | |
106 | } | |
107 | ||
108 | + /* add firewall file to archive */ | |
109 | + if (has_firewall_file) { | |
110 | + if(config_to_vma(firewall_file, format, backup_dir, vmaw, errp) != 0) { | |
111 | + goto err; | |
112 | + } | |
113 | + } | |
114 | /* initialize global backup_state now */ | |
115 | ||
116 | backup_state.cancel = false; | |
117 | diff --git a/hmp.c b/hmp.c | |
1a91ab45 | 118 | index aaf0de1..12f1f46 100644 |
ca0fe5f5 WB |
119 | --- a/hmp.c |
120 | +++ b/hmp.c | |
1a91ab45 | 121 | @@ -1670,7 +1670,7 @@ void hmp_backup(Monitor *mon, const QDict *qdict) |
ca0fe5f5 WB |
122 | int64_t speed = qdict_get_try_int(qdict, "speed", 0); |
123 | ||
124 | qmp_backup(backup_file, true, dir ? BACKUP_FORMAT_DIR : BACKUP_FORMAT_VMA, | |
125 | - false, NULL, !!devlist, | |
126 | + false, NULL, false, NULL, !!devlist, | |
127 | devlist, qdict_haskey(qdict, "speed"), speed, &error); | |
128 | ||
129 | hmp_handle_error(mon, &error); | |
130 | diff --git a/qapi-schema.json b/qapi-schema.json | |
1a91ab45 | 131 | index 79bfd97..6334018 100644 |
ca0fe5f5 WB |
132 | --- a/qapi-schema.json |
133 | +++ b/qapi-schema.json | |
1a91ab45 | 134 | @@ -635,6 +635,7 @@ |
ca0fe5f5 WB |
135 | { 'command': 'backup', 'data': { 'backup-file': 'str', |
136 | '*format': 'BackupFormat', | |
137 | '*config-file': 'str', | |
138 | + '*firewall-file': 'str', | |
139 | '*devlist': 'str', '*speed': 'int' }, | |
140 | 'returns': 'UuidInfo' } | |
141 | ||
ca0fe5f5 WB |
142 | -- |
143 | 2.1.4 | |
144 |