uhttpd.init 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #!/bin/sh /etc/rc.common
  2. # Copyright (C) 2010 Jo-Philipp Wich
  3. START=50
  4. UHTTPD_BIN="/usr/sbin/uhttpd"
  5. PX5G_BIN="/usr/sbin/px5g"
  6. append_arg() {
  7. local cfg="$1"
  8. local var="$2"
  9. local opt="$3"
  10. local def="$4"
  11. local val
  12. config_get val "$cfg" "$var"
  13. [ -n "$val" -o -n "$def" ] && append UHTTPD_ARGS "$opt ${val:-$def}"
  14. }
  15. append_bool() {
  16. local cfg="$1"
  17. local var="$2"
  18. local opt="$3"
  19. local def="$4"
  20. local val
  21. config_get_bool val "$cfg" "$var" "$def"
  22. [ "$val" = 1 ] && append UHTTPD_ARGS "$opt"
  23. }
  24. generate_keys() {
  25. local cfg="$1"
  26. local key="$2"
  27. local crt="$3"
  28. local days bits country state location commonname
  29. config_get days "$cfg" days
  30. config_get bits "$cfg" bits
  31. config_get country "$cfg" country
  32. config_get state "$cfg" state
  33. config_get location "$cfg" location
  34. config_get commonname "$cfg" commonname
  35. [ -x "$PX5G_BIN" ] && {
  36. $PX5G_BIN selfsigned -der \
  37. -days ${days:-730} -newkey rsa:${bits:-1024} -keyout "$UHTTPD_KEY" -out "$UHTTPD_CERT" \
  38. -subj /C=${country:-DE}/ST=${state:-Saxony}/L=${location:-Leipzig}/CN=${commonname:-OpenWrt}
  39. }
  40. }
  41. start_instance()
  42. {
  43. UHTTPD_ARGS=""
  44. UHTTPD_CERT=""
  45. UHTTPD_KEY=""
  46. local cfg="$1"
  47. local realm="$(uci_get system.@system[0].hostname)"
  48. local listen http https interpreter path
  49. append_arg "$cfg" home "-h"
  50. append_arg "$cfg" realm "-r" "${realm:-OpenWrt}"
  51. append_arg "$cfg" config "-c"
  52. append_arg "$cfg" cgi_prefix "-x"
  53. append_arg "$cfg" lua_prefix "-l"
  54. append_arg "$cfg" lua_handler "-L"
  55. append_arg "$cfg" script_timeout "-t"
  56. append_arg "$cfg" network_timeout "-T"
  57. append_arg "$cfg" tcp_keepalive "-A"
  58. append_arg "$cfg" error_page "-E"
  59. append_arg "$cfg" index_page "-I"
  60. append_bool "$cfg" no_symlinks "-S" 0
  61. append_bool "$cfg" no_dirlists "-D" 0
  62. append_bool "$cfg" rfc1918_filter "-R" 0
  63. config_get http "$cfg" listen_http
  64. for listen in $http; do
  65. append UHTTPD_ARGS "-p $listen"
  66. done
  67. config_get interpreter "$cfg" interpreter
  68. for path in $interpreter; do
  69. append UHTTPD_ARGS "-i $path"
  70. done
  71. config_get https "$cfg" listen_https
  72. config_get UHTTPD_KEY "$cfg" key /etc/uhttpd.key
  73. config_get UHTTPD_CERT "$cfg" cert /etc/uhttpd.crt
  74. [ -n "$https" ] && {
  75. [ -f "$UHTTPD_CERT" -a -f "$UHTTPD_KEY" ] || {
  76. config_foreach generate_keys cert
  77. }
  78. [ -f "$UHTTPD_CERT" -a -f "$UHTTPD_KEY" ] && {
  79. append_arg "$cfg" cert "-C"
  80. append_arg "$cfg" key "-K"
  81. for listen in $https; do
  82. append UHTTPD_ARGS "-s $listen"
  83. done
  84. }
  85. }
  86. start-stop-daemon -S -x $UHTTPD_BIN \
  87. -p /var/run/uhttpd_${cfg}.pid \
  88. -m -b -- -f $UHTTPD_ARGS
  89. }
  90. stop_instance()
  91. {
  92. local cfg="$1"
  93. [ -f /var/run/uhttpd_${cfg}.pid ] && {
  94. start-stop-daemon -K -q -n ${UHTTPD_BIN##*/} \
  95. -p /var/run/uhttpd_${cfg}.pid -s TERM
  96. rm -f /var/run/uhttpd_${cfg}.pid
  97. }
  98. }
  99. start() {
  100. config_load uhttpd
  101. config_foreach start_instance uhttpd
  102. }
  103. stop() {
  104. config_load uhttpd
  105. config_foreach stop_instance uhttpd
  106. }