diff options
author | Michael Raskin <7c6f434c@mail.ru> | 2008-01-01 21:01:58 +0000 |
---|---|---|
committer | Michael Raskin <7c6f434c@mail.ru> | 2008-01-01 21:01:58 +0000 |
commit | a677869546af12a4d1346cfb61adad156c5a6de4 (patch) | |
tree | 0ebd7b55359c6efec8590461a447f5b6967e0d58 /pkgs/tools/X11/xlaunch | |
parent | 763ac687b2ed788842abeda7d947279ea08493cd (diff) | |
download | nixlib-a677869546af12a4d1346cfb61adad156c5a6de4.tar nixlib-a677869546af12a4d1346cfb61adad156c5a6de4.tar.gz nixlib-a677869546af12a4d1346cfb61adad156c5a6de4.tar.bz2 nixlib-a677869546af12a4d1346cfb61adad156c5a6de4.tar.lz nixlib-a677869546af12a4d1346cfb61adad156c5a6de4.tar.xz nixlib-a677869546af12a4d1346cfb61adad156c5a6de4.tar.zst nixlib-a677869546af12a4d1346cfb61adad156c5a6de4.zip |
Looks like final fix for xlaunch
svn path=/nixpkgs/trunk/; revision=10044
Diffstat (limited to 'pkgs/tools/X11/xlaunch')
-rw-r--r-- | pkgs/tools/X11/xlaunch/default.nix | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/pkgs/tools/X11/xlaunch/default.nix b/pkgs/tools/X11/xlaunch/default.nix index 894af20c39ae..4ec9c27ac39c 100644 --- a/pkgs/tools/X11/xlaunch/default.nix +++ b/pkgs/tools/X11/xlaunch/default.nix @@ -3,12 +3,37 @@ stdenv.mkDerivation { name = "xlaunch"; inherit xorgserver; buildCommand = " + cat << EOF > realizeuid.c + #include <sys/types.h> + #include <unistd.h> + #include <stdio.h> + int main(int argc, char ** argv, char ** envp) + { + uid_t a,b,c; + int i; + char *nargv[10000]; + char arg1 [10]; + nargv[0]=argv[0]; + for (i=1; i<=argc; i++){ + nargv[i+1]=argv[i]; + } + nargv[1]=arg1; + getresuid (&a,&b,&c); + snprintf(arg1,8,\"%d\",a); + setresuid(c,c,c); + execve(\"\$out/libexec/xlaunch\", nargv, envp); + } +EOF mkdir -p \$out/bin - echo ' - (egrep \"^ +env\" /etc/event.d/xserver | sed -e \"s/env/ export /\" ; echo X;) | bash & - sleep 15; - \"$@\"; - ' >\$out/bin/xlaunch - chmod a+x \$out/bin/xlaunch + mkdir -p \$out/libexec + gcc realizeuid.c -o \$out/bin/xlaunch + echo '#! ${stdenv.shell} + (egrep \"^ +env\" /etc/event.d/xserver | sed -e \"s/env/ export /\" | sed -e '\\''s/#.*//'\\'' ; echo export _XARGS_=\\\$\\( grep xserver_arguments \\\$SLIM_CFGFILE \\| sed -e s/xserver_arguments// \\) ; echo X \\\$_XARGS_ ) | bash -l & + while ! test -e /tmp/.X11-unix/X0 &>/dev/null ; do sleep 0.5; done + USER=\$(egrep '\\''^[-a-z0-9A-Z_]*:[^:]*:'\\''\$1'\\'':'\\'' /etc/passwd | sed -e '\\''s/:.*//'\\'' ) + shift + su -l \${USER:-identityless-shelter} -c \"DISPLAY=:0 \$*\"; + ' >\$out/libexec/xlaunch + chmod a+x \$out/libexec/xlaunch "; } |