/* See LICENSE file for copyright and license details. */ #ifndef TEST_C #include "common.h" #define _(E) ((uint64_t)1 << (E)) #define SU_SAFE _(LIBENV_SU_SAFE) #define SU_UNSAFE _(LIBENV_SU_UNSAFE) #define LOGIN_SAFE _(LIBENV_LOGIN_SAFE) #define LOGIN_UNSAFE _(LIBENV_LOGIN_UNSAFE) #define REMOTE_SAFE _(LIBENV_REMOTE_SAFE) #define REMOTE_UNSAFE _(LIBENV_REMOTE_UNSAFE) #define PATH (_(LIBENV_PATH) | REMOTE_UNSAFE) #define DECLARE(VAR, ENUMS_)\ static const uint64_t VAR[NCLASSWORDS] = {ENUMS_} DECLARE(classes__display, _(LIBENV_DISPLAY) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); DECLARE(classes__display_config, _(LIBENV_DISPLAY_CONFIG) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); DECLARE(classes__desktop, _(LIBENV_DESKTOP) | SU_SAFE | LOGIN_SAFE | REMOTE_SAFE); DECLARE(classes__terminal_caps, _(LIBENV_TERMINAL_CAPS) | SU_SAFE | LOGIN_SAFE | REMOTE_SAFE); DECLARE(classes__local_terminal, _(LIBENV_LOCAL_TERMINAL) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); DECLARE(classes__locale, _(LIBENV_LOCALE) | SU_SAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); DECLARE(classes__locale__path, _(LIBENV_LOCALE) | SU_SAFE | LOGIN_UNSAFE | PATH); DECLARE(classes__timezone, _(LIBENV_TIMEZONE) | SU_SAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); DECLARE(classes__timezone__path, _(LIBENV_TIMEZONE) | SU_SAFE | LOGIN_UNSAFE | PATH); DECLARE(classes__session, _(LIBENV_SESSION) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); DECLARE(classes__theme_config, _(LIBENV_THEME_CONFIG) | SU_SAFE | LOGIN_UNSAFE | REMOTE_SAFE); DECLARE(classes__theme_plugin, _(LIBENV_THEME_PLUGIN) | SU_UNSAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); DECLARE(classes__internet, _(LIBENV_INTERNET) | SU_SAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); DECLARE(classes__audio, _(LIBENV_AUDIO) | SU_SAFE | LOGIN_SAFE | REMOTE_UNSAFE); DECLARE(classes__user, _(LIBENV_USER) | SU_UNSAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); DECLARE(classes__applications, _(LIBENV_APPLICATIONS) | SU_SAFE | LOGIN_UNSAFE | REMOTE_UNSAFE); DECLARE(classes__preferences, _(LIBENV_PREFERENCES) | SU_SAFE | LOGIN_UNSAFE | REMOTE_SAFE); DECLARE(classes__system_paths, _(LIBENV_SYSTEM_PATHS) | SU_SAFE | LOGIN_UNSAFE | PATH); DECLARE(classes__user_paths, _(LIBENV_USER_PATHS) | SU_SAFE | LOGIN_UNSAFE | PATH); DECLARE(classes__pwd, _(LIBENV_PWD) | SU_SAFE | LOGIN_UNSAFE | PATH); DECLARE(classes__exec__path, _(LIBENV_EXEC) | SU_SAFE | LOGIN_UNSAFE | PATH); #undef _ #undef SU_SAFE #undef SU_UNSAFE #undef LOGIN_SAFE #undef LOGIN_UNSAFE #undef REMOTE_SAFE #undef REMOTE_UNSAFE #undef PATH #undef DECLARE #define V(S) {S, CLASSES} static struct libenv_variable list[] = { /* TODO validate */ #define CLASSES classes__display V("DISPLAY"), V("WAYLAND_DISPLAY"), V("XAUTHORITY"), V("XDG_SEAT"), V("XDG_SEAT_PATH"), V("XDG_VTNR"), #undef CLASSES #define CLASSES classes__display_config V("SDL_VIDEO_FULLSCREEN_DISPLAY"), V("XMODIFIERS"), #undef CLASSES #define CLASSES classes__desktop V("DESKTOP_SESSION"), V("GTK_CSD"), V("XDG_SESSION_PATH"), V("XDG_SESSION_DESKTOP"), V("XDG_SESSION_TYPE"), V("XDG_SESSION_CLASS"), V("XDG_SESSION_ID"), V("_JAVA_AWT_WM_NOREPARENTING"), #undef CLASSES #define CLASSES classes__terminal_caps V("TERM"), V("COLORTERM"), V("VTE_VERSION"), #undef CLASSES #define CLASSES classes__local_terminal V("TERMINATOR_UUID"), #undef CLASSES #define CLASSES classes__locale V("LANG"), V("LANGUAGE"), V("LOCALE"), V("LC_CTYPE"), V("LC_NUMERIC"), V("LC_TIME"), V("LC_COLLATE"), V("LC_MONETARY"), V("LC_MESSAGES"), V("LC_PAPER"), V("LC_NAME"), V("LC_ADDRESS"), V("LC_TELEPHONE"), V("LC_MEASUREMENT"), V("LC_IDENTIFICATION"), V("LC_ALL"), #undef CLASSES #define CLASSES classes__locale__path V("LOCPATH"), V("NLSPATH"), #undef CLASSES #define CLASSES classes__timezone V("TZ"), #undef CLASSES #define CLASSES classes__timezone__path V("TZDIR"), #undef CLASSES #define CLASSES classes__session V("SSH_CLIENT"), V("SSH_CONNECTION"), V("SSH_TTY"), #undef CLASSES #define CLASSES classes__theme_config V("LS_COLORS"), #undef CLASSES #define CLASSES classes__theme_plugin V("GTK_THEME"), V("QT_STYLE_OVERRIDE"), V("QT_QPA_PLATFORMTHEME"), #undef CLASSES #define CLASSES classes__internet V("ftp_proxy"), V("http_proxy"), #undef CLASSES #define CLASSES classes__audio V("MAIN_ALSA_MIXER"), V("MAIN_ALSA_CARD"), #undef CLASSES #define CLASSES classes__user V("LOGNAME"), V("HOME"), V("SHELL"), #undef CLASSES #define CLASSES classes__applications V("EDITOR"), V("VISUAL"), V("BROWSER"), V("PAGER"), #undef CLASSES #define CLASSES classes__preferences V("MANSECT"), V("_JAVA_OPTIONS"), #undef CLASSES #define CLASSES classes__system_paths V("PATH"), V("XDG_DATA_DIRS"), V("XDG_CONFIG_DIRS"), V("MANPATH"), V("INFODIR"), V("JAVA_HOME"), #undef CLASSES #define CLASSES classes__user_paths V("XDG_SPOOL_HOME"), V("XDG_CACHE_HOME"), V("XDG_STATE_HOME"), V("XDG_RUNTIME_DIR"), V("XDG_DATA_HOME"), V("XDG_CONFIG_HOME"), V("GNUPGHOME"), V("MPLAYER_HOME"), #undef CLASSES #define CLASSES classes__pwd V("PWD"), V("OLDPWD"), #undef CLASSES #define CLASSES classes__exec__path V("_"), #undef CLASSES {NULL, NULL} }; #undef V #endif const struct libenv_variable * libenv_get_complete_list(size_t *nclasswords_out, size_t *count_out) { if (nclasswords_out) *nclasswords_out = NCLASSWORDS; if (count_out) *count_out = sizeof(list) / sizeof(*list) - 1U; return list; }