Quoting Stéphane Graber (stgra...@ubuntu.com):
> 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 <stgra...@ubuntu.com>

Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com>

> ---
>  configure.ac         |  4 ++--
>  src/lxc/conf.c       |  7 ++++++-
>  src/lxc/confile.c    | 16 ++++++++++++++--
>  src/lxc/lxc_attach.c |  8 +++++++-
>  4 files changed, 29 insertions(+), 6 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 4e4a6dd..2905aee 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -211,10 +211,10 @@ AM_CONDITIONAL([IS_BIONIC], [test "x$libc_type" = 
> "xbionic"])
>  AC_CHECK_DECLS([PR_CAPBSET_DROP], [], [], [#include <sys/prctl.h>])
>  
>  # Check for some headers
> -AC_CHECK_HEADERS([sys/signalfd.h sys/capability.h pty.h])
> +AC_CHECK_HEADERS([sys/signalfd.h sys/personality.h sys/capability.h pty.h])
>  
>  # Check for some functions
> -AC_CHECK_FUNCS([getline fgetln openpty])
> +AC_CHECK_FUNCS([getline fgetln openpty setns pivot_root sethostname unshare])
>  
>  # Check for some standard binaries
>  AC_PROG_GCC_TRADITIONAL
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index 25b75d7..2136feb 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -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>
> @@ -74,6 +73,10 @@
>  #include <sys/capability.h>
>  #endif
>  
> +#if HAVE_SYS_PERSONALITY_H
> +#include <sys/personality.h>
> +#endif
> +
>  #include "lxcseccomp.h"
>  
>  lxc_log_define(lxc_conf, lxc);
> @@ -1195,6 +1198,7 @@ out:
>  
>  static int setup_personality(int persona)
>  {
> +     #if HAVE_SYS_PERSONALITY_H
>       if (persona == -1)
>               return 0;
>  
> @@ -1204,6 +1208,7 @@ static int setup_personality(int persona)
>       }
>  
>       INFO("set personality to '0x%x'", persona);
> +     #endif
>  
>       return 0;
>  }
> diff --git a/src/lxc/confile.c b/src/lxc/confile.c
> index a725b78..940f0a9 100644
> --- a/src/lxc/confile.c
> +++ b/src/lxc/confile.c
> @@ -31,12 +31,12 @@
>  #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"
>  
> @@ -44,6 +44,10 @@
>  #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);
> diff --git a/src/lxc/lxc_attach.c b/src/lxc/lxc_attach.c
> index ba98d73..851a37a 100644
> --- a/src/lxc/lxc_attach.c
> +++ b/src/lxc/lxc_attach.c
> @@ -29,19 +29,23 @@
>  #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");
> -- 
> 1.8.0
> 
> 
> ------------------------------------------------------------------------------
> Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
> MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
> with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
> MVPs and experts. ON SALE this month only -- learn more at:
> http://p.sf.net/sfu/learnmore_122712
> _______________________________________________
> Lxc-devel mailing list
> Lxc-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/lxc-devel

------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122712
_______________________________________________
Lxc-devel mailing list
Lxc-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-devel

Reply via email to