File: ltsp-localappsd

package info (click to toggle)
ltsp 5.5.4-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 5,440 kB
  • ctags: 359
  • sloc: sh: 5,106; ansic: 1,590; perl: 280; python: 197; makefile: 171; lex: 152; yacc: 59
file content (82 lines) | stat: -rwxr-xr-x 2,635 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/sh

. /usr/share/ltsp/ltsp-client-functions

logit() {
    logger -t ltsp-localappsd -p daemon.info $1
}

if [ -n "${LDM_USERNAME}" -a -n "$(/usr/bin/id ${LDM_USERNAME})" ]; then
    true
else
    logit "Unknown user:  $LDM_USERNAME"
    exit 1
fi

if [ -z "$DISPLAY" ];then 
    logit "Unknown DISPLAY"
    exit 1
fi

# Initialize LTSP_COMMAND as blank
reset_xprop(){
    xprop -root -f $1 8s -set $1 ""
}

reset_xprop LTSP_COMMAND
reset_xprop LTSP_COMMAND_WAIT

# Make sure the local user has access to X
chown ${LDM_USERNAME} $XAUTHORITY

# Check for default printer and printer filtering and export them
[ -n "$LDM_PRINTER_DEFAULT" ] && export CLIENT_ENV="${CLIENT_ENV} PRINTER=${LDM_PRINTER_DEFAULT}"
[ -n "$LDM_PRINTER_LIST" ] && export CLIENT_ENV="${CLIENT_ENV} PRINTER_LIST=${LDM_PRINTER_LIST}"

run_ltsp_localappsd(){
    if [ "${LDM_USERNAME}" = "${USER}" ]; then
        LANG=$LANG LANGUAGE=$LANG DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $CLIENT_ENV ${LTSP_COMMAND}
    else
        su - ${LDM_USERNAME} -c "LANG=$LANG LANGUAGE=$LANG DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY $CLIENT_ENV ${LTSP_COMMAND}"
    fi
}

# Poll for LTSP_COMMAND changes and execute
xprop -notype -root -spy LTSP_COMMAND | while read junk_x junk_y LTSP_COMMAND ; do

    # Strip off leading and trailing double-quotes.
    LTSP_COMMAND=${LTSP_COMMAND%\"}
    LTSP_COMMAND=${LTSP_COMMAND#\"}

    # If empty, nothing to execute, return to the loop.
    test -n "${LTSP_COMMAND}" || continue

    LTSP_COMMAND_WAIT=$(xprop -root -notype LTSP_COMMAND_WAIT |sed -e 's/^LTSP_COMMAND_WAIT = //' -e 's/^"//' -e 's/"$//')
    if [ -n "${LTSP_COMMAND}" ]; then
        # If LOCAL_APPS_APPS_WHITELIST is defined, reject anything not listed.  Otherwise allow by default.
        if [ -n "${LOCAL_APPS_WHITELIST}" ]; then
            unset TEMP_ALLOW_EXEC
            for cmd in $LOCAL_APPS_WHITELIST; do
                if [ "$cmd" = "$(echo $LTSP_COMMAND|cut -d\  -f1)" ]; then
                    TEMP_ALLOW_EXEC=1
                    break
                fi
            done
            if [ -z "${TEMP_ALLOW_EXEC}" ]; then
                logit "Rejecting command not listed in LOCAL_APPS_WHITELIST: $LTSP_COMMAND"
                reset_xprop LTSP_COMMAND
                reset_xprop LTSP_COMMAND_WAIT
                continue
            fi
        fi

        logit "Executing command as username ${LDM_USERNAME}: ${LTSP_COMMAND} "
        if [ "$LTSP_COMMAND_WAIT" = "true" ]; then
            run_ltsp_localappsd
        else
            run_ltsp_localappsd &
        fi
    fi
    reset_xprop LTSP_COMMAND
    reset_xprop LTSP_COMMAND_WAIT
done