On 12/13/2016 11:43 AM, Erik Skultety wrote: > On Tue, Dec 13, 2016 at 09:50:49AM -0500, John Ferlan wrote: >> >> >> On 12/13/2016 09:32 AM, Erik Skultety wrote: >>> On Mon, Dec 12, 2016 at 11:21:08AM -0500, John Ferlan wrote: >>>> >>>> >>>> On 12/12/2016 10:42 AM, Erik Skultety wrote: >>>>> On Fri, Dec 09, 2016 at 07:29:36AM -0500, John Ferlan wrote: >>>>>> >>>>>> >>>>>> On 11/25/2016 08:12 AM, Erik Skultety wrote: >>>>>>> Finally, now that all APIs have been introduced, wire them up to virt-admin >>>>>>> and introduce daemon-log-outputs and daemon-log-filters commands. >>>>>>> >>>>>>> Signed-off-by: Erik Skultety <eskultet@xxxxxxxxxx> >>>>>>> --- >>>>>>> tools/virt-admin.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++ >>>>>>> tools/virt-admin.pod | 90 ++++++++++++++++++++++++++++++++++++++ >>>>>>> 2 files changed, 210 insertions(+) >>>>>>> >>>>>> >>>>>> Now it *is* the coffee - should there be any concerns along the way over >>>>>> escaping characters? I think this is the only place where we >>>>>> read/print, but via the API if someone passes a string - do we need to >>>>>> worry about that? Yes, I know - not the normal thing, but you know >>>>>> someone will try... >>>>> >>>>> Is it an issue though? If someone sends a binary garbage for filename, we have >>>>> to create a logfile with that name on the filesystem. When we retrieve it, I >>>>> think we should print it as we created it - garbage. The other option we have >>>>> is to strip all the control characters and print the rest which in the worst >>>>> case scenario will end up as an empty string... >>>>> >>>> >>>> If someone provides garbage I thought our general practice was to escape >>>> the 'unprintable' chars when we Format the output. >>> >>> In which case? Yes, we do it for XMLs (hence the function virBufferEscapeString) >>> so that the resulting XML is compliant with the specification. We also do it >>> for shell-related stuff like escaping the arguments that will end up on qemu >>> cmdline. But what's the purpose of escaping in this case? Additionally, if you >>> escape the output and let's say the user saved the output into a environment >>> variable, he now has an escaped garbage which is further unusable when instead >>> we should have gone with the verbatim, unprintable garbage. >>> I played around with this in the morning and found out that bash allows you to >>> use structure like this one: $'nnn' (where nnn is the string to be escaped), >>> now that would be doable from our perspective, but then, I'm not sure whether >>> such a construction is supported with other shells out there. >>> >> >> Escaping wasn't a requirement, just a concern. Hence the original >> question "should there be any concerns along the way over >> escaping characters? " >> >> And by escaping I meant only the name of the file, although perhaps that >> wasn't clear as I re-read the original comment. > > No, it was perfectly clear that you meant just the filename, but it doesn't > contradict my point anyway. > >> >>>> >>>> The first thing that came to mind that might be close to what's being >>>> done here was domain interface script, where when we print out the name >>>> we Escape whatever is in script path. >>>> >>>> Looking at the src/util/virtconf.c for VIR_CONF_STRING and >>>> virConfParseString would seem to imply to me the ability to read escaped >>>> characters. >>>> >>>> The difference here is that you're now formatting the name; whereas, >>>> previously the formatting was entirely left to whomever edited >>>> /etc/libvirt/libvirtd.conf. >>>> >>> >>> What difference? I put some garbage into the config via vim's controlling >> >> semantics... where 'difference' means prior to your changes someone >> would have to either edit or append libvirtd.conf in order to >> alter/define the name. With these changes the name (while running) is >> altered to some file which if it has unprintable characters in the name, >> how would it look? >> > > Ugly. Still, they can put a name containing unprintable characters to the > config and the daemon will create the file on the filesystem. After my changes, > the same logic applies. IOW the user is responsible for the formatting of the > filename in both cases. > >>> sequences and when I used 'cat' on the config, what I got was an unescaped >>> garbage, not an escaped version of what I put there, so in that aspect the >>> behaviour is the same, user provides us with garbage, and in turn, he gets the >>> same garbage back, there shouldn't be any compatibility or functioning issues >>> connected to that. >>> >>>> In the long run, recent memory says whenever there's a user provided >>>> character string - the review comments have always been be sure to >>>> Escape it. >>>> >>>> Searching for Escape in tools/*.c found a couple more "output" files. >>> >>> I looked at those and as I said, those are XML escaping routines and shell >>> escaping routines present mainly for reasons I mentioned above. >>> >> >> Fair enough - it's been considered... I think what I was going at there >> though was how virsh-snapshot handles output file names where the >> 'file=' or 'snapshot=' output is Escaped. >> > > I understand, XMLs are special in this way and since since commit @aeb5262e we > strip the control characters completely anyway so even our existing 'escaping' > routine for XMLs isn't a proper one. > > Soo, did we reach a consensus? > > Erik > The only thing holding up this patch would be your update to tools/virt-admin.pod to describe the name of the command (there was no daemon-log-info). Like I said the escaping was only a question of whether it was necessary - I think you've answered that. John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list