~serge-hallyn/ubuntu/quantal/lxc/lxc-fixapi

« back to all changes in this revision

Viewing changes to .pc/0061-lxc-start-apparmor/src/lxc/confile.c

  • Committer: Package Import Robot
  • Author(s): Serge Hallyn
  • Date: 2012-04-26 15:18:35 UTC
  • mfrom: (3.1.41 sid)
  • Revision ID: package-import@ubuntu.com-20120426151835-3vz6kb4m90gb26js
Tags: 0.8.0~rc1-4ubuntu1
* Merge from unstable.  Remaining changes:
  - control:
    - update maintainer
    - Build-Depends: add dh-apparmor and libapparmor-dev
    - lxc Depends: add bridge-utils, dnsmasq-base, iptables, rsync
    - lxc Recommends: add cgroup-lite | cgroup-bin, openssl
    - lxc Suggests: add btrfs-tools, lvm2, qemu-user-static
    - lxc Conflicts: remove (cgroup-bin)
  - Add lxc-start-ephemeral and lxc-wait to debian/local
  - apparmor:
    - add lxc.apparmor, lxc-containers.apparmor,
      lxc-default.apparmor, and new lxc.apparmor.in
  - add debian/lxc.conf (default container creation config file)
  - debian/lxc.install.in:
    * add lxc-start-ephemeral
    * add debian/lxc.conf
    * skip lxc-debconf*
    * skip lxc-ls (Use upstream's)
  - debian/lxc*.install.in: use '*', not @DEB_HOST_MULTIARCH@
  - Use our own completely different lxc.postinst and lxc.postrm
  - remove lxc.templates
  - debian/rules:
    * add DEB_DH_INSTALLINIT_ARGS = --upstart-only
    * don't do debconf stuff
    * add debian/*.apparmor.in to files processed under
      override_dh_auto_clean
    * don't comment out ubuntu or busybox templates
    * do apparmor stuff and install our own lxc-wait under override_dh_install
    * install our upstart scripts in override_dh_installinit
  - add lxc.default, lxc.lxc-net.upstart, lxc.upstart under
    debian/

* patches kept:
  - 0013-lxc-create-use-default-config.patch (needed manual rebase)
  - 0030-ubuntu-template-fail.patch
  - 0031-ubuntu-template-resolvconf.patch
  - 0044-lxc-destroy-rm-autos
  - debian/patches/0045-fix-other-templates
  - debian/patches/0046-lxc-clone-change-hwaddr
  - debian/patches/0047-bindhome-check-shell
  - debian/patches/0049-ubuntu-template-sudo-and-cleanup
  - debian/patches/0050-clone-lvm-sizes
  - debian/patches/0052-ubuntu-bind-user-conflict
  - debian/patches/0053-lxc-start-pin-rootfs
  - debian/patches/0054-ubuntu-debug
  - debian/patches/0055-ubuntu-handle-badgrp
  - debian/patches/0056-dont-watch-utmp
  - debian/patches/0057-update-manpages
  - debian/patches/0058-fixup-ubuntu-cloud
  - debian/patches/0059-reenable-daily-cloudimg
  - debian/patches/0060-lxc-shutdown
  - debian/patches/0061-lxc-start-apparmor
  - debian/patches/0062-templates-relative-paths
  - debian/patches/0063-check-apparmor-enabled
  - debian/patches/0064-apparmor-mount-proc
  - debian/patches/0065-fix-bindhome-relpath
  - debian/patches/0066-confile-typo
  - debian/patches/0067-templates-lxc-profile
  - debian/patches/0068-fix-lxc-config-layout 
  - debian/patches/0069-ubuntu-cloud-fix
  - debian/patches/0070-templates-rmdir-dev-shm
  - debian/patches/0071-ubuntu-cloud-fix-image-extraction
  - debian/patches/0072-lxc-shutdown-help
  - debian/patches/0073-lxc-destroy-waits-before-destroy
  - mark all patches which have been forwarded as such, refresh all
* 0074-lxc-execute-find-init: lxc-init had moved.  Introduce a function in
  lxc-execute to go find it.  Otherwise lxc-execute for any older releases
  will fail.
* 0075-lxc-ls-bash: lxc-ls needs bash, not sh
* add debian/lxc.apparmor.in so DEB_HOST_MULTIARCH can be expanded
* 0076-fix-sprintfs:  - check return values for all sprintfs and snprintfs
  which could overflow (LP: #988918)
* 0077-execute-without-rootfs: let lxc-execute succeed with no rootfs
  (LP: #981955)

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
#include <net/if.h>
38
38
 
39
39
#include "parse.h"
 
40
#include "confile.h"
40
41
#include "utils.h"
41
42
 
42
43
#include <lxc/log.h>
64
65
static int config_network_vlan_id(const char *, char *, struct lxc_conf *);
65
66
static int config_network_mtu(const char *, char *, struct lxc_conf *);
66
67
static int config_network_ipv4(const char *, char *, struct lxc_conf *);
 
68
static int config_network_ipv4_gateway(const char *, char *, struct lxc_conf *);
67
69
static int config_network_script(const char *, char *, struct lxc_conf *);
68
70
static int config_network_ipv6(const char *, char *, struct lxc_conf *);
 
71
static int config_network_ipv6_gateway(const char *, char *, struct lxc_conf *);
69
72
static int config_cap_drop(const char *, char *, struct lxc_conf *);
70
73
static int config_console(const char *, char *, struct lxc_conf *);
71
74
 
98
101
        { "lxc.network.hwaddr",       config_network_hwaddr       },
99
102
        { "lxc.network.mtu",          config_network_mtu          },
100
103
        { "lxc.network.vlan.id",      config_network_vlan_id      },
 
104
        { "lxc.network.ipv4.gateway", config_network_ipv4_gateway },
101
105
        { "lxc.network.ipv4",         config_network_ipv4         },
 
106
        { "lxc.network.ipv6.gateway", config_network_ipv6_gateway },
102
107
        { "lxc.network.ipv6",         config_network_ipv6         },
103
108
        { "lxc.cap.drop",             config_cap_drop             },
104
109
        { "lxc.console",              config_console              },
435
440
        return 0;
436
441
}
437
442
 
 
443
static int config_network_ipv4_gateway(const char *key, char *value,
 
444
                                       struct lxc_conf *lxc_conf)
 
445
{
 
446
        struct lxc_netdev *netdev;
 
447
        struct in_addr *gw;
 
448
 
 
449
        netdev = network_netdev(key, value, &lxc_conf->network);
 
450
        if (!netdev)
 
451
                return -1;
 
452
 
 
453
        gw = malloc(sizeof(*gw));
 
454
        if (!gw) {
 
455
                SYSERROR("failed to allocate ipv4 gateway address");
 
456
                return -1;
 
457
        }
 
458
 
 
459
        if (!value) {
 
460
                ERROR("no ipv4 gateway address specified");
 
461
                return -1;
 
462
        }
 
463
 
 
464
        if (!strcmp(value, "auto")) {
 
465
                netdev->ipv4_gateway = NULL;
 
466
                netdev->ipv4_gateway_auto = true;
 
467
        } else {
 
468
                if (!inet_pton(AF_INET, value, gw)) {
 
469
                        SYSERROR("invalid ipv4 gateway address: %s", value);
 
470
                        return -1;
 
471
                }
 
472
 
 
473
                netdev->ipv4_gateway = gw;
 
474
                netdev->ipv4_gateway_auto = false;
 
475
        }
 
476
 
 
477
        return 0;
 
478
}
 
479
 
438
480
static int config_network_ipv6(const char *key, char *value,
439
481
                               struct lxc_conf *lxc_conf)
440
482
{
482
524
        return 0;
483
525
}
484
526
 
 
527
static int config_network_ipv6_gateway(const char *key, char *value,
 
528
                                       struct lxc_conf *lxc_conf)
 
529
{
 
530
        struct lxc_netdev *netdev;
 
531
        struct in6_addr *gw;
 
532
 
 
533
        netdev = network_netdev(key, value, &lxc_conf->network);
 
534
        if (!netdev)
 
535
                return -1;
 
536
 
 
537
        gw = malloc(sizeof(*gw));
 
538
        if (!gw) {
 
539
                SYSERROR("failed to allocate ipv6 gateway address");
 
540
                return -1;
 
541
        }
 
542
 
 
543
        if (!value) {
 
544
                ERROR("no ipv6 gateway address specified");
 
545
                return -1;
 
546
        }
 
547
 
 
548
        if (!strcmp(value, "auto")) {
 
549
                netdev->ipv6_gateway = NULL;
 
550
                netdev->ipv6_gateway_auto = true;
 
551
        } else {
 
552
                if (!inet_pton(AF_INET6, value, gw)) {
 
553
                        SYSERROR("invalid ipv6 gateway address: %s", value);
 
554
                        return -1;
 
555
                }
 
556
 
 
557
                netdev->ipv6_gateway = gw;
 
558
                netdev->ipv6_gateway_auto = false;
 
559
        }
 
560
 
 
561
        return 0;
 
562
}
 
563
 
485
564
static int config_network_script(const char *key, char *value,
486
565
                                 struct lxc_conf *lxc_conf)
487
566
{
508
587
static int config_personality(const char *key, char *value,
509
588
                              struct lxc_conf *lxc_conf)
510
589
{
511
 
        struct per_name {
512
 
                char *name;
513
 
                int per;
514
 
        } pername[4] = {
515
 
                { "x86", PER_LINUX32 },
516
 
                { "i686", PER_LINUX32 },
517
 
                { "x86_64", PER_LINUX },
518
 
                { "amd64", PER_LINUX },
519
 
        };
520
 
        size_t len = sizeof(pername) / sizeof(pername[0]);
521
 
 
522
 
        int i;
523
 
 
524
 
        for (i = 0; i < len; i++) {
525
 
 
526
 
                if (strcmp(pername[i].name, value))
527
 
                    continue;
528
 
 
529
 
                lxc_conf->personality = pername[i].per;
530
 
 
531
 
                return 0;
532
 
        }
533
 
 
534
 
        WARN("unsupported personality '%s'", value);
 
590
        signed long personality = lxc_config_parse_arch(value);
 
591
 
 
592
        if (personality >= 0)
 
593
                lxc_conf->personality = personality;
 
594
        else
 
595
                WARN("unsupported personality '%s'", value);
535
596
 
536
597
        return 0;
537
598
}
916
977
 
917
978
        return ret;
918
979
}
 
980
 
 
981
signed long lxc_config_parse_arch(const char *arch)
 
982
{
 
983
        struct per_name {
 
984
                char *name;
 
985
                unsigned long per;
 
986
        } pername[4] = {
 
987
                { "x86", PER_LINUX32 },
 
988
                { "i686", PER_LINUX32 },
 
989
                { "x86_64", PER_LINUX },
 
990
                { "amd64", PER_LINUX },
 
991
        };
 
992
        size_t len = sizeof(pername) / sizeof(pername[0]);
 
993
 
 
994
        int i;
 
995
 
 
996
        for (i = 0; i < len; i++) {
 
997
                if (!strcmp(pername[i].name, arch))
 
998
                    return pername[i].per;
 
999
        }
 
1000
 
 
1001
        return -1;
 
1002
}