]> CyberLeo.Net >> Repos - CDN/j.git/blob - ipcd
j: add ipc to allow spawning editors and browsers outside chroot from files inside...
[CDN/j.git] / ipcd
1 #!/bin/sh -e
2
3 # These should be executable, and take a single parameter
4 editor="/home/cyberleo/.fhs/bin/ee"
5 browser="/home/cyberleo/.fhs/bin/ff"
6
7 jroot="${1}/root"
8 jipc="${jroot}/tmp/jipc"
9 mkdir -p "$(dirname "${jipc}")"
10
11 [ ! -p "${jipc}" ] || { echo "jipc already running? ${jipc} exists" >&2; exit 1; }
12 mkfifo -m 666 "${jipc}"
13 trap "rm -f '${jipc}'" EXIT HUP INT TERM KILL
14 echo "Listening on ${jipc} ..." >&2
15
16 resolve_path() {
17   path="${1}"
18   echo "${path}" | grep -q '^/' && echo "${jroot}${path}" || zenity --error --text="Only absolute paths are allowed in chroot protocol:\n${path}"
19 }
20
21 do_editor() {
22   arg="${1}"
23   arg="$(resolve_path "${arg}")"
24   ( "${editor}" "${arg}" || zenity --error --text="Error launching editor:\n${editor} ${arg}" ) &
25 }
26
27 do_browser() {
28   arg="${1}"
29   case "${arg}" in
30   file://*)
31     arg="${arg##file://}"
32     arg="$(resolve_path "${arg}")"
33     [ "${arg}" ] && arg="file://${arg}"
34     ;;
35   [a-z]*://*)
36     ;;
37   *)
38     arg="$(resolve_path "${arg}")"
39     [ "${arg}" ] && arg="file://${arg}"
40     ;;
41   esac
42   [ "${arg}" ] && ( "${browser}" "${arg}" || zenity --error --text="Error launching browser:\n${browser} ${arg}" ) &
43 }
44
45 do_error() {
46   cmd="${1}"
47   arg="${2}"
48   zenity --error --text="Unrecognized verb in protocol:\n${cmd} ${arg}"
49 }
50
51 while true
52 do
53   unset cmd arg
54   [ -p "${jipc}" ] || break
55   read cmd arg 2>&- < "${jipc}"
56   [ "${cmd}" ] || continue
57   cmd="$(echo "${cmd}" | tr '[A-Z]' '[a-z]')"
58   case "${cmd}" in
59   exit|die|kill) kill $$; exit 0 ;;
60   editor) do_editor "${arg}" ;;
61   browser) do_browser "${arg}" ;;
62   *) do_error "${cmd}" "${arg}" ;;
63   esac
64   sleep 0.25
65 done