"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "tests/test-exports.c" between
flatpak-1.15.1.tar.xz and flatpak-1.15.2.tar.xz

About: Flatpak is a Linux application sandboxing and distribution framework. Pre-release.

test-exports.c  (flatpak-1.15.1.tar.xz):test-exports.c  (flatpak-1.15.2.tar.xz)
skipping to change at line 737 skipping to change at line 737
g_autofree gchar *in_abs_link = g_build_filename (subdir, "1", "abs-link", g_autofree gchar *in_abs_link = g_build_filename (subdir, "1", "abs-link",
"file", NULL); "file", NULL);
g_autofree gchar *dangling = g_build_filename (subdir, "1", "dangling", NULL); g_autofree gchar *dangling = g_build_filename (subdir, "1", "dangling", NULL);
g_autofree gchar *in_dangling = g_build_filename (subdir, "1", "dangling", g_autofree gchar *in_dangling = g_build_filename (subdir, "1", "dangling",
"file", NULL); "file", NULL);
g_autofree gchar *abs_target = g_build_filename (subdir, "2", "abs-target", NU LL); g_autofree gchar *abs_target = g_build_filename (subdir, "2", "abs-target", NU LL);
g_autofree gchar *target = g_build_filename (subdir, "2", "target", NULL); g_autofree gchar *target = g_build_filename (subdir, "2", "target", NULL);
g_autofree gchar *create_dir = g_build_filename (subdir, "create-dir", NULL); g_autofree gchar *create_dir = g_build_filename (subdir, "create-dir", NULL);
g_autofree gchar *create_dir2 = g_build_filename (subdir, "create-dir2", NULL) ; g_autofree gchar *create_dir2 = g_build_filename (subdir, "create-dir2", NULL) ;
gsize i; gsize i;
gboolean ok;
glnx_shutil_rm_rf_at (-1, subdir, NULL, &error); glnx_shutil_rm_rf_at (-1, subdir, NULL, &error);
if (error != NULL) if (error != NULL)
{ {
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND); g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
g_clear_error (&error); g_clear_error (&error);
} }
if (g_mkdir_with_parents (expose_rw, S_IRWXU) != 0) if (g_mkdir_with_parents (expose_rw, S_IRWXU) != 0)
skipping to change at line 792 skipping to change at line 793
if (symlink ("nope", dangling_link_in_expose_rw) != 0) if (symlink ("nope", dangling_link_in_expose_rw) != 0)
g_error ("symlink: %s", g_strerror (errno)); g_error ("symlink: %s", g_strerror (errno));
if (symlink ("../2/target", rel_link) != 0) if (symlink ("../2/target", rel_link) != 0)
g_error ("symlink: %s", g_strerror (errno)); g_error ("symlink: %s", g_strerror (errno));
flatpak_exports_add_host_etc_expose (exports, flatpak_exports_add_host_etc_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_WRITE); FLATPAK_FILESYSTEM_MODE_READ_WRITE);
flatpak_exports_add_host_os_expose (exports, flatpak_exports_add_host_os_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY); FLATPAK_FILESYSTEM_MODE_READ_ONLY);
flatpak_exports_add_path_expose (exports, ok = flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_WRITE, FLATPAK_FILESYSTEM_MODE_READ_WRITE,
expose_rw); expose_rw, &error);
flatpak_exports_add_path_expose (exports, g_assert_no_error (error);
FLATPAK_FILESYSTEM_MODE_READ_ONLY, g_assert_true (ok);
expose_ro); ok = flatpak_exports_add_path_expose (exports,
flatpak_exports_add_path_tmpfs (exports, hide_below_expose); FLATPAK_FILESYSTEM_MODE_READ_ONLY,
flatpak_exports_add_path_expose_or_hide (exports, expose_ro, &error);
FLATPAK_FILESYSTEM_MODE_NONE, g_assert_no_error (error);
hide); g_assert_true (ok);
flatpak_exports_add_path_expose_or_hide (exports, ok = flatpak_exports_add_path_tmpfs (exports, hide_below_expose, &error);
FLATPAK_FILESYSTEM_MODE_READ_ONLY, g_assert_no_error (error);
dont_hide); g_assert_true (ok);
flatpak_exports_add_path_expose_or_hide (exports, ok = flatpak_exports_add_path_expose_or_hide (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY, FLATPAK_FILESYSTEM_MODE_NONE,
enoent); hide, &error);
flatpak_exports_add_path_expose_or_hide (exports, g_assert_no_error (error);
FLATPAK_FILESYSTEM_MODE_READ_WRITE, g_assert_true (ok);
rel_link); ok = flatpak_exports_add_path_expose_or_hide (exports,
flatpak_exports_add_path_expose_or_hide (exports, FLATPAK_FILESYSTEM_MODE_READ_ONL
FLATPAK_FILESYSTEM_MODE_READ_WRITE, Y,
abs_link); dont_hide, &error);
flatpak_exports_add_path_dir (exports, create_dir); g_assert_no_error (error);
flatpak_exports_add_path_dir (exports, create_dir2); g_assert_true (ok);
ok = flatpak_exports_add_path_expose_or_hide (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONL
Y,
enoent, &error);
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
g_assert_false (ok);
g_clear_error (&error);
ok = flatpak_exports_add_path_expose_or_hide (exports,
FLATPAK_FILESYSTEM_MODE_READ_WRI
TE,
rel_link, &error);
g_assert_no_error (error);
g_assert_true (ok);
ok = flatpak_exports_add_path_expose_or_hide (exports,
FLATPAK_FILESYSTEM_MODE_READ_WRI
TE,
abs_link, &error);
g_assert_no_error (error);
g_assert_true (ok);
ok = flatpak_exports_add_path_dir (exports, create_dir, &error);
g_assert_no_error (error);
g_assert_true (ok);
ok = flatpak_exports_add_path_dir (exports, create_dir2, &error);
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
g_assert_false (ok);
g_clear_error (&error);
g_assert_cmpuint (flatpak_exports_path_get_mode (exports, expose_rw), ==, g_assert_cmpuint (flatpak_exports_path_get_mode (exports, expose_rw), ==,
FLATPAK_FILESYSTEM_MODE_READ_WRITE); FLATPAK_FILESYSTEM_MODE_READ_WRITE);
g_assert_cmpuint (flatpak_exports_path_get_mode (exports, expose_ro), ==, g_assert_cmpuint (flatpak_exports_path_get_mode (exports, expose_ro), ==,
FLATPAK_FILESYSTEM_MODE_READ_ONLY); FLATPAK_FILESYSTEM_MODE_READ_ONLY);
g_assert_cmpuint (flatpak_exports_path_get_mode (exports, hide_below_expose), ==, g_assert_cmpuint (flatpak_exports_path_get_mode (exports, hide_below_expose), ==,
FLATPAK_FILESYSTEM_MODE_NONE); FLATPAK_FILESYSTEM_MODE_NONE);
g_assert_cmpuint (flatpak_exports_path_get_mode (exports, hide), ==, g_assert_cmpuint (flatpak_exports_path_get_mode (exports, hide), ==,
FLATPAK_FILESYSTEM_MODE_NONE); FLATPAK_FILESYSTEM_MODE_NONE);
g_assert_cmpuint (flatpak_exports_path_get_mode (exports, dont_hide), ==, g_assert_cmpuint (flatpak_exports_path_get_mode (exports, dont_hide), ==,
skipping to change at line 1234 skipping to change at line 1260
i = assert_next_is_symlink (bwrap, i, "usr/sbin", "/run/host/sbin"); i = assert_next_is_symlink (bwrap, i, "usr/sbin", "/run/host/sbin");
i = assert_next_is_bind (bwrap, i, "--ro-bind", "/etc", "/run/host/etc"); i = assert_next_is_bind (bwrap, i, "--ro-bind", "/etc", "/run/host/etc");
i = assert_next_is_bind (bwrap, i, "--ro-bind", "/usr/lib/os-release", i = assert_next_is_bind (bwrap, i, "--ro-bind", "/usr/lib/os-release",
"/run/host/os-release"); "/run/host/os-release");
g_assert_cmpuint (i, ==, bwrap->argv->len - 1); g_assert_cmpuint (i, ==, bwrap->argv->len - 1);
g_assert_cmpstr (bwrap->argv->pdata[i++], ==, NULL); g_assert_cmpstr (bwrap->argv->pdata[i++], ==, NULL);
g_assert_cmpuint (i, ==, bwrap->argv->len); g_assert_cmpuint (i, ==, bwrap->argv->len);
} }
static const struct
{
const char *tried;
const char *because;
}
reserved_filesystems[] =
{
{ "/", "/.flatpak-info" },
{ "/.flatpak-info", "/.flatpak-info" },
{ "/app", "/app" },
{ "/app/foo", "/app" },
{ "/bin", "/bin" },
{ "/bin/sh", "/bin" },
{ "/dev", "/dev" },
{ "/etc", "/etc" },
{ "/etc/passwd", "/etc" },
{ "/lib", "/lib" },
{ "/lib/ld-linux.so.2", "/lib" },
{ "/lib64", "/lib64" },
{ "/lib64/ld-linux-x86-64.so.2", "/lib64" },
{ "/proc", "/proc" },
{ "/proc/1", "/proc" },
{ "/proc/sys/net", "/proc" },
{ "/run", "/run/flatpak" },
{ "/run/flatpak/foo/bar", "/run/flatpak" },
{ "/run/host/foo", "/run/host" },
{ "/sbin", "/sbin" },
{ "/sbin/ldconfig", "/sbin" },
{ "/usr", "/usr" },
{ "/usr/bin/env", "/usr" },
{ "/usr/foo/bar", "/usr" },
};
static void static void
test_exports_ignored (void) test_exports_ignored (void)
{ {
g_autoptr(FlatpakBwrap) bwrap = flatpak_bwrap_new (NULL); g_autoptr(FlatpakBwrap) bwrap = flatpak_bwrap_new (NULL);
g_autoptr(FlatpakExports) exports = flatpak_exports_new (); g_autoptr(FlatpakExports) exports = flatpak_exports_new ();
gsize i; gsize i;
/* These paths are chosen so that they probably exist, with the for (i = 0; i < G_N_ELEMENTS (reserved_filesystems); i++)
* exception of /app */ {
flatpak_exports_add_path_expose (exports, const char *tried = reserved_filesystems[i].tried;
FLATPAK_FILESYSTEM_MODE_READ_ONLY, const char *because = reserved_filesystems[i].because;
"/app"); g_autoptr(GError) error = NULL;
flatpak_exports_add_path_expose (exports, gboolean ok;
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/etc"); ok = flatpak_exports_add_path_expose (exports,
flatpak_exports_add_path_expose (exports, FLATPAK_FILESYSTEM_MODE_READ_ONLY,
FLATPAK_FILESYSTEM_MODE_READ_ONLY, tried,
"/etc/passwd"); &error);
flatpak_exports_add_path_expose (exports, g_assert_nonnull (error);
FLATPAK_FILESYSTEM_MODE_READ_ONLY, g_assert_nonnull (error->message);
"/usr"); g_test_message ("Trying to export %s -> %s", tried, error->message);
flatpak_exports_add_path_expose (exports, g_assert_false (ok);
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/usr/bin/env"); if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTABLE_FILE))
flatpak_exports_add_path_expose (exports, {
FLATPAK_FILESYSTEM_MODE_READ_ONLY, g_autofree char *pattern = g_strdup_printf ("Path \"%s\" is reserved b
"/dev"); y Flatpak",
flatpak_exports_add_path_expose (exports, because);
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/dev/full"); g_test_message ("Expecting to see pattern: %s", pattern);
flatpak_exports_add_path_expose (exports, g_assert_nonnull (strstr (error->message, pattern));
FLATPAK_FILESYSTEM_MODE_READ_ONLY, }
"/proc"); }
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/proc/1");
/* These probably exist, and are merged into /usr on systems with
* the /usr merge */
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/bin");
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/bin/sh");
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/lib");
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/lib/ld-linux.so.2");
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/lib64");
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/lib64/ld-linux-x86-64.so.2");
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/sbin");
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/sbin/ldconfig");
flatpak_bwrap_add_arg (bwrap, "bwrap"); flatpak_bwrap_add_arg (bwrap, "bwrap");
flatpak_exports_append_bwrap_args (exports, bwrap); flatpak_exports_append_bwrap_args (exports, bwrap);
flatpak_bwrap_finish (bwrap); flatpak_bwrap_finish (bwrap);
print_bwrap (bwrap); print_bwrap (bwrap);
i = 0; i = 0;
g_assert_cmpuint (i, <, bwrap->argv->len); g_assert_cmpuint (i, <, bwrap->argv->len);
g_assert_cmpstr (bwrap->argv->pdata[i++], ==, "bwrap"); g_assert_cmpstr (bwrap->argv->pdata[i++], ==, "bwrap");
skipping to change at line 1333 skipping to change at line 1361
{ "dangling-link", FAKE_SYMLINK, "nonexistent" }, { "dangling-link", FAKE_SYMLINK, "nonexistent" },
{ "etc", FAKE_DIR }, { "etc", FAKE_DIR },
{ "etc/ld.so.cache", FAKE_FILE }, { "etc/ld.so.cache", FAKE_FILE },
{ "etc/ld.so.conf", FAKE_FILE }, { "etc/ld.so.conf", FAKE_FILE },
{ "etc/ld.so.conf.d", FAKE_DIR }, { "etc/ld.so.conf.d", FAKE_DIR },
{ "bin", FAKE_SYMLINK, "usr/bin" }, { "bin", FAKE_SYMLINK, "usr/bin" },
{ "broken-autofs", FAKE_DIR }, { "broken-autofs", FAKE_DIR },
{ "home", FAKE_SYMLINK, "var/home" }, { "home", FAKE_SYMLINK, "var/home" },
{ "lib", FAKE_SYMLINK, "usr/lib" }, { "lib", FAKE_SYMLINK, "usr/lib" },
{ "recursion", FAKE_SYMLINK, "recursion" }, { "recursion", FAKE_SYMLINK, "recursion" },
{ "symlink-to-root", FAKE_SYMLINK, "." },
{ "tmp", FAKE_SYMLINK, "TMP" }, { "tmp", FAKE_SYMLINK, "TMP" },
{ "usr/bin", FAKE_DIR }, { "usr/bin", FAKE_DIR },
{ "usr/lib", FAKE_DIR }, { "usr/lib", FAKE_DIR },
{ "usr/share", FAKE_DIR }, { "usr/share", FAKE_DIR },
{ "var/home/me", FAKE_DIR }, { "var/home/me", FAKE_DIR },
{ "var/volatile/tmp", FAKE_DIR }, { "var/volatile/tmp", FAKE_DIR },
{ "var/tmp", FAKE_SYMLINK, "volatile/tmp" }, { "var/tmp", FAKE_SYMLINK, "volatile/tmp" },
{ NULL } { NULL }
}; };
g_autoptr(FlatpakBwrap) bwrap = flatpak_bwrap_new (NULL); g_autoptr(FlatpakBwrap) bwrap = flatpak_bwrap_new (NULL);
g_autoptr(FlatpakExports) exports = NULL; g_autoptr(FlatpakExports) exports = NULL;
gsize i; gsize i;
g_autoptr(GError) error = NULL;
gboolean ok;
exports = test_host_exports_setup (files, exports = test_host_exports_setup (files,
FLATPAK_FILESYSTEM_MODE_NONE, FLATPAK_FILESYSTEM_MODE_NONE,
FLATPAK_FILESYSTEM_MODE_READ_ONLY); FLATPAK_FILESYSTEM_MODE_READ_ONLY);
flatpak_exports_set_test_flags (exports, FLATPAK_EXPORTS_TEST_FLAGS_AUTOFS); flatpak_exports_set_test_flags (exports, FLATPAK_EXPORTS_TEST_FLAGS_AUTOFS);
flatpak_exports_add_path_expose (exports, ok = flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY, FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/broken-autofs"); "/broken-autofs", &error);
flatpak_exports_add_path_expose (exports, g_assert_error (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK);
FLATPAK_FILESYSTEM_MODE_READ_ONLY, g_test_message ("attempting to export /broken-autofs: %s", error->message);
"/dangling-link"); g_assert_false (ok);
flatpak_exports_add_path_expose (exports, g_clear_error (&error);
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/home/me"); ok = flatpak_exports_add_path_expose (exports,
flatpak_exports_add_path_expose (exports, FLATPAK_FILESYSTEM_MODE_READ_ONLY,
FLATPAK_FILESYSTEM_MODE_READ_ONLY, "/dangling-link", &error);
"/nonexistent"); g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
flatpak_exports_add_path_expose (exports, g_test_message ("attempting to export /dangling-link: %s", error->message);
FLATPAK_FILESYSTEM_MODE_READ_ONLY, g_assert_false (ok);
"/recursion"); g_clear_error (&error);
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY, ok = flatpak_exports_add_path_expose (exports,
"/tmp"); FLATPAK_FILESYSTEM_MODE_READ_ONLY,
flatpak_exports_add_path_expose (exports, "/home/me", &error);
FLATPAK_FILESYSTEM_MODE_READ_WRITE, g_assert_no_error (error);
"/var/tmp"); g_assert_true (ok);
flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY, ok = flatpak_exports_add_path_expose (exports,
"not-absolute"); FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/nonexistent", &error);
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND);
g_test_message ("attempting to export /nonexistent: %s", error->message);
g_assert_false (ok);
g_clear_error (&error);
ok = flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/recursion", &error);
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_TOO_MANY_LINKS);
g_test_message ("attempting to export /recursion: %s", error->message);
g_assert_false (ok);
g_clear_error (&error);
ok = flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/symlink-to-root", &error);
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTABLE_FILE);
g_test_message ("attempting to export /symlink-to-root: %s", error->message);
g_assert_false (ok);
g_clear_error (&error);
ok = flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"/tmp", &error);
g_assert_no_error (error);
g_assert_true (ok);
ok = flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_WRITE,
"/var/tmp", &error);
g_assert_no_error (error);
g_assert_true (ok);
ok = flatpak_exports_add_path_expose (exports,
FLATPAK_FILESYSTEM_MODE_READ_ONLY,
"not-absolute", &error);
g_assert_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_FILENAME);
g_test_message ("attempting to export not-absolute: %s", error->message);
g_assert_false (ok);
g_clear_error (&error);
test_host_exports_finish (exports, bwrap); test_host_exports_finish (exports, bwrap);
i = 0; i = 0;
g_assert_cmpuint (i, <, bwrap->argv->len); g_assert_cmpuint (i, <, bwrap->argv->len);
g_assert_cmpstr (bwrap->argv->pdata[i++], ==, "bwrap"); g_assert_cmpstr (bwrap->argv->pdata[i++], ==, "bwrap");
i = assert_next_is_bind (bwrap, i, "--symlink", "var/home", "/home"); i = assert_next_is_bind (bwrap, i, "--symlink", "var/home", "/home");
i = assert_next_is_bind (bwrap, i, "--ro-bind", "/tmp", "/tmp"); i = assert_next_is_bind (bwrap, i, "--ro-bind", "/tmp", "/tmp");
i = assert_next_is_bind (bwrap, i, "--ro-bind", "/var/home/me", i = assert_next_is_bind (bwrap, i, "--ro-bind", "/var/home/me",
"/var/home/me"); "/var/home/me");
skipping to change at line 1402 skipping to change at line 1475
g_assert_cmpuint (i, ==, bwrap->argv->len - 1); g_assert_cmpuint (i, ==, bwrap->argv->len - 1);
g_assert_cmpstr (bwrap->argv->pdata[i++], ==, NULL); g_assert_cmpstr (bwrap->argv->pdata[i++], ==, NULL);
g_assert_cmpuint (i, ==, bwrap->argv->len); g_assert_cmpuint (i, ==, bwrap->argv->len);
} }
int int
main (int argc, char *argv[]) main (int argc, char *argv[])
{ {
int res; int res;
/* Do not call setlocale() here: some tests look at untranslated error
* messages. */
isolated_test_dir_global_setup (); isolated_test_dir_global_setup ();
g_test_init (&argc, &argv, NULL); g_test_init (&argc, &argv, NULL);
g_test_add_func ("/context/empty", test_empty_context); g_test_add_func ("/context/empty", test_empty_context);
g_test_add_func ("/context/filesystems", test_filesystems); g_test_add_func ("/context/filesystems", test_filesystems);
g_test_add_func ("/context/full", test_full_context); g_test_add_func ("/context/full", test_full_context);
g_test_add_func ("/exports/empty", test_empty); g_test_add_func ("/exports/empty", test_empty);
g_test_add_func ("/exports/full", test_full); g_test_add_func ("/exports/full", test_full);
g_test_add_func ("/exports/host/arch", test_exports_arch); g_test_add_func ("/exports/host/arch", test_exports_arch);
 End of changes. 8 change blocks. 
104 lines changed or deleted 185 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)