
On 07/15/2016 03:17 AM, Peter Krempa wrote:
On Thu, Jul 14, 2016 at 16:55:01 -0400, John Ferlan wrote:
[...]
+ +void +virQEMUBuildLuksOpts(virBufferPtr buf, + virStorageEncryptionInfoDefPtr enc, + const char *alias) +{ + virBufferAsprintf(buf, "key-secret=%s,", alias); + + /* If there's any cipher, then add that to the command line */
+ if (enc->cipher_name) { + virBufferEscapeString(buf, "cipher-alg=%s-", enc->cipher_name); + virBufferAsprintf(buf, "%u,", enc->cipher_size); + if (enc->cipher_mode) + virBufferEscapeString(buf, "cipher-mode=%s,", enc->cipher_mode); + if (enc->cipher_hash) + virBufferEscapeString(buf, "hash-alg=%s,", enc->cipher_hash); + if (enc->ivgen_name) + virBufferEscapeString(buf, "ivgen-alg=%s,", enc->ivgen_name); + if (enc->ivgen_hash) + virBufferEscapeString(buf, "ivgen-hash-alg=%s,", enc->ivgen_hash);
s/virBufferEscapeString/qemuBufferEscapeComma/
Not sure I understand what this is referencing.... Besides
I'd guess that it doesn't make much sense to escape < to < and > to > in code that puts stuff on the command line rather to an XML and that it makes more sense to escape a comma in the strings with two commas as is usual for qemu command lines.
qemuBufferEscapeComma is static to qemu_command
Extracting it to src/util/virbuffer.c could help.
Since it's QEMU specific I chose to put it in virqemu.c (there's patches I posted today...) I have to say, the result is rather ugly... So these have gone from : if (enc->cipher_name) { virBufferAsprintf(buf, "cipher-alg=%s-%u,", enc->cipher_name, enc->cipher_size); if (enc->cipher_mode) virBufferAsprintf(buf, "cipher-mode=%s,", enc->cipher_mode); if (enc->cipher_hash) virBufferAsprintf(buf, "hash-alg=%s,", enc->cipher_hash); if (enc->ivgen_name) virBufferAsprintf(buf, "ivgen-alg=%s,", enc->ivgen_name); if (enc->ivgen_hash) virBufferAsprintf(buf, "ivgen-hash-alg=%s,", enc->ivgen_hash); } to (assuming patches I've posted recently are accepted): if (!enc->cipher_name) return; virBufferAddLit(buf, "cipher-alg="); virQEMUBuildBufferEscapeComma(buf, enc->cipher_name); virBufferAsprintf(buf, "-%u,", enc->cipher_size); if (enc->cipher_mode) { virBufferAddLit(buf, "cipher-mode="); virQEMUBuildBufferEscapeComma(buf, enc->cipher_mode); virBufferAddLit(buf, ","); } if (enc->cipher_hash) { virBufferAddLit(buf, "hash-alg="); virQEMUBuildBufferEscapeComma(buf, enc->cipher_hash); virBufferAddLit(buf, ","); } if (!enc->ivgen_name) return; virBufferAddLit(buf, "cipher-name="); virQEMUBuildBufferEscapeComma(buf, enc->ivgen_name); virBufferAddLit(buf, ","); if (enc->ivgen_hash) { virBufferAddLit(buf, "ivgen-hash-alg="); virQEMUBuildBufferEscapeComma(buf, enc->ivgen_hash); virBufferAddLit(buf, ","); } All because someone could add a "," to one of those names... John