2034ea01b9
This adds a patch for XScreenSaver that ensures that the suid wrapper for xscreensaver-auth is run correctly. The patch is a simple update to drivers/xscreensaver.c that inserts /run/wrappers/bin before the DEFAULT_PATH_PREFIX, which is the directory for xscreensaver hacks/demos, and should be preserved. The wrapper directory can be modified in the derivation, or even disabled. Co-authored-by: Anderson Torres <torres.anderson.85@protonmail.com>
37 lines
1.3 KiB
Diff
37 lines
1.3 KiB
Diff
--- a/driver/xscreensaver.c
|
|
+++ b/driver/xscreensaver.c
|
|
@@ -253,6 +253,8 @@
|
|
#undef MAX
|
|
#define MAX(x,y)((x)>(y)?(x):(y))
|
|
|
|
+/* Define the default wrapper prefix here, for NixOS */
|
|
+#define NIXOS_WRAPPER_PREFIX "@wrapperPrefix@"
|
|
|
|
/* Globals used in this file.
|
|
*/
|
|
@@ -632,12 +634,24 @@ handle_sigchld (Display *dpy, Bool blanked_p)
|
|
static void
|
|
hack_environment (void)
|
|
{
|
|
+ static const char *wrapper_path = NIXOS_WRAPPER_PREFIX;
|
|
static const char *def_path = DEFAULT_PATH_PREFIX;
|
|
const char *opath = getenv("PATH");
|
|
char *npath;
|
|
if (! opath) opath = "/bin:/usr/bin"; /* WTF */
|
|
- npath = (char *) malloc(strlen(def_path) + strlen(opath) + 20);
|
|
+ /* NOTE: The NixOS patch adds extra margin than what would be expected for a
|
|
+ single extra ":" PATH separator to account for UTF-32 encoding. The
|
|
+ original 20 bytes would have only accounted for UTF-16 safely (the path
|
|
+ concatenation would have needed 28 bytes of margin at minimum for UTF-32).
|
|
+ */
|
|
+ npath = (char *) malloc(strlen(wrapper_path) + strlen(def_path) + strlen(opath) + 32);
|
|
strcpy (npath, "PATH=");
|
|
+ if (wrapper_path && *wrapper_path)
|
|
+ {
|
|
+ strcat (npath, wrapper_path);
|
|
+ strcat (npath, ":");
|
|
+ }
|
|
+
|
|
strcat (npath, def_path);
|
|
strcat (npath, ":");
|
|
strcat (npath, opath);
|