/* * meta.h - package metadata (groups, services, permissions, capabilities) * https://rawnix.org * * Copyright (c) 2025 zorz@gmx.com * SPDX-License-Identifier: BSD-2-Clause */ #ifndef META_H #define META_H #include "util.h" #include "db.h" /* meta file lives at PKG_METADIR/ inside the package archive */ typedef struct { strarray_t *groups; strarray_t *services; strarray_t *permissions; strarray_t *capabilities; } pkg_meta_t; /* read meta file from path (missing file returns empty meta, never NULL) */ pkg_meta_t *meta_read(const char *path); /* extract meta file from archive into a temp dir and read it */ pkg_meta_t *meta_extract(const char *archive, const char *pkgname); void meta_free(pkg_meta_t *m); /* called after archive extraction */ void meta_add_groups(pkg_meta_t *m, const char *root); void meta_add_services(pkg_meta_t *m, const char *root); void meta_apply_permissions(pkg_meta_t *m, const char *root); void meta_apply_capabilities(pkg_meta_t *m, const char *root); /* called before file removal */ void meta_del_services(pkg_meta_t *m, const char *root); void meta_prune_service_dirs(pkg_meta_t *m, const char *root); /* called after file removal — removes groups no longer used by any package */ void meta_del_groups(pkg_meta_t *m, const char *root, const char *pkgname); /* post-install / post-remove triggers (fc-cache, glib schemas, etc.) */ void run_triggers(const char *root, strarray_t *files, int upgrade); /* run ldconfig if /etc/ld.so.conf exists (no-op on musl) */ void run_ldconfig(const char *root); /* * Remove files owned by a package from the filesystem. * Skips files shared with other packages and files in keep list. * Removes deepest entries first (reverse sorted order). */ void remove_pkg_files(const char *root, strarray_t *files, pkgdb_t *db, const char *skip_pkg, strarray_t *keep); #endif /* META_H */