[Libvir] PATCH: 4/4: Configuration & whitelisting users
Jim Meyering
jim at meyering.net
Wed Nov 21 19:34:17 UTC 2007
"Daniel P. Berrange" <berrange at redhat.com> wrote:
> This patch provides the ability to configure what authentication mechanism
> is used on each socket - UNIX RW, UNIX RO, TCP, and TLS sockets - all can
> have independant settings. By default the UNIX & TLS sockets have no auth,
...
Hi Dan,
I've gone through part 3/4 and had no further feedback
beyond the two comments I already made there.
As usual, it looks very good.
I spotted a few minor problems below.
...
> diff -r 54ffed012e46 qemud/qemud.c
> --- a/qemud/qemud.c Thu Nov 01 16:33:15 2007 -0400
> +++ b/qemud/qemud.c Thu Nov 01 16:35:57 2007 -0400
...
> +static int remoteConfigGetStringList(virConfPtr conf, const char *key, char ***list, const char *filename) {
> + virConfValuePtr p;
> +
> + p = virConfGetValue (conf, key);
> + if (p) {
> + switch (p->type) {
> + case VIR_CONF_STRING:
> + *list = malloc (2 * sizeof (char *));
> + (*list)[0] = strdup (p->str);
check for malloc and strdup failure
[I do see you're just moving this existing code.]
> + (*list)[1] = 0;
> + break;
> +
> + case VIR_CONF_LIST: {
> + int i, len = 0;
> + virConfValuePtr pp;
> + for (pp = p->list; pp; pp = p->next)
> + len++;
> + *list =
> + malloc ((1+len) * sizeof (char *));
here too
> + for (i = 0, pp = p->list; pp; ++i, pp = p->next) {
> + if (pp->type != VIR_CONF_STRING) {
> + qemudLog (QEMUD_ERR, "remoteReadConfigFile: %s: %s: should be a string or list of strings\n", filename, key);
> + return -1;
> + }
> + (*list)[i] = strdup (pp->str);
here too. While technically not necessary
(there'd be no segfault), a failed strdup would mean ignoring
part of the config file.
> + }
> + (*list)[i] = 0;
s/0/NULL/ makes it clearer that (*list)[i] is a pointer.
...
> -remoteReadConfigFile (const char *filename)
> +remoteReadConfigFile (struct qemud_server *server, const char *filename)
> {
> virConfPtr conf;
>
> @@ -1692,6 +1739,15 @@ remoteReadConfigFile (const char *filena
> p = virConfGetValue (conf, "tcp_port");
> CHECK_TYPE ("tcp_port", VIR_CONF_STRING);
> tcp_port = p ? strdup (p->str) : tcp_port;
We need to check strdup here, too, since a couple levels down,
tcp_port becomes "service" in a call to getaddrinfo(NULL, service, ...
and in that case, service must not be NULL.
There are a few more strdup calls in that area, but for all others,
it looks like it's ok for the result to be NULL.
More information about the libvir-list
mailing list