about summary refs log tree commit diff
path: root/pkgs/tools/X11/xlaunch
diff options
context:
space:
mode:
authorMichael Raskin <7c6f434c@mail.ru>2008-01-01 21:01:58 +0000
committerMichael Raskin <7c6f434c@mail.ru>2008-01-01 21:01:58 +0000
commita677869546af12a4d1346cfb61adad156c5a6de4 (patch)
tree0ebd7b55359c6efec8590461a447f5b6967e0d58 /pkgs/tools/X11/xlaunch
parent763ac687b2ed788842abeda7d947279ea08493cd (diff)
downloadnixlib-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.nix37
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
 	";
 }