]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
personality.h: Make the personality code optional
authorStéphane Graber <stgraber@ubuntu.com>
Thu, 3 Jan 2013 17:24:13 +0000 (12:24 -0500)
committerStéphane Graber <stgraber@ubuntu.com>
Wed, 9 Jan 2013 15:13:41 +0000 (10:13 -0500)
Some platforms don't have personality.h in their C library, this change
adds buildtime detection for the header and turns off the personality setting
code in those cases.

Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
configure.ac
src/lxc/conf.c
src/lxc/confile.c
src/lxc/lxc_attach.c

index 29c5b551e6eac86c029c57be6e622a96409ff663..51a7749bd9eb1e5b7d7e13511f88aef64577e390 100644 (file)
@@ -221,7 +221,7 @@ AM_CONDITIONAL([IS_BIONIC], [test "x$is_bionic" = "xyes"])
 AC_CHECK_DECLS([PR_CAPBSET_DROP], [], [], [#include <sys/prctl.h>])
 
 # Check for some headers
-AC_CHECK_HEADERS([sys/signalfd.h pty.h sys/capability.h])
+AC_CHECK_HEADERS([sys/signalfd.h pty.h sys/capability.h sys/personality.h])
 
 # Check for some functions
 AC_CHECK_FUNCS([openpty])
index a7077f43e3d32910ba50745ed41e9da3472c5f24..673048d7f3863afd9796839a8b920f9a7a76d77d 100644 (file)
@@ -48,7 +48,6 @@
 #include <sys/mount.h>
 #include <sys/mman.h>
 #include <sys/prctl.h>
-#include <sys/personality.h>
 
 #include <arpa/inet.h>
 #include <fcntl.h>
 #include <sys/capability.h>
 #endif
 
+#if HAVE_SYS_PERSONALITY_H
+#include <sys/personality.h>
+#endif
+
 #include "lxcseccomp.h"
 
 lxc_log_define(lxc_conf, lxc);
@@ -1198,6 +1201,7 @@ out:
 
 static int setup_personality(int persona)
 {
+       #if HAVE_SYS_PERSONALITY_H
        if (persona == -1)
                return 0;
 
@@ -1207,6 +1211,7 @@ static int setup_personality(int persona)
        }
 
        INFO("set personality to '0x%x'", persona);
+       #endif
 
        return 0;
 }
index a725b78c654720e4e617ba7b97504a6471d511a5..940f0a9595c645348817159e0a54466d1e9562b4 100644 (file)
 #include <sys/types.h>
 #include <sys/param.h>
 #include <sys/utsname.h>
-#include <sys/personality.h>
 #include <arpa/inet.h>
 #include <netinet/in.h>
 #include <net/if.h>
 
 #include "parse.h"
+#include "config.h"
 #include "confile.h"
 #include "utils.h"
 
 #include <lxc/conf.h>
 #include "network.h"
 
+#if HAVE_SYS_PERSONALITY_H
+#include <sys/personality.h>
+#endif
+
 lxc_log_define(lxc_confile, lxc);
 
 static int config_personality(const char *, const char *, struct lxc_conf *);
@@ -1301,6 +1305,7 @@ int lxc_config_define_load(struct lxc_list *defines, struct lxc_conf *conf)
 
 signed long lxc_config_parse_arch(const char *arch)
 {
+       #if HAVE_SYS_PERSONALITY_H
        struct per_name {
                char *name;
                unsigned long per;
@@ -1318,6 +1323,7 @@ signed long lxc_config_parse_arch(const char *arch)
                if (!strcmp(pername[i].name, arch))
                    return pername[i].per;
        }
+       #endif
 
        return -1;
 }
@@ -1333,18 +1339,22 @@ static int lxc_get_conf_int(struct lxc_conf *c, char *retv, int inlen, int v)
 
 static int lxc_get_arch_entry(struct lxc_conf *c, char *retv, int inlen)
 {
-       int len, fulllen = 0;
+       int fulllen = 0;
 
        if (!retv)
                inlen = 0;
        else
                memset(retv, 0, inlen);
 
+       #if HAVE_SYS_PERSONALITY_H
+       int len = 0;
+
        switch(c->personality) {
        case PER_LINUX32: strprint(retv, inlen, "x86"); break;
        case PER_LINUX: strprint(retv, inlen, "x86_64"); break;
        default: break;
        }
+       #endif
 
        return fulllen;
 }
@@ -1664,11 +1674,13 @@ void write_config(FILE *fout, struct lxc_conf *c)
                fprintf(fout, "lxc.pts = %d\n", c->pts);
        if (c->ttydir)
                fprintf(fout, "lxc.devttydir = %s\n", c->ttydir);
+       #if HAVE_SYS_PERSONALITY_H
        switch(c->personality) {
        case PER_LINUX32: fprintf(fout, "lxc.arch = x86\n"); break;
        case PER_LINUX: fprintf(fout, "lxc.arch = x86_64\n"); break;
        default: break;
        }
+       #endif
 #if HAVE_APPARMOR
        if (c->aa_profile)
                fprintf(fout, "lxc.aa_profile = %s\n", c->aa_profile);
index ba98d73631e6ccced10a3fcbd6264f23cee59e32..851a37aaa11be101daad9255f652596ad57d4ca3 100644 (file)
 #include <sys/param.h>
 #include <sys/types.h>
 #include <sys/wait.h>
-#include <sys/personality.h>
 
 #include "attach.h"
 #include "commands.h"
 #include "arguments.h"
 #include "caps.h"
 #include "cgroup.h"
+#include "config.h"
 #include "confile.h"
 #include "start.h"
 #include "sync.h"
 #include "log.h"
 #include "namespace.h"
 
+#if HAVE_SYS_PERSONALITY_H
+#include <sys/personality.h>
+#endif
+
 lxc_log_define(lxc_attach_ui, lxc);
 
 static const struct option my_longopts[] = {
@@ -273,6 +277,7 @@ int main(int argc, char *argv[])
                        }
                }
 
+               #if HAVE_SYS_PERSONALITY_H
                if (new_personality < 0)
                        new_personality = init_ctx->personality;
 
@@ -281,6 +286,7 @@ int main(int argc, char *argv[])
                              strerror(errno));
                        return -1;
                }
+               #endif
 
                if (!elevated_privileges && lxc_attach_drop_privs(init_ctx)) {
                        ERROR("could not drop privileges");