Magellan Linux

Annotation of /trunk/nxserver-freenx/patches/nxserver-freenx-0.7.3-lp-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1792 - (hide annotations) (download)
Mon Jun 4 14:33:04 2012 UTC (11 years, 11 months ago) by niro
File size: 45400 byte(s)
-freenx-0.7.3 patches and files
1 niro 1792 diff -rud -x .bzr freenx-server-0.7.3/ChangeLog freenx-server.fixes/ChangeLog
2     --- freenx-server-0.7.3/ChangeLog 2008-08-22 02:44:43.000000000 +0200
3     +++ freenx-server.fixes/ChangeLog 2009-11-23 10:16:13.106350517 +0100
4     @@ -1,3 +1,20 @@
5     +xx.11.2008 FreeNX 0.7.4
6     + * Opened the 0.7.4 development.
7     + * Fixed missing export of NX_ETC_DIR in Makefile,
8     + so node.conf.sample is installed correctly.
9     + (fabianx@bat.berlios.de)
10     + * Fixed broken round-robin load balance algorithm.
11     + (fabianx@bat.berlios.de)
12     + * Fixed --terminate|--suspend|--force-terminate for
13     + load balancing case.
14     + (fabianx@bat.berlios.de)
15     + * Fixed --terminate|--suspend|--force-terminate for
16     + usermode case.
17     + (fabianx@bat.berlios.de)
18     + * Fixed non-encrypted session mode. You might need to
19     + set EXTERNAL_PROXY_IP in node.conf.
20     + (fabianx@bat.berlios.de)
21     +
22     18.08.2008 FreeNX 0.7.3 "Priscilla One Year Edition"
23     * Opened the 0.7.3 development.
24     * Added logging of failed authentication attempts
25     Only in freenx-server.fixes: data
26     diff -rud -x .bzr freenx-server-0.7.3/init.d/freenx-server freenx-server.fixes/init.d/freenx-server
27     --- freenx-server-0.7.3/init.d/freenx-server 2008-03-02 11:29:52.000000000 +0100
28     +++ freenx-server.fixes/init.d/freenx-server 2009-11-23 10:16:13.100350348 +0100
29     @@ -1,28 +1,43 @@
30     #!/bin/bash
31     -#
32     -# Sample startup script for FreeNX server
33     -#
34     -# Coypright (c) 2007 by Fabian Franz <freenx@fabian-franz.de>.
35     -#
36     -# License: GNU GPL, version 2
37     -#
38     -# SVN: $Id: freenx-server 485 2008-03-02 10:29:52Z fabianx $
39     -#
40    
41     -# Read the config file
42     -. $(PATH=$(cd $(dirname $0) && pwd):$PATH which nxloadconfig) --
43     +### BEGIN INIT INFO
44     +# Provides: freenx_server
45     +# Required-Start: sshd
46     +# Required-Stop: sshd
47     +# Default-Start: 2 3 4 5
48     +# Default-Stop: 0 1 6
49     +# Short-Description: FreeNX Server
50     +# Description: Cleanup FreeNX Server session database at boot time
51     +### END INIT INFO
52     +
53     +PATH_BIN=/usr/lib/nx
54    
55     case "$1" in
56     start)
57     - [ ! -d "/tmp/.X11-unix" ] && mkdir -m1755 /tmp/.X11-unix/
58     + if [ ! -e "/var/run/freenx-server" ]; then
59     + [ ! -d "/tmp/.X11-unix" ] && mkdir -m1755 /tmp/.X11-unix/
60     + $PATH_BIN/nxserver --cleanup
61     + $PATH_BIN/nxserver --start
62     + touch "/var/run/freenx-server";
63     + else
64     + echo "Not starting freenx-server, it's already started."
65     + fi
66     + ;;
67     + restart|force-reload)
68     $PATH_BIN/nxserver --cleanup
69     $PATH_BIN/nxserver --start
70     + touch "/var/run/freenx-server";
71     ;;
72     stop)
73     $PATH_BIN/nxserver --stop
74     $PATH_BIN/nxserver --cleanup
75     - ;;
76     + rm -f /var/run/freenx-server
77     + ;;
78     + status)
79     + [ ! -e "/var/run/freenx-server" ] || exit 3
80     + exit 0;
81     + ;;
82     *)
83     - echo "Usage: $0 <start|stop>"
84     + echo "Usage: $0 <start|restart|stop|force-reload|status>"
85     ;;
86     esac
87     diff -rud -x .bzr freenx-server-0.7.3/Makefile freenx-server.fixes/Makefile
88     --- freenx-server-0.7.3/Makefile 2008-08-18 04:16:25.000000000 +0200
89     +++ freenx-server.fixes/Makefile 2009-11-23 10:16:13.102350032 +0100
90     @@ -8,7 +8,7 @@
91     all:
92     cd nxviewer-passwd && xmkmf && make Makefiles && make depend
93     source nxloadconfig &&\
94     - export PATH_BIN PATH_LIB CUPS_BACKEND NX_VERSION &&\
95     + export PATH_BIN PATH_LIB CUPS_BACKEND NX_VERSION NX_ETC_DIR &&\
96     for i in $(SUBDIRS) ; \
97     do\
98     echo "making" all "in $$i..."; \
99     @@ -35,14 +35,29 @@
100     #$(MAKE) suid_install
101    
102     clean:
103     - make -C nxviewer-passwd clean
104     for i in $(SUBDIRS) ; \
105     do\
106     echo "making" clean "in $$i..."; \
107     - $(MAKE) -C $$i clean || exit 1;\
108     + if test -e "$$i/Makefile"; \
109     + then $(MAKE) -C $$i clean || exit 1;\
110     + else echo ignoring $$i;\
111     + fi;\
112     done
113     + rm -f nxviewer-passwd/Makefile.back
114     + rm -f nxviewer-passwd/Makefile
115     + rm -f nxviewer-passwd/nxpasswd/Makefile
116     + rm -f nxviewer-passwd/libvncauth/Makefile
117    
118     install:
119     source nxloadconfig &&\
120     - export PATH_BIN PATH_LIB CUPS_BACKEND NX_VERSION &&\
121     + export PATH_BIN PATH_LIB CUPS_BACKEND NX_VERSION NX_ETC_DIR &&\
122     $(MAKE) nxenv_install
123     +
124     +debian-tarball:
125     + mkdir freenx-server
126     + cp -r * freenx-server || echo 0
127     + sed "s/NX_VERSION=3.2.0-74-SVN/NX_VERSION=3.2.0-74-TEAMBZR`bzr revno`/" nxloadconfig > freenx-server/nxloadconfig
128     + rm -rf freenx-server/.bzr*
129     + rm -rf freenx-server/freenx-server
130     + [ -d ".bzr" ] && tar -czf ../freenx-server_0.7.3+teambzr`bzr revno`.orig.tar.gz freenx-server
131     + rm -rf freenx-server
132     diff -rud -x .bzr freenx-server-0.7.3/node.conf.sample freenx-server.fixes/node.conf.sample
133     --- freenx-server-0.7.3/node.conf.sample 2008-08-22 02:44:43.000000000 +0200
134     +++ freenx-server.fixes/node.conf.sample 2009-11-23 10:16:13.102350032 +0100
135     @@ -37,7 +37,7 @@
136     #
137     # https://mail.kde.org/mailman/listinfo/freenx-knx
138     #
139     -# SVN: $Id: node.conf.sample 580 2008-08-22 00:44:43Z fabianx $
140     +# SVN: $Id: node.conf.sample 613 2008-09-01 20:42:31Z fabianx $
141    
142     #########################################################################
143     # General FreeNX directives
144     @@ -47,6 +47,11 @@
145     # different than the default hostname (as returned by `hostname`)
146     #SERVER_NAME="$(hostname)"
147    
148     +# The node ip which is used by NX Node in unecnrypted session mode.
149     +# Set it if you want to use a specific external ip or the autodetection
150     +# is not working.
151     +#EXTERNAL_PROXY_IP=""
152     +
153     # The port number where local 'sshd' is listening.
154     #SSHD_PORT=22
155    
156     @@ -501,6 +506,11 @@
157     #USER_X_STARTUP_SCRIPT=.Xclients
158     #DEFAULT_X_SESSION=/etc/X11/xdm/Xsession
159    
160     +# When the session is started some distros execute some scripts to get the
161     +# environment ready. Set 1 if you want DEFAULT_X_SESSION to be called before
162     +# executing the session.
163     +#BOOTSTRAP_X_SESSION="0"
164     +
165     # The key that contains the name of the script that starts a KDE session.
166     # It's run when a 'unix-kde' session is requested by the client.
167     #COMMAND_START_KDE=startkde
168     diff -rud -x .bzr freenx-server-0.7.3/nxdesktop_helper freenx-server.fixes/nxdesktop_helper
169     --- freenx-server-0.7.3/nxdesktop_helper 2008-08-06 00:52:30.000000000 +0200
170     +++ freenx-server.fixes/nxdesktop_helper 2009-11-23 10:16:13.099350087 +0100
171     @@ -37,8 +37,11 @@
172     agent_password=$(url_decode "$agent_password")
173     agent_password=$(url_decode "$agent_password")
174    
175     +[ "$agent_domain" = "" ] || DOMAIN="-d $agent_domain"
176     +[ "$windows_app" = "$0" ] || [ "$windows_app" = "" ] || APPLICATION="-s \"$windows_app\""
177     +
178     # setup commandline
179     -set -- -u "$agent_user" -k "$agent_keyboard" -d "$agent_domain" -f -s "$windows_app" $AGENT_EXTRA_OPTIONS_RDP "$agent_server"
180     +set -- -u "$agent_user" -k "$agent_keyboard" $APPLICATION $DOMAIN -f $AGENT_EXTRA_OPTIONS_RDP "$agent_server"
181    
182     if [ -n "$agent_password" ]
183     then
184     diff -rud -x .bzr freenx-server-0.7.3/nxdialog freenx-server.fixes/nxdialog
185     --- freenx-server-0.7.3/nxdialog 2008-03-11 00:01:03.000000000 +0100
186     +++ freenx-server.fixes/nxdialog 2009-11-23 10:16:13.102350032 +0100
187     @@ -76,7 +76,10 @@
188     # This is now fixed in NXClient 3.0.0, but still people sometimes use
189     # older clients.
190    
191     -NXCLIENT="/usr/NX/bin/nxclient"
192     +[ -x "/usr/bin/nxclient" ] && NXCLIENT="/usr/bin/nxclient"
193     +[ -x "/usr/NX/bin/nxclient" ] && NXCLIENT="/usr/NX/bin/nxclient"
194     +[ -z "$NXCLIENT" ] && NXCLIENT="/usr/NX/bin/nxclient"
195     +
196     [ -x "$NXCLIENT" -a "$DIALOG_TYPE" != "printer" -a "$(file -bi $NXCLIENT)" != 'application/x-shellscript' ] \
197     && exec ${NXCLIENT} "${PARAMS[@]}"
198    
199     diff -rud -x .bzr freenx-server-0.7.3/nxkeygen freenx-server.fixes/nxkeygen
200     --- freenx-server-0.7.3/nxkeygen 2008-03-11 00:01:03.000000000 +0100
201     +++ freenx-server.fixes/nxkeygen 2009-11-23 10:16:13.099350087 +0100
202     @@ -18,7 +18,7 @@
203     # Read the config file
204     . $(PATH=$(cd $(dirname $0) && pwd):$PATH which nxloadconfig) --
205    
206     -NX_KEY_DIR="$NX_HOME_DIR/.ssh"
207     +[ -z "$NX_KEY_DIR" ] && NX_KEY_DIR="$NX_HOME_DIR/.ssh"
208     DATE="`date '+%Y%m%d-%H%M%S'`"
209     NX_CLIENT_KEY="${NX_KEY_DIR}/client.id_dsa.key"
210     NX_SERVER_KEY="${NX_KEY_DIR}/server.id_dsa.pub.key"
211     @@ -69,5 +69,10 @@
212     echo "on their computers."
213     }
214    
215     +if [ -f "${NX_SERVER_KEY}" -a -f "${NX_CLIENT_KEY}" -a ! -z "$NX_DONT_OVERRIDE" ]; then
216     + echo "Not overriding the existing key"
217     + exit
218     +fi
219     +
220     main "$@"
221    
222     diff -rud -x .bzr freenx-server-0.7.3/nxloadconfig freenx-server.fixes/nxloadconfig
223     --- freenx-server-0.7.3/nxloadconfig 2008-08-22 02:44:43.000000000 +0200
224     +++ freenx-server.fixes/nxloadconfig 2009-11-23 10:16:13.103349734 +0100
225     @@ -5,7 +5,7 @@
226     #
227     # License: GPL, version 2
228     #
229     -# SVN: $Id: nxloadconfig 580 2008-08-22 00:44:43Z fabianx $
230     +# SVN: $Id: nxloadconfig 613 2008-09-01 20:42:31Z fabianx $
231     #
232     # ========================================================================
233    
234     @@ -52,7 +52,7 @@
235     # DO NOT TOUCH unless you REALLY know what you are doing
236     #########################################################################
237    
238     -NX_VERSION=3.2.0-73
239     +NX_VERSION=3.2.0-74-SVN
240     NX_LICENSE="OS (GPL, using backend: %BACKEND%)"
241    
242     # Where can different nx components be found
243     @@ -85,7 +85,15 @@
244     # General FreeNX directives
245    
246     SERVER_NAME="$(hostname)"
247     -SSHD_PORT=22
248     +EXTERNAL_PROXY_IP=""
249     +if [ -r "/etc/ssh/sshd_config" ]
250     +then
251     + SSHD_PORT=$(grep "^ *Port " -m 1 /etc/ssh/sshd_config | awk '{ print $2 ;}')
252     + [ -z $(echo "$SSHD_PORT" | egrep "^[1-9][0-9]{0,4}$") ] && SSHD_PORT=22
253     +else
254     + SSHD_PORT=22
255     +fi
256     +
257    
258     # Authentication / Security directives
259    
260     @@ -184,8 +192,14 @@
261    
262     DEFAULT_X_WM=""
263     KILL_DEFAULT_X_WM="1"
264     +BOOTSTRAP_X_SESSION="0"
265     USER_X_STARTUP_SCRIPT=.Xclients
266     DEFAULT_X_SESSION=/etc/X11/xdm/Xsession
267     +COMMAND_GDM_X_SESSION="/etc/gdm/Xsession custom"
268     +if [ ! -x "$COMMAND_GDM_X_SESSION" ]
269     +then
270     + COMMAND_GDM_X_SESSION="/etc/X11/Xsession"
271     +fi
272     COMMAND_START_KDE=startkde
273     COMMAND_START_GNOME=gnome-session
274     COMMAND_START_CDE=cdwm
275     @@ -207,6 +221,21 @@
276     COMMAND_X11VNC="x11vnc"
277     COMMAND_TASKSET="taskset"
278    
279     +COMMAND_NXSHADOWACL="$PATH_BIN/nxshadowacl"
280     +COMMAND_NXACL="$PATH_BIN/nxacl"
281     +COMMAND_NXCHECKLOAD="$PATH_BIN/nxcheckload"
282     +COMMAND_NXAGENT="$PATH_BIN/nxagent"
283     +
284     +# Guest directives
285     +ENABLE_GUEST_LOGIN="0"
286     +COMMAND_GUEST_LOGIN="/usr/lib/nx/guest/nxnode"
287     +# Try to use protected enviroment for guest sessions
288     +COMMAND_GUEST_X_SESSION="/usr/share/gdm/guest-session/Xsession custom"
289     +if [ ! -x "/usr/share/gdm/guest-session/Xsession" ]
290     +then
291     + COMMAND_GUEST_X_SESSION=$COMMAND_GDM_X_SESSION
292     +fi
293     +
294     # Misc directives
295    
296     ENABLE_1_5_0_BACKEND=""
297     @@ -287,12 +316,25 @@
298     { ! mywhich "$PATH_BIN/nxdesktop"; } >/dev/null 2>&1 && ENABLE_EXTERNAL_NXDESKTOP="1"
299     { ! mywhich "$PATH_BIN/nxviewer"; } >/dev/null 2>&1 && ENABLE_EXTERNAL_NXVIEWER="1"
300     { ! mywhich "$COMMAND_VNCPASSWD" && which vncpasswd; } >/dev/null 2>&1 && COMMAND_VNCPASSWD=$(which vncpasswd)
301     + { ! mywhich "$COMMAND_NXSHADOWACL" && test -f /etc/nxserver/nxshadowacl; } >/dev/null 2>&1 && COMMAND_NXSHADOWACL=/etc/nxserver/nxshadowacl
302     + { ! mywhich "$COMMAND_NXACL" && test -f /etc/nxserver/nxacl; } >/dev/null 2>&1 && COMMAND_NXACL=/etc/nxserver/nxacl
303     + { ! mywhich "$COMMAND_NXCHECKLOAD" && test -f /etc/nxserver/nxcheckload; } >/dev/null 2>&1 && COMMAND_NXCHECKLOAD=/etc/nxserver/nxcheckload
304     + { ! mywhich "$COMMAND_NXAGENT" && which nxagent; } >/dev/null 2>&1 && COMMAND_NXAGENT=$(which nxagent)
305     fi
306    
307     #########################################################################
308     # node.conf file evaluation
309     #########################################################################
310    
311     +SHARED_CONFS="/usr/share/freenx-server"
312     +if [ -d $SHARED_CONFS/node.conf.d ]
313     +then
314     + for i in $SHARED_CONFS/node.conf.d/*
315     + do
316     + [ -e $i ] && . $i
317     + done
318     +fi
319     +
320     if [ -d $NX_ETC_DIR/node.conf.d ]
321     then
322     for i in $NX_ETC_DIR/node.conf.d/*
323     @@ -317,7 +359,7 @@
324     [ -z "$APPLICATION_LIBRARY_PATH" ] && APPLICATION_LIBRARY_PATH=$PATH_LIB
325     [ -z "$APPLICATION_LIBRARY_PRELOAD" ] && APPLICATION_LIBRARY_PRELOAD="$APPLICATION_LIBRARY_PATH/libX11.so.6.2:$APPLICATION_LIBRARY_PATH/libXext.so.6.4:$APPLICATION_LIBRARY_PATH/libXcomp.so:$APPLICATION_LIBRARY_PATH/libXcompext.so:$APPLICATION_LIBRARY_PATH/libXrender.so.1.2"
326    
327     -NX_BACKEND_VERSION=$(strings $PATH_BIN/nxagent 2>/dev/null | egrep 'NXAGENT - Version' | sed 's/.*Version //g')
328     +NX_BACKEND_VERSION=$(strings $COMMAND_NXAGENT 2>/dev/null | egrep 'NXAGENT - Version' | sed 's/.*Version //g')
329    
330     [ "$ENABLE_1_5_0_BACKEND" = "1" ] && NX_BACKEND_VERSION="1.5.0" # forced the backend
331    
332     @@ -354,19 +396,19 @@
333     ERROR="yes" && echo "Error: Invalid value \"PATH_BIN=$PATH_BIN\""
334     # Check for NX agents ...
335    
336     - [ ! -x "$PATH_BIN/nxagent" ] && \
337     + [ ! -x "$COMMAND_NXAGENT" ] && \
338     ERROR="yes" && echo "Error: Could not find nxagent in $PATH_BIN. Please install some OSS components."
339    
340     - if [ "ENABLE_EXTERNAL_NXDESKTOP" = "1" ]
341     + if [ "$ENABLE_EXTERNAL_NXDESKTOP" = "1" ]
342     then
343     [ ! mywhich "$COMMAND_RDESKTOP" >/dev/null 2>&1 ] && \
344     WARNING="yes" && echo "Warning: Could not find COMMAND_RDESKTOP=$COMMAND_RDESKTOP. RDP sessions won't work."
345     else
346     [ ! -x "$PATH_BIN/nxdesktop" ] && \
347     - WARNING="yes" && echo "Warning: Could not find nxdesktop in $PATH_BIN. RDP sessions won't work."
348     + WARNING="yes" && echo "Warning: Could not find nxdesktop in $PATH_BIN. RDP sessions won't work. Ignore if you use NX > 3.2"
349     fi
350    
351     - if [ "ENABLE_EXTERNAL_NXVIEWER" = "1" ]
352     + if [ "$ENABLE_EXTERNAL_NXVIEWER" = "1" ]
353     then
354     [ ! mywhich "$COMMAND_VNCVIEWER" >/dev/null 2>&1 ] && \
355     WARNING="yes" && echo "Warning: Could not find COMMAND_VNCVIEWER=$COMMAND_VNCVIEWER. VNC sessions won't work."
356     @@ -374,7 +416,7 @@
357     WARNING="yes" && echo "Warning: Could not find COMMAND_VNCPASSWD=$COMMAND_VNCPASSWD. VNC sessions won't work."
358     else
359     [ ! -x "$PATH_BIN/nxviewer" ] && \
360     - WARNING="yes" && echo "Warning: Could not find nxviewer in $PATH_BIN. VNC sessions won't work."
361     + WARNING="yes" && echo "Warning: Could not find nxviewer in $PATH_BIN. VNC sessions won't work. Ignore if you use NX > 3.2"
362     fi
363    
364     [ ! mywhich "$COMMAND_X11VNC" >/dev/null 2>&1 ] && \
365     @@ -400,10 +442,12 @@
366    
367     OLD_IFS=$IFS
368     IFS=":"
369     - for LIBRARY in $APPLICATION_LIBRARY_PRELOAD; do
370     - [ ! -e $LIBRARY ] && \
371     - WARNING="yes" && echo "Warning: Invalid value \"APPLICATION_LIBRARY_PRELOAD=$APPLICATION_LIBRARY_PRELOAD\". $LIBRARY could not be found. Users will not be able to run a single application in non-rootless mode." && break ;
372     - done
373     + if [ "$SET_LD_LIBRARY_PATH" = "1" ]; then
374     + for LIBRARY in $APPLICATION_LIBRARY_PRELOAD; do
375     + [ ! -e $LIBRARY ] && \
376     + WARNING="yes" && echo "Warning: Invalid value \"APPLICATION_LIBRARY_PRELOAD=$APPLICATION_LIBRARY_PRELOAD\". $LIBRARY could not be found. Users will not be able to run a single application in non-rootless mode." && break ;
377     + done
378     + fi
379     IFS=$OLD_IFS
380    
381     [ -z "$SSH_AUTHORIZED_KEYS" ] && \
382     @@ -579,7 +623,7 @@
383     && echo " Users will not be able to enable printing."
384     [ -z "$(strings $COMMAND_CUPSD | egrep 'CUPS\/1.2')" ] && \
385     WARNING="yes" && echo "Warning: Invalid cupsd version of \"$COMMAND_CUPSD\". Need version 1.2." \
386     - && echo " Users will not be able to enable printing."
387     + && echo " Users will not be able to enable printing. Ignore if you use cups > 1.2"
388     ! mywhich "$COMMAND_MD5SUM" >/dev/null 2>&1 && \
389     ERROR="yes" && echo "Error: Invalid value \"COMMAND_MD5SUM=$COMMAND_MD5SUM\""
390    
391     @@ -606,8 +650,8 @@
392     [ -z $(echo "$ENABLE_ROOTLESS_MODE" | egrep "^[0|1]$") ] && \
393     ERROR="yes" && echo "Error: Invalid value \"ENABLE_ROOTLESS_MODE=$ENABLE_ROOTLESS_MODE\""
394    
395     - [ -z "$(strings $PATH_BIN/nxagent | egrep 'NXAGENT - Version 1.5.0|NXAGENT - Version 2.[01].0|NXAGENT - Version 3.[012].0')" ] && \
396     - WARNING="yes" && echo "Error: Could not find 1.5.0 or 2.[01].0 or 3.[01].0 version string in nxagent. NX 1.5.0 or 2.[01].0 or 3.[012].0 backend is needed for this version of FreeNX."
397     + [ -z "$(strings $COMMAND_NXAGENT | egrep 'NXAGENT - Version 1.5.0|NXAGENT - Version 2.[01].0|NXAGENT - Version 3.[0123].0')" ] && \
398     + WARNING="yes" && echo "Error: Could not find 1.5.0 or 2.[01].0 or 3.[0123].0 version string in nxagent. NX 1.5.0 or 2.[01].0 or 3.[0123].0 backend is needed for this version of FreeNX."
399    
400     [ -z $(echo "$ENABLE_USESSION" | egrep "^[0|1]$") ] && \
401     ERROR="yes" && echo "Error: Invalid value \"ENABLE_USESSION=$ENABLE_USESSION\""
402     diff -rud -x .bzr freenx-server-0.7.3/nxnode freenx-server.fixes/nxnode
403     --- freenx-server-0.7.3/nxnode 2008-08-22 02:44:43.000000000 +0200
404     +++ freenx-server.fixes/nxnode 2009-11-23 10:16:13.104350274 +0100
405     @@ -13,7 +13,7 @@
406     #
407     # License: GNU GPL, version 2
408     #
409     -# SVN: $Id: nxnode 580 2008-08-22 00:44:43Z fabianx $
410     +# SVN: $Id: nxnode 613 2008-09-01 20:42:31Z fabianx $
411     #
412     # 21.06.2004: - Full reconnection support
413    
414     @@ -217,7 +217,11 @@
415     unix-cde)
416     NODE_STARTX=$COMMAND_START_CDE
417     ;;
418     - unix-application|windows-helper|vnc-helper)
419     + windows-helper)
420     + application="$PATH_BIN/nxdesktop_helper"
421     + NODE_STARTX=$application
422     + ;;
423     + unix-application|vnc-helper)
424     [ "$application" = "xterm" ] && application=$COMMAND_XTERM
425     NODE_STARTX=$application
426     ;;
427     @@ -303,6 +307,7 @@
428     fi
429    
430     [ "$cups" = "1" -a "$ENABLE_CUPS_SERVER_EXPORT" = "1" ] && export CUPS_SERVER="$USER_FAKE_HOME/.nx/C-$sess_id/cups/cups.sock"
431     + [ "$samba" = "1" -a "$ENABLE_CUPS_SERVER_EXPORT" = "1" ] && [ -d "$USER_FAKE_HOME/.nx/C-$sess_id/cups" ] && export CUPS_SERVER="$USER_FAKE_HOME/.nx/C-$sess_id/cups/cups.sock"
432    
433     if [ "$ENABLE_SAMBA_PRELOAD" = "1" -a -x "$PATH_BIN/nxredir" ]
434     then
435     @@ -332,6 +337,33 @@
436     [ -d /etc/X11/Xresources ] && xrdb -display :$display -merge /etc/X11/Xresources/* >>"$USER_FAKE_HOME/.nx/C-$sess_id/session" 2>&1
437    
438     #
439     + # Use Xsession to execute the Desktop session
440     + #
441     +
442     + case $type in
443     + unix-gnome)
444     + export STARTUP="$NODE_APPLICATION"
445     + if [ "$login_method" = "GUEST" ]
446     + then
447     + NODE_APPLICATION=$COMMAND_GUEST_X_SESSION
448     + elif [ "$BOOTSTRAP_X_SESSION" = "1" ]
449     + then
450     + NODE_APPLICATION=$COMMAND_GDM_X_SESSION
451     + fi
452     + ;;
453     + unix-kde|unix-cde)
454     + export STARTUP="$NODE_APPLICATION"
455     + if [ "$login_method" = "GUEST" ]
456     + then
457     + NODE_APPLICATION=$COMMAND_GUEST_X_SESSION
458     + elif [ "$BOOTSTRAP_X_SESSION" = "1" ]
459     + then
460     + NODE_APPLICATION=$DEFAULT_X_SESSION
461     + fi
462     + ;;
463     + esac
464     +
465     + #
466     # Startup the application
467     #
468    
469     @@ -370,6 +402,12 @@
470     node_agent_persistent_session()
471     {
472     P="-nopersistent"
473     + # Guest sessions are always nonpersistent
474     + if [ "$login_method" = "GUEST" ]
475     + then
476     + echo "$P"
477     + return
478     + fi
479     OLD_IFS=$IFS
480     IFS=","
481     [ "$ENABLE_PERSISTENT_SESSION" = "all" ] && P="-persistent"
482     @@ -540,7 +578,8 @@
483    
484     # Start the agent
485    
486     - PATH="$PATH_BIN:$PATH" $PATH_BIN/nxagent $P $R -name "NX - $user@$SERVER_NAME:$display - $session (GPL Edition)" -option "$USER_FAKE_HOME/.nx/C-$sess_id/options" $K $G $B $FP $AGENT_EXTRA_OPTIONS_X :$display 2>&3 &
487     + #PATH="$PATH_BIN:$PATH" $COMMAND_NXAGENT $P $R -name "NX - $user@$SERVER_NAME:$display - $session (GPL Edition)" -option "$USER_FAKE_HOME/.nx/C-$sess_id/options" $K $G $B $FP $AGENT_EXTRA_OPTIONS_X :$display 2>&3 &
488     + PATH="$PATH_BIN:$PATH" $COMMAND_NXAGENT $P $R -name "NX - $user@$SERVER_NAME:$display - $session (GPL Edition)" -option "$USER_FAKE_HOME/.nx/C-$sess_id/options" $B $FP $AGENT_EXTRA_OPTIONS_X :$display 2>&3 &
489     fi
490    
491     #
492     @@ -699,7 +738,15 @@
493     [ -e "$USER_FAKE_HOME/.nx/C-$sess_id/scripts/mpoint" ] || return
494     cat "$USER_FAKE_HOME/.nx/C-$sess_id/scripts/mpoint" | while read mpoint
495     do
496     - $COMMAND_SMBUMOUNT "$mpoint" >/dev/null 2>/dev/null
497     + for i in `seq 1 15` ; do
498     + if [ "$(mount | grep "$mpoint" | wc -l)" -ne 0 ] ; then
499     + $COMMAND_SMBUMOUNT "$mpoint" >/dev/null 2>/dev/null
500     + [ $? -ne 0 ] && $COMMAND_SMBUMOUNT -f "$mpoint" >/dev/null 2>/dev/null
501     + else
502     + break
503     + fi
504     + sleep 0.5s
505     + done
506     done
507     }
508    
509     @@ -842,9 +889,9 @@
510    
511     if stringinstring "Session: Display failure detected at" "$line"
512     then
513     - echo "NX> 596 Error: Session $1 failed. Reason was: $line"
514     if [ "$1" = "restore" ]
515     then
516     + echo "NX> 596 Error: Session $1 failed. Reason was: $line"
517     kill $NODE_TAIL_PID
518     break
519     fi
520     @@ -1030,6 +1077,7 @@
521     session=$(getparam session)
522     type=$(getparam type | sed 's/%2d/-/g')
523     application=$(getparam application)
524     + windows_app=$(getparam application)
525     cache=$(getparam cache)
526     images=$(getparam images)
527     cookie=$(getparam cookie)
528     @@ -1078,6 +1126,8 @@
529     # Rootless fix from 2x nxserver 1.5.0
530     realtype=$type
531     [ "$type" = "unix-application" -o "$type" = "unix-default" ] && realtype="unix-desktop"
532     + [ "$type" = "unix-gnome" ] && realtype="gnome"
533     + [ "$type" = "unix-kde" ] && realtype="kde"
534    
535     # NX 2.1.0 file-sharing port options
536     client=$(getparam client)
537     @@ -1132,6 +1182,8 @@
538     shadowdisplay=$(getparam shadowdisplay)
539     shadowhost=$(getparam shadowhost)
540    
541     + # Authentication method needed by guest mode.
542     + login_method=$(getparam login_method)
543    
544     sess_id="$SERVER_NAME-$display-$uniqueid"
545     NXSESSION_DIRECTORY="$USER_FAKE_HOME/.nx/C-$sess_id"
546     @@ -1143,7 +1195,7 @@
547     export agent_password
548     export agent_server
549     export agent_domain
550     - export windows_app=$application
551     + export windows_app
552     agent_keyboard=""
553     [ "$ENABLE_EXTERNAL_NXDESKTOP_KEYBOARD" = "1" ] && agent_keyboard=$(echo "$keyboard" | cut -d'/' -f2)
554     export agent_keyboard
555     @@ -1184,6 +1236,17 @@
556     [ -z "$userip" -a "$host" = "127.0.0.1" ] && userip="127.0.0.1"
557     [ -z "$userip" ] && userip="*"
558     fi
559     +
560     + # We need our own external IP
561     + proxyip="$EXTERNAL_PROXY_IP"
562     +
563     + if [ -z "$proxyip" -a -n "$host" ]
564     + then
565     + [ "$host" = "127.0.0.1" ] && host=$(hostname)
566     + proxyip=$(ping -c1 "$host" | grep 'PING' | cut -d'(' -f2 | cut -d')' -f1)
567     + fi
568     +
569     + [ -z "$proxyip" ] && proxyip="127.0.0.1"
570    
571     # ok, lets make the session dir first:
572    
573     @@ -1245,7 +1308,7 @@
574     umask 0077
575    
576     cat << EOF > "$USER_FAKE_HOME/.nx/C-$sess_id/options"
577     -${keyboard:+keyboard=$keyboard,}${kbtype:+kbtype=$kbtype,}${kbload:+kbload=$kbload,}${keymap:+keymap=$keymap,}${resize:+resize=$resize,}${CACHE}${IMAGES}${PACK}link=$link,nodelay=$nodelay,type=$realtype,cleanup=0,${ACCEPT}cookie=$proxy_cookie,id=$sess_id,samba=$samba,media=$media${sync:+,sync=$sync}${cups:+,cups=$cups}${keybd:+,keybd=$keybd}${aux:+,aux=$aux}${http:+,http=$http}${rdpcolors:+,rdpcolors=$rdpcolors}${rdpcache:+,rdpcache=$rdpcache}${fullscreen:+,fullscreen=1}${clipboard:+,clipboard=$clipboard}${menu:+,menu=$menu}:$display
578     +nx/nx,${keyboard:+keyboard=$keyboard,}${kbtype:+kbtype=$kbtype,}${kbload:+kbload=$kbload,}${keymap:+keymap=$keymap,}${geometry:+geometry=$geometry,}${client:+client=$client,}${resize:+resize=$resize,}${CACHE}${IMAGES}${PACK}link=$link,nodelay=$nodelay,type=$realtype${clipboard:+,clipboard=$clipboard}${composite:+composite=$composite},cleanup=0,product=LFE/None/LFEN/None,shmem=1,${backingstore:+backingstore=$backingstore,}shpix=1,${ACCEPT}cookie=$proxy_cookie,id=$sess_id,samba=$samba,media=$media${sync:+,sync=$sync}${cups:+,cups=$cups}${keybd:+,keybd=$keybd}${aux:+,aux=$aux}${http:+,http=$http}${rdpcolors:+,rdpcolors=$rdpcolors}${rdpcache:+,rdpcache=$rdpcache}${fullscreen:+,fullscreen=1}${menu:+,menu=$menu}:$display
579     EOF
580     umask $OLD_UMASK
581     #samba=$samba,
582     @@ -1316,7 +1379,7 @@
583     NX> 705 Session display: $display
584     NX> 703 Session type: $type
585     NX> 701 Proxy cookie: $proxy_cookie
586     -NX> 702 Proxy IP: $userip
587     +NX> 702 Proxy IP: $proxyip
588     NX> 706 Agent cookie: $cookie
589     NX> 704 Session cache: $type
590     NX> 707 SSL tunneling: $ssl_tunnel
591     @@ -1509,7 +1572,7 @@
592     echo "NX> 716 Starting NX Agent ..."
593     shift
594     [ "$SET_LD_LIBRARY_PATH" = "1" ] && export LD_LIBRARY_PATH="$AGENT_LIBRARY_PATH:$LD_LIBRARY_PATH"
595     - PATH="$PATH:$PATH_BIN" $PATH_BIN/nxagent -name "NX Agent Test - Args: $@" $@
596     + PATH="$PATH:$PATH_BIN" $COMMAND_NXAGENT -name "NX Agent Test - Args: $@" $@
597     echo "NX> 716 NX Agent exited with status: $?"
598     ;;
599     --setkey)
600     diff -rud -x .bzr freenx-server-0.7.3/nxnode-login freenx-server.fixes/nxnode-login
601     --- freenx-server-0.7.3/nxnode-login 2008-03-11 00:01:03.000000000 +0100
602     +++ freenx-server.fixes/nxnode-login 2009-11-23 10:16:13.105349977 +0100
603     @@ -61,7 +61,10 @@
604     if { "$auth_method"=="ssh" } {
605     set pid [spawn -noecho $command_ssh -2 -x -l "$user" "$host" -o "NumberOfPasswordPrompts 1" -p "$port" "$executable $command" ]
606     } elseif { "$auth_method"=="su" } {
607     + set env(LANG) "C"
608     set pid [spawn -noecho su - "$user" -c "$executable $command" ]
609     +} elseif { "$auth_method"=="guest" } {
610     + set pid [spawn -noecho $executable $command ]
611     } else {
612     exit 1
613     }
614     diff -rud -x .bzr freenx-server-0.7.3/nxredir/Makefile freenx-server.fixes/nxredir/Makefile
615     --- freenx-server-0.7.3/nxredir/Makefile 2008-07-31 20:12:33.000000000 +0200
616     +++ freenx-server.fixes/nxredir/Makefile 2009-11-23 10:16:13.100350348 +0100
617     @@ -1,14 +1,16 @@
618     -all: libnxredir.so.0
619     +all: libnxredir.so
620    
621     CC=gcc
622     CFLAGS=-g -O2 -Wall -fPIC
623     -LIBNAME=libnxredir.so.0
624     +LIBNAME=libnxredir.so
625     +VERSION=0
626    
627     -libnxredir.so.0: nxredir.o
628     - $(CC) -fPIC $(CFLAGS) -nostdlib -shared -o $(LIBNAME) nxredir.o -ldl -lc
629     +libnxredir.so: nxredir.o
630     + $(CC) -fPIC $(CFLAGS) -nostdlib -shared -Wl,-soname,$(LIBNAME).$(VERSION) -o $(LIBNAME).$(VERSION) nxredir.o -ldl -lc
631    
632     clean:
633     rm -f $(LIBNAME)
634     + rm -f $(LIBNAME).$(VERSION)
635     rm -f *.o
636    
637     ifneq ($(NX_VERSION),)
638     @@ -21,7 +23,7 @@
639     perl -pi -e "s,CUPS_BACKEND=.*,CUPS_BACKEND=\"$$CUPS_BACKEND\",g" $(DESTDIR)/$$CUPS_BACKEND/nxsmb
640     else
641     install: all
642     - install -m755 libnxredir.so.0 $(DESTDIR)/usr/lib
643     + install -m755 libnxredir.so $(DESTDIR)/usr/lib
644     install -m755 nxredir $(DESTDIR)/usr/bin
645     install -m755 nxsmb $(DESTDIR)/usr/lib/cups/backend/
646     endif
647     diff -rud -x .bzr freenx-server-0.7.3/nxserver freenx-server.fixes/nxserver
648     --- freenx-server-0.7.3/nxserver 2008-08-22 02:44:43.000000000 +0200
649     +++ freenx-server.fixes/nxserver 2009-11-23 10:16:13.100350348 +0100
650     @@ -11,7 +11,7 @@
651     #
652     # License: GNU GPL, version 2
653     #
654     -# SVN: $Id: nxserver 580 2008-08-22 00:44:43Z fabianx $
655     +# SVN: $Id: nxserver 612 2008-08-25 03:28:15Z fabianx $
656     #
657    
658     # Read the config file
659     @@ -295,9 +295,9 @@
660     then
661     [ -z "$(getparam shadowcookie)" ] && continue
662    
663     - if [ -x "$PATH_BIN/nxshadowacl" ]
664     + if [ -x "$COMMAND_NXSHADOWACL" ]
665     then
666     - $PATH_BIN/nxshadowacl "$(getparam userName)" "$USER" || continue
667     + $COMMAND_NXSHADOWACL "$(getparam userName)" "$USER" || continue
668     fi
669     fi
670     fi
671     @@ -334,7 +334,7 @@
672     elif [ "$4" = "shadow" ]
673     then
674     available=$(getparam status)
675     - printf "%-7s %-16s %32s %8s %5s %-14s %-11s %s\n" "$(getparam display)" "$(getparam type)" "$(getparam sessionId)" "$options" "$depth" "$geom" "$available" "$(getparam sessionName) (Shadowed)" >> $TMPFILE
676     + printf "%-7s %-16s %32s %8s %5s %-14s %-11s %s\n" "$(getparam display)" "$(getparam type)" "$(getparam sessionId)" "$options" "$depth" "$geom" "$available" "$(getparam sessionName) ($(getparam userName)) (Shadowed)" >> $TMPFILE
677     else
678     # only unix-* sessions can be resumed, but other session types can still be terminated
679     stringinstring "unix-" "$4" || available="N/A"
680     @@ -344,14 +344,14 @@
681     egrep -q "^userName=$1$" $i && let SESSION_COUNT_USER=$SESSION_COUNT_USER+1
682     done
683    
684     - if [ "$4" = "vnc" -a "$ENABLE_DESKTOP_SHARING" = "1" ]
685     + if [ "$4" = "vnc" -o "$4" = "shadow" -a "$ENABLE_DESKTOP_SHARING" = "1" ]
686     then
687     export DESKTOP_SHARING_IDS=""
688     for i in $(LC_ALL=C netstat -ln --protocol=unix | egrep 'X11-unix/X[0-9]$' | sed 's/.*X\(.*\)/\1/g')
689     do
690     uniqueid=$(echo $[$RANDOM*$RANDOM] | $COMMAND_MD5SUM | cut -d" " -f1 | tr "[a-z]" "[A-Z]")
691     DESKTOP_SHARING_IDS="$DESKTOP_SHARING_IDS $uniqueid=$i"
692     - printf "%-7s %-16s %32s %8s %5s %-14s %-11s %s\n" "$i" "vnc-local" "$uniqueid" "--------" "$udepth" "$(echo $3 | cut -d'x' -f1,2)" "Running" "X$i (Local)" >> $TMPFILE
693     + printf "%-7s %-16s %32s %8s %5s %-14s %-11s %s\n" "$i" "Local" "$uniqueid" "--------" "$udepth" "$(echo $3 | cut -d'x' -f1,2)" "Running" "X$i (Local)" >> $TMPFILE
694     done
695     fi
696    
697     @@ -796,6 +796,33 @@
698    
699     USER=$USER2
700    
701     + # Guest authentication
702     + if [ "$USER" = "NX guest user" ]
703     + then
704     + if [ "$ENABLE_GUEST_LOGIN" != "1" -o ! -x "$COMMAND_GUEST_LOGIN" ]
705     + then
706     + if [ "$ENABLE_GUEST_LOGIN" != "1" ]
707     + then
708     + echo_x "NX> 404 ERROR: guest authentication not enabled"
709     + else
710     + echo_x "NX> 404 ERROR: $COMMAND_GUEST_LOGIN not correct"
711     + fi
712     + echo_x "NX> 999 Bye"
713     + if [ "$ENABLE_LOG_FAILED_LOGINS" = "1" ]
714     + then
715     + logger -t nxserver -i -p auth.info "($(whoami)) Failed login for user=$USER from IP=$(echo $SSH_CLIENT | awk '{print $1}')"
716     + fi
717     + exit 1
718     + fi
719     + log 6 -n "guest "
720     + nxnode_login "" -- guest "" "" "$COMMAND_GUEST_LOGIN" --check 2>&1 >/dev/null
721     + if [ $? -eq 0 ]
722     + then
723     + LOGIN_SUCCESS="1"
724     + LOGIN_METHOD="GUEST"
725     + fi
726     + fi
727     +
728     # PASSDB based auth
729     if [ "$ENABLE_PASSDB_AUTHENTICATION" = "1" -a "$LOGIN_SUCCESS" = "0" ]
730     then
731     @@ -916,7 +943,10 @@
732     export NODE_HOSTNAME
733    
734     # Use nxnode-login?
735     - if [ "$LOGIN_METHOD" = "SSH" ]
736     + if [ "$LOGIN_METHOD" = "GUEST" ]
737     + then
738     + NXNODE_TOSEND="$@" nxnode_login "" -- guest "" "" "$COMMAND_GUEST_LOGIN" "$CMD" 2>&1 | log_tee
739     + elif [ "$LOGIN_METHOD" = "SSH" ]
740     then
741     export COMMAND_SSH
742     NXNODE_TOSEND="$@" nxnode_login "$PASS" -- ssh "$USER" "$SSHD_PORT" "$PATH_BIN/nxnode" "$CMD" 2>&1 | log_tee
743     @@ -987,10 +1017,10 @@
744     do
745     case "$CMD" in
746     "NX> 706"*)
747     - if [ -x "$PATH_BIN/nxshadowacl" ]
748     + if [ -x "$COMMAND_NXSHADOWACL" ]
749     then
750     # check if we should save the cookie
751     - $PATH_BIN/nxshadowacl "$USER"
752     + $COMMAND_NXSHADOWACL "$USER"
753    
754     if [ $? -eq 0 ]
755     then
756     @@ -1074,10 +1104,10 @@
757     do
758     case "$CMD" in
759     "NX> 706"*)
760     - if [ -x "$PATH_BIN/nxshadowacl" ]
761     + if [ -x "$COMMAND_NXSHADOWACL" ]
762     then
763     # check if we should save the cookie
764     - $PATH_BIN/nxshadowacl "$USER"
765     + $COMMAND_NXSHADOWACL "$USER"
766    
767     if [ $? -eq 0 ]
768     then
769     @@ -1192,7 +1222,7 @@
770     # Lock held
771    
772     SERVER_LB_NR=$(cat $NX_SESS_DIR/round-robin 2>/dev/null)
773     - let SERVER_LB_NR=(SERVER_LB_NR+1) % SERVER_LB_NR_OF_HOSTS
774     + let SERVER_LB_NR=(SERVER_LB_NR+1)%SERVER_LB_NR_OF_HOSTS
775     echo $SERVER_LB_NR >$NX_SESS_DIR/round-robin
776    
777     # Exit critical section
778     @@ -1211,7 +1241,7 @@
779    
780     for i in $LOAD_BALANCE_SERVERS
781     do
782     - SERVER_LB_LOAD=$($NX_DIR/bin/nxcheckload $i)
783     + SERVER_LB_LOAD=$($COMMAND_NXCHECKLOAD $i)
784     [ -z "$SERVER_LB_LOAD" ] && continue
785    
786     if [ $SERVER_LB_LOAD -gt $SERVER_LB_MAX ]
787     @@ -1263,6 +1293,7 @@
788     server_get_params $CMD
789     PARAMS=$SERVER_PARAMS
790     PARAMS="$PARAMS&clientproto=$PROTO"
791     + PARAMS="$PARAMS&login_method=$LOGIN_METHOD"
792     CMDLINE=$PARAMS
793     echo_x
794    
795     @@ -1344,8 +1375,7 @@
796     if [ "$ENABLE_EXTERNAL_NXDESKTOP" = "1" -a "$(getparam type)" = "windows" ]
797     then
798     type="windows-helper"
799     - application="$PATH_BIN/nxdesktop_helper"
800     - PARAMS="$PARAMS&type=$type&application=$application&freenx_export_agents=1"
801     + PARAMS="$PARAMS&type=$type&freenx_export_agents=1"
802     CMDLINE=$PARAMS
803     fi
804    
805     @@ -1381,10 +1411,10 @@
806     return 1
807     fi
808    
809     - if [ -x "$PATH_BIN/nxacl" ]
810     + if [ -x "$COMMAND_NXACL" ]
811     then
812     - log 3 "Info: Using $PATH_BIN/nxacl to change session parameters or deny session."
813     - NEW_PARAMS=$($PATH_BIN/nxacl "$CMDLINE")
814     + log 3 "Info: Using $COMMAND_NXACL to change session parameters or deny session."
815     + NEW_PARAMS=$($COMMAND_NXACL "$CMDLINE")
816     if [ $? -ne 0 ]
817     then
818     echo_x "NX> 596 The session failed due to a nxacl policy setting: $NEW_PARAMS"
819     @@ -1444,6 +1474,14 @@
820     continue
821     fi
822    
823     + let PROXY_DISPLAY=$SESS_DISPLAY+4000
824     + if $COMMAND_NETCAT -z "$SERVER_HOST" $PROXY_DISPLAY
825     + then
826     + log 2 "Warning: nxagent proxy without .nX$SESS_DISPLAY-lock found on host:port $SERVER_HOST:$AGENT_DISPLAY."
827     + let SESS_DISPLAY=$SESS_DISPLAY+1
828     + continue
829     + fi
830     +
831     # Now check for the other enabled services
832    
833     let SAMBA_DISPLAY=$SESS_DISPLAY+3000
834     @@ -1961,71 +1999,71 @@
835     session_history "$user" "$sessid"
836     }
837    
838     -cmd_terminate()
839     +cmd_execute()
840     {
841     - CMD_PARAMS=$(cmd_parse_3_params "$2")
842     - [ -z "$CMD_PARAMS" ] && exit 1
843     - for i in $CMD_PARAMS;
844     + cmd_host="$1"
845     + cmd_user="$2"
846     + cmd_cmd="$3"
847     +
848     + if [ "$ENABLE_USERMODE_AUTHENTICATION" = "1" ]
849     + then
850     + sh -c "$cmd_cmd"
851     + elif [ "$cmd_host" = "127.0.0.1" -o "$cmd_host" = "localhost" ]
852     + then
853     + su - "$cmd_user" -c "$cmd_cmd"
854     + else
855     + ssh "$cmd_host" su - "$cmd_user" -c "'$cmd_cmd'"
856     + fi
857     +}
858     +
859     +cmd_terminate_or_send()
860     +{
861     + CMD="$1"
862     +
863     + if [ "$CMD" = "--broadcast" ]
864     + then
865     + CMD_PARAMS=$(session_find_all)
866     + [ -z "$CMD_PARAMS" ] && cmd_abort "Error: No running session could be found."
867     + else
868     + CMD_PARAMS=$(cmd_parse_3_params "$2")
869     + [ -z "$CMD_PARAMS" ] && exit 1
870     + shift
871     + fi
872     + shift
873     +
874     + for i in $CMD_PARAMS
875     do
876     CMDLINE=$(session_get_cmdline $i)
877     cmd_sessionid=$(getparam sessionId)
878     + cmd_display=$(getparam display)
879     cmd_user=$(getparam userName)
880     cmd_type=$(getparam type)
881     cmd_status=$(getparam status)
882     + cmd_host=$(getparam host)
883    
884     # is it a "good" session?
885     - case "$1" in
886     + case "$CMD" in
887     --suspend)
888     if [ "$cmd_status" = "Running" ] && stringinstring "unix-" "$cmd_type"
889     then
890     - echo "sessionid=$cmd_sessionid" | su - "$cmd_user" -c "$PATH_BIN/nxnode --suspend"
891     + echo "sessionid=$cmd_sessionid" | cmd_execute "$cmd_host" "$cmd_user" "$PATH_BIN/nxnode --suspend"
892     fi
893     ;;
894     --terminate)
895     - echo "sessionid=$cmd_sessionid" | su - "$cmd_user" -c "$PATH_BIN/nxnode --terminate"
896     + echo "sessionid=$cmd_sessionid" | cmd_execute "$cmd_host" "$cmd_user" "$PATH_BIN/nxnode --terminate"
897     ;;
898     --force-terminate)
899     - echo "sessionid=$cmd_sessionid" | su - "$cmd_user" -c "$PATH_BIN/nxnode --terminate"
900     + echo "sessionid=$cmd_sessionid" | cmd_execute "$cmd_host" "$cmd_user" "$PATH_BIN/nxnode --terminate"
901     session_close $cmd_sessionid
902     ;;
903     - esac
904     - done
905     -
906     -}
907     -
908     -cmd_send()
909     -{
910     - if [ "$1" = "--broadcast" ]
911     - then
912     - CMD_PARAMS=$(session_find_all)
913     - [ -z "$CMD_PARAMS" ] && cmd_abort "Error: No running session could be found."
914     - else
915     - CMD_PARAMS=$(cmd_parse_3_params "$2")
916     - [ -z "$CMD_PARAMS" ] && exit 1
917     - shift
918     - fi
919     - shift
920     - for i in $CMD_PARAMS;
921     - do
922     - CMDLINE=$(session_get_cmdline $i)
923     - cmd_display=$(getparam display)
924     - cmd_user=$(getparam userName)
925     - cmd_type=$(getparam type)
926     - cmd_status=$(getparam status)
927     - cmd_host=$(getparam host)
928     -
929     - # is it a "good" session?
930     - if [ "$cmd_status" = "Running" ] && stringinstring "unix-" "$cmd_type"
931     - then
932     - if [ "$cmd_host" = "127.0.0.1" -o "$cmd_host" = "localhost" ]
933     + --send|--broadcast)
934     + # is it a "good" session?
935     + if [ "$cmd_status" = "Running" ] && stringinstring "unix-" "$cmd_type"
936     then
937     - su - "$cmd_user" -c "$PATH_BIN/nxdialog --dialog ok --caption \"NX Administrator Message\" --message \"$@\" -display \":$cmd_display\" &"
938     - else
939     - ssh $cmd_host su - "$cmd_user" -c "'$PATH_BIN/nxdialog --dialog ok --caption \"NX Administrator Message\" --message \"$@\" -display \":$cmd_display\" &'"
940     + cmd_execute "$cmd_host" "$cmd_user" "$PATH_BIN/nxdialog --dialog ok --caption \"NX Administrator Message\" --message \"$@\" -display \":$cmd_display\" &"
941     fi
942     - fi
943     + esac
944     done
945     - #nxnode_start --send "$CMD_PARAMS"
946     }
947    
948     #
949     @@ -2099,13 +2137,13 @@
950     cmd_history "$@"
951     ;;
952     --terminate|--suspend|--force-terminate)
953     - cmd_terminate "$@"
954     + cmd_terminate_or_send "$@"
955     ;;
956     --cleanup)
957     - cmd_terminate "--force-terminate" "*"
958     + cmd_terminate_or_send "--force-terminate" "*"
959     ;;
960     --send|--broadcast)
961     - cmd_send "$@"
962     + cmd_terminate_or_send "$@"
963     ;;
964     *)
965     cmd_abort "Error: Function $CMD not implemented yet."
966     Only in freenx-server.fixes/nx-session-launcher: freenx.session.policy
967     diff -rud -x .bzr freenx-server-0.7.3/nx-session-launcher/nx-session-launcher freenx-server.fixes/nx-session-launcher/nx-session-launcher
968     --- freenx-server-0.7.3/nx-session-launcher/nx-session-launcher 2008-08-05 19:54:32.000000000 +0200
969     +++ freenx-server.fixes/nx-session-launcher/nx-session-launcher 2009-11-23 10:16:13.105349977 +0100
970     @@ -1,31 +1,170 @@
971     #!/usr/bin/env python
972    
973     +import xml.parsers.expat as expat
974     import os
975     import gobject
976     import dbus
977     import sys
978     +import logging
979     +
980     +logging.basicConfig (level=logging.ERROR, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', stream=sys.stderr)
981     +log = logging.getLogger ("nx-session-launcher")
982     +log.debug ("Starting nx-session-launcher")
983    
984     +# Getting the system dbus
985     bus = dbus.SystemBus ()
986    
987     -manager_obj = bus.get_object ('org.freedesktop.ConsoleKit', '/org/freedesktop/ConsoleKit/Manager')
988     -manager = dbus.Interface (manager_obj, 'org.freedesktop.ConsoleKit.Manager')
989     +USE_PK_CREDENTIALS = False
990    
991     -params = dbus.Array ([], signature = "(sv)")
992     -params.append (("unix-user", dbus.Int32 (os.getuid(), variant_level=1)))
993     -params.append (("session-type", dbus.String ("nx", variant_level=1)))
994     -params.append (("x11-display", dbus.String (os.environ['DISPLAY'], variant_level=1)))
995     -params.append (("is-local", dbus.Boolean (True, variant_level=1)))
996     +# ------------------- ConsoleKit integration ------------------------
997    
998     -cookie = manager.OpenSessionWithParameters (params)
999     -os.environ['XDG_SESSION_COOKIE'] = cookie
1000     +# Getting the ConsoleKit object
1001     +ck_manager_obj = bus.get_object ('org.freedesktop.ConsoleKit', '/org/freedesktop/ConsoleKit/Manager')
1002     +ck_manager = dbus.Interface (ck_manager_obj, 'org.freedesktop.ConsoleKit.Manager')
1003     +objs = ck_manager.GetSeats ()
1004    
1005     -current_session = manager.GetSessionForCookie (cookie)
1006     -session_obj = bus.get_object ('org.freedesktop.ConsoleKit', current_session)
1007     -session = dbus.Interface (session_obj, 'org.freedesktop.ConsoleKit.Session')
1008     +nx_create_session = os.getenv('NX_CREATE_CK_SESSION')
1009     +create_session = True
1010     +if nx_create_session == "false":
1011     + create_session = False
1012    
1013     -properties = dbus.Interface (session_obj, 'org.freedesktop.DBus.Properties')
1014     -properties.Set ("org.freedesktop.DBus.Properties", "active", dbus.Boolean (True, variant_level=1))
1015     +nx_session_type = os.getenv('NX_SESSION_TYPE')
1016     +if nx_session_type == None:
1017     + nx_session_type = "nx"
1018     +display = os.getenv('DISPLAY')
1019    
1020     -os.setreuid(os.getuid(), os.getuid())
1021     -os.spawnvp(os.P_WAIT, sys.argv[1], [])
1022     +# Get the current session
1023     +current_cookie = os.getenv('XDG_SESSION_COOKIE')
1024     +current_session = None
1025     +if current_cookie != None:
1026     + current_session = ck_manager.GetSessionForCookie (current_cookie)
1027     +
1028     +def takeOwnership():
1029     + log.debug ("NX_CREATE_CK_SESSION = " + current_cookie)
1030     + log.debug ("Not creating a CK session")
1031     +
1032     + session_obj = bus.get_object ('org.freedesktop.ConsoleKit', current_session)
1033     + session = dbus.Interface (session_obj, 'org.freedesktop.ConsoleKit.Session')
1034     +
1035     + properties = dbus.Interface (session_obj, 'org.freedesktop.DBus.Properties')
1036     + try:
1037     + properties.Set ("org.freedesktop.DBus.Properties", "active", dbus.Boolean (True, variant_level=1))
1038     + properties.Set ("org.freedesktop.DBus.Properties", "is-local", dbus.Boolean (True, variant_level=1))
1039     + properties.Set ("org.freedesktop.DBus.Properties", "session-type", dbus.String (nx_session_type, variant_level=1))
1040     + if display != None:
1041     + properties.Set ("org.freedesktop.DBus.Properties", "x11-display", dbus.String (display, variant_level=1))
1042     + log.debug ("Ownership taken")
1043     + return True
1044     + except expat.ExpatError, e:
1045     + error_string = str(e)
1046     + log.error ("Error: " + error_string)
1047     + log.error ("Falling back to create a new session")
1048     + return False
1049     + except dbus.DBusException, e:
1050     + error_string = str(e)
1051     + log.error ("Error: " + error_string)
1052     + log.error ("Falling back to create a new session")
1053     + return False
1054     + except Exception, e:
1055     + error_string = str(e)
1056     + log.error ("Error: " + error_string)
1057     + log.error ("Falling back to create a new session")
1058     + return False
1059     +
1060     +def createSession():
1061     + try:
1062     + # Defining the session attributes
1063     + params = dbus.Array ([], signature = "(sv)")
1064     + params.append (("unix-user", dbus.Int32 (os.getuid(), variant_level=1)))
1065     + params.append (("session-type", dbus.String (nx_session_type, variant_level=1)))
1066     + if display != None:
1067     + params.append (("x11-display", dbus.String (display, variant_level=1)))
1068     + params.append (("is-local", dbus.Boolean (True, variant_level=1)))
1069     +
1070     + # Create the ConsoleKit session
1071     + cookie = ck_manager.OpenSessionWithParameters (params)
1072     + log.debug ("Session " + cookie + " created")
1073     +
1074     + # Exporting the XDG_SESSION_COOKIE variable
1075     + os.environ['XDG_SESSION_COOKIE'] = cookie
1076     +
1077     + # Getting the ConsoleKit session
1078     + current_session = ck_manager.GetSessionForCookie (cookie)
1079     + session_obj = bus.get_object ('org.freedesktop.ConsoleKit', current_session)
1080     + session = dbus.Interface (session_obj, 'org.freedesktop.ConsoleKit.Session')
1081     +
1082     + # Setting the session as active
1083     + properties = dbus.Interface (session_obj, 'org.freedesktop.DBus.Properties')
1084     + properties.Set ("org.freedesktop.DBus.Properties", "active", dbus.Boolean (True, variant_level=1))
1085     +
1086     + except dbus.DBusException, e:
1087     + # Dbus error problably you don't have the dbus rule installed or your launcher is not suid nx
1088     + # Open session without the parameters
1089     + log.error ("Failed to create a CK session using parameters")
1090     +
1091     + error_string = str(e)
1092     + log.error ("Error: " + error_string)
1093     +
1094     + # Create the ConsoleKit session
1095     + cookie = ck_manager.OpenSession ()
1096     + log.debug ("Session " + cookie + " created")
1097     +
1098     + # Exporting the XDG_SESSION_COOKIE variable
1099     + os.environ['XDG_SESSION_COOKIE'] = cookie
1100     +
1101     +def checkPermission ():
1102     + if USE_PK_CREDENTIALS == False:
1103     + return True
1104     +
1105     + policykit = bus.get_object ('org.freedesktop.PolicyKit', '/', "org/freedesktop/PolicyKit")
1106     +
1107     + if(policykit == None):
1108     + log.error ("Error: Could not get PolicyKit D-Bus Interface\n")
1109     + else:
1110     + polkit_interface = dbus.Interface (policykit, 'org.freedesktop.PolicyKit')
1111     +
1112     + try:
1113     + granted = polkit_interface.IsProcessAuthorized ("freenx.session.create", os.getpid(), "false")
1114     +
1115     + if granted == "yes":
1116     + return True
1117     + else:
1118     + return False
1119     +
1120     + except dbus.DBusException, e :
1121     + # Dbus error problably you don't have the PolicyKit rule installed
1122     + error_string = str(e)
1123     + log.error ("Error: " + error_string)
1124     +
1125     +
1126     +if create_session and ( current_session == None or not takeOwnership () ):
1127     + log.debug("Creating a new session")
1128     + createSession ()
1129     + pid = os.fork ()
1130     + if pid == -1:
1131     + log.rrror ("error forking child")
1132     + elif pid == 0:
1133     + log.debug ("Forked")
1134     + else:
1135     + # Parent
1136     + status = os.waitpid (pid, 0)
1137     + os._exit (0)
1138     +
1139     +if os.geteuid () != os.getuid ():
1140     + # Drop setuid privilege
1141     + os.setreuid(os.getuid(), os.getuid())
1142     +
1143     + os.environ ['NX_CREATE_CK_SESSION'] = "false"
1144     +
1145     + # Reexecute this script to really drop euid privilege
1146     +# os.spawnvp (os.P_WAIT, sys.argv[0], sys.argv)
1147     +# sys.exit()
1148     +
1149     +args = sys.argv
1150     +args.pop(0)
1151     +log.info ("Launching the program\n")
1152     +if checkPermission ():
1153     + os.execvp(args[0], args)
1154     +else:
1155     + log.error ("You don't have permission to execute the action\n")
1156    
1157     diff -rud -x .bzr freenx-server-0.7.3/nx-session-launcher/nx-session-launcher-suid.c freenx-server.fixes/nx-session-launcher/nx-session-launcher-suid.c
1158     --- freenx-server-0.7.3/nx-session-launcher/nx-session-launcher-suid.c 2008-08-05 19:54:32.000000000 +0200
1159     +++ freenx-server.fixes/nx-session-launcher/nx-session-launcher-suid.c 2009-11-23 10:16:13.098350105 +0100
1160     @@ -23,8 +23,8 @@
1161     #include <stdlib.h>
1162     #include <stdio.h>
1163    
1164     -#ifndef NXSERVER_COMMAND
1165     -#define NXSERVER_COMMAND "/usr/bin/nx-session-launcher"
1166     +#ifndef SESSION_LAUNCHER_COMMAND
1167     +#define SESSION_LAUNCHER_COMMAND "/usr/bin/nx-session-launcher"
1168     #endif
1169    
1170     #define CK_LAUNCH_SESSION_COMMAND "/usr/bin/ck-launch-session"
1171     @@ -47,7 +47,7 @@
1172     new_argv[0] = CK_LAUNCH_SESSION_COMMAND;
1173    
1174     }else{
1175     - new_argv[0] = NXSERVER_COMMAND;
1176     + new_argv[0] = SESSION_LAUNCHER_COMMAND;
1177     }
1178    
1179     return execv(new_argv[0], new_argv);
1180     diff -rud -x .bzr freenx-server-0.7.3/nx-session-launcher/README freenx-server.fixes/nx-session-launcher/README
1181     --- freenx-server-0.7.3/nx-session-launcher/README 2008-08-05 23:30:58.000000000 +0200
1182     +++ freenx-server.fixes/nx-session-launcher/README 2009-11-23 10:16:13.098350105 +0100
1183     @@ -1,6 +1,8 @@
1184     -The unlock buttons on Users and Groups or Network are greyed out and un-accessible. Tried running from a term 'sudo users-admin' with the same results.
1185     +The unlock buttons on Users and Groups or Network are greyed out and un-accessible.
1186     +Running from a term 'sudo users-admin' should work the same way. (Not in Ubuntu due
1187     +to bug https://bugs.edge.launchpad.net/ubuntu/+source/policykit/+bug/210897)
1188    
1189     -To correct the problem follow this steps:
1190     +If you are not using a packed version, correct the problem by following this steps:
1191     - Copy nx-session-launcher and nx-session-launcher-suid to /usr/bin
1192     - Execute $ chown nx /usr/bin/nx-session-launcher-suid
1193     - Execute $ chmod 4755 /usr/bin/nx-session-launcher-suid