]> git.proxmox.com Git - mirror_lxc.git/commitdiff
pam: Fix missing symbols in module
authorStéphane Graber <stgraber@ubuntu.com>
Fri, 23 Mar 2018 17:26:24 +0000 (13:26 -0400)
committerStéphane Graber <stgraber@ubuntu.com>
Fri, 23 Mar 2018 17:26:24 +0000 (13:26 -0400)
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
src/lxc/Makefile.am
src/lxc/pam/utils.c [new file with mode: 0644]
src/lxc/pam/utils.h [new file with mode: 0644]

index 86dfc93e3b85b4705a73a7a0e94e8516bf1ac052..c8d76836b5f22061f219c76b3b8d963a63338feb 100644 (file)
@@ -306,7 +306,7 @@ endif
 if ENABLE_PAM
 if HAVE_PAM
 pam_LTLIBRARIES = pam_cgfs.la
-pam_cgfs_la_SOURCES = pam/pam_cgfs.c
+pam_cgfs_la_SOURCES = pam/pam_cgfs.c pam/utils.c pam/utils.h
 pam_cgfs_la_CFLAGS = $(AM_CFLAGS)
 pam_cgfs_la_LIBADD = $(AM_LIBS) $(PAM_LIBS) -L$(top_srcdir)
 pam_cgfs_la_LDFLAGS = $(AM_LDFLAGS) -module -avoid-version -shared
diff --git a/src/lxc/pam/utils.c b/src/lxc/pam/utils.c
new file mode 100644 (file)
index 0000000..034f4ce
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * lxc: linux Container library
+ *
+ * (C) Copyright IBM Corp. 2007, 2008
+ *
+ * Authors:
+ * Daniel Lezcano <daniel.lezcano at free.fr>
+ *
+ * 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
+ */
+
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <string.h>
+#include <sys/vfs.h>
+#include <stdarg.h>
+
+#include "utils.h"
+
+bool file_exists(const char *f)
+{
+       struct stat statbuf;
+
+       return stat(f, &statbuf) == 0;
+}
+
+void *must_realloc(void *orig, size_t sz)
+{
+       void *ret;
+
+       do {
+               ret = realloc(orig, sz);
+       } while (!ret);
+
+       return ret;
+}
+
+char *must_copy_string(const char *entry)
+{
+       char *ret;
+
+       if (!entry)
+               return NULL;
+       do {
+               ret = strdup(entry);
+       } while (!ret);
+
+       return ret;
+}
+
+char *must_make_path(const char *first, ...)
+{
+       va_list args;
+       char *cur, *dest;
+       size_t full_len = strlen(first);
+
+       dest = must_copy_string(first);
+
+       va_start(args, first);
+       while ((cur = va_arg(args, char *)) != NULL) {
+               full_len += strlen(cur);
+               if (cur[0] != '/')
+                       full_len++;
+               dest = must_realloc(dest, full_len + 1);
+               if (cur[0] != '/')
+                       strcat(dest, "/");
+               strcat(dest, cur);
+       }
+       va_end(args);
+
+       return dest;
+}
+
+bool is_fs_type(const struct statfs *fs, fs_type_magic magic_val)
+{
+       return (fs->f_type == (fs_type_magic)magic_val);
+}
+
+bool has_fs_type(const char *path, fs_type_magic magic_val)
+{
+       bool has_type;
+       int ret;
+       struct statfs sb;
+
+       ret = statfs(path, &sb);
+       if (ret < 0)
+               return false;
+
+       has_type = is_fs_type(&sb, magic_val);
+
+       return has_type;
+}
diff --git a/src/lxc/pam/utils.h b/src/lxc/pam/utils.h
new file mode 100644 (file)
index 0000000..f0a01e6
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * lxc: linux Container library
+ *
+ * (C) Copyright IBM Corp. 2007, 2008
+ *
+ * Authors:
+ * Daniel Lezcano <daniel.lezcano at free.fr>
+ *
+ * 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
+ */
+#ifndef __PAM_UTILS_H
+#define __PAM_UTILS_H
+
+#include <sys/vfs.h>
+
+#ifndef CGROUP_SUPER_MAGIC
+#define CGROUP_SUPER_MAGIC 0x27e0eb
+#endif
+
+#ifndef CGROUP2_SUPER_MAGIC
+#define CGROUP2_SUPER_MAGIC 0x63677270
+#endif
+
+typedef __typeof__(((struct statfs *)NULL)->f_type) fs_type_magic;
+extern bool file_exists(const char *f);
+extern void *must_realloc(void *orig, size_t sz);
+extern char *must_copy_string(const char *entry);
+__attribute__((sentinel)) extern char *must_make_path(const char *first, ...);
+extern bool has_fs_type(const char *path, fs_type_magic magic_val);
+
+#endif /* __PAM_UTILS_H */