From 396ab55d6e07f6bd031087005216d3e49d3c2ad1 Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Thu, 17 Sep 2026 17:50:23 +0200 Subject: packaged xdemineur (and added desc dir to api (and fiddled with snadboxing)) --- packages/xdemineur/string.patch | 10 ++++++++++ packages/xdemineur/xdemineur.sh | 25 +++++++++++++++++++++++++ snag/scripts/run_pkg_build.sh | 1 + snag/src/build_db.c | 11 +++++++++-- snag/src/package.h | 1 + snag/src/package_db.c | 30 +++++++++++++++--------------- 6 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 packages/xdemineur/string.patch create mode 100644 packages/xdemineur/xdemineur.sh diff --git a/packages/xdemineur/string.patch b/packages/xdemineur/string.patch new file mode 100644 index 0000000..e56296e --- /dev/null +++ b/packages/xdemineur/string.patch @@ -0,0 +1,10 @@ +--- main.c 1999-08-01 22:57:46.000000000 +0200 ++++ newmain.c 2026-09-17 17:28:16.911113144 +0200 +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + + #include "demineur.h" + #include "xdemineur.h" diff --git a/packages/xdemineur/xdemineur.sh b/packages/xdemineur/xdemineur.sh new file mode 100644 index 0000000..bb921b7 --- /dev/null +++ b/packages/xdemineur/xdemineur.sh @@ -0,0 +1,25 @@ +pkg_id=xdemineur +pkg_name="xdémineur" +pkg_desc="a minesweeper game for the X Window System" +pkg_webpage="https://www.babafou.eu.org/xdemineur/" +pkg_license="MIT-CMU" +pkg_version="2.1.1" + +pkg_source_name="xdemineur-$pkg_version.tar.gz" +pkg_source_url="https://www.babafou.eu.org/xdemineur/xdemineur-$pkg_version.tar.gz" +pkg_source_checksum="593824412a208a1b75d5b15745a271dc3eba330d41f7718f4826567d04bcbb9b" + +# NOTE: requires horrible x imake thing + +configure() { + patch main.c < $descdir/string.patch + xmkmf +} + +build() { + make -j16 +} + +install() { + make DESTDIR="$root" install +} diff --git a/snag/scripts/run_pkg_build.sh b/snag/scripts/run_pkg_build.sh index 5b98cfd..17079bc 100755 --- a/snag/scripts/run_pkg_build.sh +++ b/snag/scripts/run_pkg_build.sh @@ -26,6 +26,7 @@ IFS= read -r data 0<&"$api_recv" echo "data=$data" root=$(getvar root) +descdir=$(getvar descdir) # load the description script . $3 diff --git a/snag/src/build_db.c b/snag/src/build_db.c index ad68be5..06099f6 100644 --- a/snag/src/build_db.c +++ b/snag/src/build_db.c @@ -86,7 +86,7 @@ bool set_child_sandbox(const package_build_t* build) { if (!landlock_add_path_rule(landlock_fd, &ruleset_attr, cfg.build_package_script, &path_beneath)) { return false; } - if (!landlock_add_path_rule(landlock_fd, &ruleset_attr, build->package->script_path, &path_beneath)) { + if (!landlock_add_path_rule(landlock_fd, &ruleset_attr, build->package->desc_dir, &path_beneath)) { return false; } path_beneath.allowed_access = @@ -139,7 +139,8 @@ bool set_child_sandbox(const package_build_t* build) { LANDLOCK_ACCESS_FS_MAKE_FIFO | LANDLOCK_ACCESS_FS_MAKE_BLOCK | LANDLOCK_ACCESS_FS_MAKE_SYM | - LANDLOCK_ACCESS_FS_TRUNCATE; + LANDLOCK_ACCESS_FS_TRUNCATE | + LANDLOCK_ACCESS_FS_EXECUTE; if (!landlock_add_path_rule(landlock_fd, &ruleset_attr, "/tmp", &path_beneath)) { return false; } @@ -281,6 +282,12 @@ void build_run(const package_build_t* build) { write(api_to_sh[1], tmp, strlen(tmp)); free(tmp); } + if (strncmp(buf, "descdir", sizeof("descdir") - 1) == 0) { + char* tmp = vastrcat(build->package->desc_dir, "\n"); + write(api_to_sh[1], tmp, strlen(tmp)); + free(tmp); + } + // failure, failed to work (asked for bad var) break; case API_MESSAGE_NONE: break; diff --git a/snag/src/package.h b/snag/src/package.h index 54009c1..d8f591e 100644 --- a/snag/src/package.h +++ b/snag/src/package.h @@ -10,6 +10,7 @@ typedef struct { } source_info_t; typedef struct { + char* desc_dir; char* script_path; struct { char buffer[4069]; diff --git a/snag/src/package_db.c b/snag/src/package_db.c index a04c47b..f2a105e 100644 --- a/snag/src/package_db.c +++ b/snag/src/package_db.c @@ -16,35 +16,35 @@ bool load_package_info(char* pkgid, package_info_t* info) { size_t pkgid_len = strlen(pkgid); // construct package description directory path and ensure it exists - // pkg_dir = "pkg_db/pkgid" - size_t pkg_dir_len = cfg.package_db_len + pkgid_len + 1; - char* pkg_dir = emalloc(pkg_dir_len + 1, "pkg_dir"); + // desc_dir = "pkg_db/pkgid" + size_t desc_dir_len = cfg.package_db_len + pkgid_len + 1; + info->desc_dir = emalloc(desc_dir_len + 1, "desc_dir"); { - memcpy(pkg_dir, cfg.package_db, cfg.package_db_len); - pkg_dir[cfg.package_db_len] = '/'; - memcpy(pkg_dir + cfg.package_db_len + 1, pkgid, pkgid_len); - pkg_dir[pkg_dir_len] = '\0'; - if (access(pkg_dir, F_OK) != 0) { + memcpy(info->desc_dir, cfg.package_db, cfg.package_db_len); + info->desc_dir[cfg.package_db_len] = '/'; + memcpy(info->desc_dir + cfg.package_db_len + 1, pkgid, pkgid_len); + info->desc_dir[desc_dir_len] = '\0'; + if (access(info->desc_dir, F_OK) != 0) { print("Package '%s' not found\n", pkgid); - free(pkg_dir); + free(info->desc_dir); return false; } } // construct package description script path and ensure it exists - // script_path = "pkg_dir/pkgid.sh" - size_t script_path_len = pkg_dir_len + pkgid_len + 4; + // script_path = "desc_dir/pkgid.sh" + size_t script_path_len = desc_dir_len + pkgid_len + 4; info->script_path = emalloc(script_path_len + 1, "info->script_path"); { - memcpy(info->script_path, pkg_dir, pkg_dir_len); - info->script_path[pkg_dir_len] = '/'; - memcpy(&info->script_path[pkg_dir_len + 1], pkgid, pkgid_len); + memcpy(info->script_path, info->desc_dir, desc_dir_len); + info->script_path[desc_dir_len] = '/'; + memcpy(&info->script_path[desc_dir_len + 1], pkgid, pkgid_len); memcpy(&info->script_path[script_path_len - 3], ".sh", 3); info->script_path[script_path_len] = '\0'; - free(pkg_dir); if (access(info->script_path, F_OK) != 0) { print("Package '%s' broken, doesn't have description script\n", pkgid); free(info->script_path); + free(info->desc_dir); return false; } } -- cgit v1.2.3