[lxc-devel] [PATCH 1/1] update hwaddr to fill in xx at create time
Stéphane Graber
stgraber at ubuntu.com
Tue Jan 20 20:59:30 UTC 2015
On Tue, Jan 20, 2015 at 04:59:27PM +0000, Serge Hallyn wrote:
> Commit 67702c21 regressed the case where lxc-create use a config
> file with 'xx:xx' in lxc.network.hwaddr, so that the 'xx' were
> preserved in the container's configuration file. Expand those
> in the unexpanded_config file whenever we are reading a
> config file which is not coming from a 'lxc.include'.
>
> The config file will have \n-terminated lines, so update
> rand_complete_hwaddr to also stop on \n.
>
> Add a test case to make sure xx gets expanded at lxc-create.
>
> Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
Acked-by: Stéphane Graber <stgraber at ubuntu.com>
> ---
> src/lxc/confile.c | 33 +++++++++++++++++++++++++++++++-
> src/tests/Makefile.am | 3 ++-
> src/tests/lxc-test-createconfig | 42 +++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 76 insertions(+), 2 deletions(-)
> create mode 100644 src/tests/lxc-test-createconfig
>
> diff --git a/src/lxc/confile.c b/src/lxc/confile.c
> index 1d42941..a21ee1a 100644
> --- a/src/lxc/confile.c
> +++ b/src/lxc/confile.c
> @@ -551,7 +551,7 @@ static int rand_complete_hwaddr(char *hwaddr)
> #else
> unsigned int seed=randseed(false);
> #endif
> - while (*curs != '\0')
> + while (*curs != '\0' && *curs != '\n')
> {
> if ( *curs == 'x' || *curs == 'X' ) {
> if (curs - hwaddr == 1) {
> @@ -1642,10 +1642,41 @@ static int config_console_logfile(const char *key, const char *value,
> return config_path_item(&lxc_conf->console.log_path, value);
> }
>
> +/*
> + * If we find a lxc.network.hwaddr in the original config file,
> + * we expand it in the unexpanded_config, so that after a save_config
> + * we store the hwaddr for re-use.
> + * This is only called when reading the config file, not when executing
> + * a lxc.include.
> + * 'x' and 'X' are substituted in-place.
> + */
> +static void update_hwaddr(const char *line)
> +{
> + char *p;
> +
> + line += lxc_char_left_gc(line, strlen(line));
> + if (line[0] == '#')
> + return;
> + if (strncmp(line, "lxc.network.hwaddr", 18) != 0)
> + return;
> + p = strchr(line, '=');
> + if (!p)
> + return; // let config_network_hwaddr raise the error
> + p++;
> + while (isblank(*p))
> + p++;
> + if (!*p)
> + return;
> +
> + rand_complete_hwaddr(p);
> +}
> +
> int append_unexp_config_line(const char *line, struct lxc_conf *conf)
> {
> size_t len = conf->unexpanded_len, linelen = strlen(line);
>
> + update_hwaddr(line);
> +
> while (conf->unexpanded_alloced <= len + linelen + 2) {
> char *tmp = realloc(conf->unexpanded_config, conf->unexpanded_alloced + 1024);
> if (!tmp)
> diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
> index 495f1cf..461d869 100644
> --- a/src/tests/Makefile.am
> +++ b/src/tests/Makefile.am
> @@ -48,7 +48,7 @@ bin_PROGRAMS = lxc-test-containertests lxc-test-locktests lxc-test-startone \
> lxc-test-reboot lxc-test-list lxc-test-attach lxc-test-device-add-remove \
> lxc-test-apparmor
>
> -bin_SCRIPTS = lxc-test-autostart lxc-test-cloneconfig
> +bin_SCRIPTS = lxc-test-autostart lxc-test-cloneconfig lxc-test-createconfig
>
> if DISTRO_UBUNTU
> bin_SCRIPTS += \
> @@ -79,6 +79,7 @@ EXTRA_DIST = \
> lxc-test-apparmor-mount \
> lxc-test-checkpoint-restore \
> lxc-test-cloneconfig \
> + lxc-test-createconfig \
> lxc-test-ubuntu \
> lxc-test-unpriv \
> may_control.c \
> diff --git a/src/tests/lxc-test-createconfig b/src/tests/lxc-test-createconfig
> new file mode 100644
> index 0000000..6b74d1e
> --- /dev/null
> +++ b/src/tests/lxc-test-createconfig
> @@ -0,0 +1,42 @@
> +#!/bin/bash
> +
> +# lxc: linux Container library
> +
> +# Authors:
> +# Serge Hallyn <serge.hallyn at ubuntu.com>
> +#
> +# This is a test script for the lxc-user-nic program
> +
> +# This library is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU Lesser General Public
> +# License as published by the Free Software Foundation; either
> +# version 2.1 of the License, or (at your option) any later version.
> +
> +# This library is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> +# Lesser General Public License for more details.
> +
> +# You should have received a copy of the GNU Lesser General Public
> +# License along with this library; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> +
> +set -e
> +
> +s=`mktemp -d /tmp/lxctest-XXXXXX`
> +f="$s/in.conf"
> +
> +cleanup() {
> + lxc-destroy -n lxctestc || true
> + rm -rf $s
> +}
> +
> +trap cleanup EXIT
> +
> +cat > $f << EOF
> +lxc.network.type = veth
> +lxc.network.hwaddr = 00:16:3e:xx:xx:xx
> +EOF
> +lxc-create -t busybox -f $f -n lxctestc
> +grep -q "xx:xx" /var/lib/lxc/lxctestc/config && { echo "hwaddr not expanded"; exit 1; }
> +echo "Success"
> --
> 2.1.0
>
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
--
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20150120/6048ed66/attachment.sig>
More information about the lxc-devel
mailing list