# Check for some headers
AC_CHECK_HEADERS([sys/signalfd.h pty.h sys/capability.h sys/personality.h])
+# Check for some syscalls functions
+AC_CHECK_FUNCS([setns pivot_root sethostname unshare])
+
# Check for some functions
AC_CHECK_FUNCS([openpty])
AC_CHECK_FUNCS([getline],
lxc_log_define(lxc_attach, lxc);
-int setns(int fd, int nstype)
+/* Define setns() if missing from the C library */
+#ifndef HAVE_SETNS
+static int setns(int fd, int nstype)
{
-#ifndef __NR_setns
- errno = ENOSYS;
- return -1;
+#ifdef __NR_setns
+return syscall(__NR_setns, fd, nstype);
#else
- return syscall(__NR_setns, fd, nstype);
+errno = ENOSYS;
+return -1;
#endif
}
+#endif
+
+/* Define unshare() if missing from the C library */
+#ifndef HAVE_UNSHARE
+static int unshare(int flags)
+{
+#ifdef __NR_unshare
+return syscall(__NR_unshare, flags);
+#else
+errno = ENOSYS;
+return -1;
+#endif
+}
+#endif
/* Define getline() if missing from the C library */
#ifndef HAVE_GETLINE
#include <mntent.h>
#include <unistd.h>
#include <sys/wait.h>
+#include <sys/syscall.h>
#if HAVE_PTY_H
#include <pty.h>
#define LO_FLAGS_AUTOCLEAR 4
#endif
+/* Define pivot_root() if missing from the C library */
+#ifndef HAVE_PIVOT_ROOT
+static int pivot_root(const char * new_root, const char * put_old)
+{
+#ifdef __NR_pivot_root
+return syscall(__NR_pivot_root, new_root, put_old);
+#else
+errno = ENOSYS;
+return -1;
+#endif
+}
+#else
+extern int pivot_root(const char * new_root, const char * put_old);
+#endif
+
+/* Define sethostname() if missing from the C library */
+#ifndef HAVE_SETHOSTNAME
+static int sethostname(const char * name, size_t len)
+{
+#ifdef __NR_sethostname
+return syscall(__NR_sethostname, name, len);
+#else
+errno = ENOSYS;
+return -1;
+#endif
+}
+#endif
+
char *lxchook_names[NUM_LXC_HOOKS] = {
"pre-start", "pre-mount", "mount", "start", "post-stop" };
-extern int pivot_root(const char * new_root, const char * put_old);
-
typedef int (*instanciate_cb)(struct lxc_handler *, struct lxc_netdev *);
struct mount_opt {