diff options
Diffstat (limited to 'cgi/cgi')
-rwxr-xr-x | cgi/cgi | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/cgi/cgi b/cgi/cgi new file mode 100755 index 000000000..2ab6e5b0b --- /dev/null +++ b/cgi/cgi @@ -0,0 +1,235 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2010 Daniel Baumann <daniel@debian.org> +## +## live-build comes with ABSOLUTELY NO WARRANTY; for details see COPYING. +## This is free software, and you are welcome to redistribute it +## under certain conditions; see COPYING for details. + + +# Including common functions +. "${LB_BASE:-/usr/share/live/build}"/scripts/build.sh + +# Reading defaults +if [ -r /etc/default/live-build.cgi ] +then + . /etc/default/live-build.cgi +else + echo "E: /etc/default/live-build.cgi missing" + exit 1 +fi + +# Turn on debug if enabled +if [ "${_DEBUG}" = "enabled" ] +then + set -x +fi + +# Sending http header +echo "Content-type: text/html" +echo + +# Sending html header +cat "${_TEMPLATES}"/header.html + +# CGI +if [ -z "${QUERY_STRING}" ] +then + # Sending html form + sed -e "s#LB_MIRROR_BOOTSTRAP#${LB_MIRROR_BOOTSTRAP}#" \ + -e "s#LB_MIRROR_BINARY_SECURITY#${LB_MIRROR_BINARY_SECURITY}#" \ + -e "s#LB_MIRROR_BINARY#${LB_MIRROR_BINARY}#" \ + -e "s/VERSION/${VERSION}/" \ + -e "s/DATE/`date +%Y%m%d-%H:%M`/" \ + "${_TEMPLATES}"/form.html +else + # Converting spaces: sed 's/+/ /g' + # Converting '@': sed 's/%40/@/g' + # Converting ':': sed 's/%3A/:/g' + # Converting ';': sed 's/%3B/\;/g' + # Converting '/': sed 's/%2F/\//g' + # Converting '~': sed 's/%7E/\~/g' + # Converting '=': sed 's/%3D/=/g' + # Converting '+': sed 's/%2B/+/g' + + # Translate parameters + QUERY_STRING=$(echo "${QUERY_STRING}" | sed -e 's/%2F/\//g' -e 's/+/ /g' -e 's/%3B/;/g' -e 's/%7E/~/g' -e 's/%3A/:/g' -e 's/%40/@/g' -e 's/%3D/=/g' -e 's/%2B/+/g') + # Debug the filtering string + # echo ${QUERY_STRING} + + # Email + _EMAIL=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])email=[-0-9a-zA-Z._@]+' | cut -f 2 -d '=' | head -n1) + + # Standard options + LB_BINARY_IMAGES=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])binary_images=[-a-z]+' | cut -f 2 -d '=' | head -n1) + LB_DISTRIBUTION=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])distribution=[a-z]+' | cut -f 2 -d '=' | head -n1) + LB_PACKAGES_LISTS=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])packages_lists=[-0-9a-z]+' | cut -f 2 -d '=' | head -n1) + LB_TASKS=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])tasks=[-0-9a-zA-Z. _]+' | cut -f 2 -d '=' | head -n1) + LB_PACKAGES=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])packages=[-0-9a-zA-Z. _]+' | cut -f 2 -d '=' | head -n1) + + # Advanced bootstrap options + LB_ARCHITECTURE=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])architecture=[0-9a-z]+' | cut -f 2 -d '=' | head -n1) + LB_BOOTSTRAP_FLAVOUR=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])bootstrap_flavour=[a-z]+' | cut -f 2 -d '=' | head -n1) + LB_MIRROR_BOOTSTRAP=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])mirror_bootstrap=[-0-9a-zA-Z.~:/_]+' | cut -f 2 -d '=' | head -n1) + LB_MIRROR_BINARY=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])mirror_binary=[-0-9a-zA-Z.~:/_]+' | cut -f 2 -d '=' | head -n1) + LB_MIRROR_BINARY_SECURITY=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])mirror_binary_security=[-0-9a-zA-Z.~:/_]+' | cut -f 2 -d '=' | head -n1) + LB_ARCHIVE_AREAS=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])archive_areas=[a-z]+' | cut -f 2 -d '=' | head -n1) + + # Advanced chroot options + LB_CHROOT_FILESYSTEM=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])chroot_filesystem=[0-9a-z]+' | cut -f 2 -d '=' | head -n1) + LB_LINUX_FLAVOURS=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])linux_flavours=[-0-9a-z]+' | cut -f 2 -d '=' | head -n1) + LB_SECURITY=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])security=[a-z]+' | cut -f 2 -d '=' | head -n1) + LB_SYMLINKS=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])symlinks=[a-z]+' | cut -f 2 -d '=' | head -n1) + LB_SYSVINIT=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])sysvinit=[a-z]+' | cut -f 2 -d '=' | head -n1) + + # Advanced binary options + LB_BINARY_INDICES=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])binary_indices=[a-z]+' | cut -f 2 -d '=' | head -n1) + LB_BOOTAPPEND_INSTALL=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])bootappend_install=[-0-9a-zA-Z. _+=:/]+' | cut -f2- -d '=' | head -n1) + LB_BOOTAPPEND_LIVE=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])bootappend_live=[-0-9a-zA-Z. _+=:/]+' | cut -f2- -d '=' | head -n1) + LB_BOOTLOADER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])bootloader=[a-z]+' | cut -f 2 -d '=' | head -n1) + LB_DEBIAN_INSTALLER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])debian_installer=[a-z]+' | cut -f 2 -d '=' | head -n1) + LB_ENCRYPTION=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])encryption=[0-9a-z]+' | cut -f 2 -d '=' | head -n1) + LB_ISO_APPLICATION=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])iso_application=[-0-9a-zA-Z. ~;:/_]+' | cut -f 2 -d '=' | head -n1) + LB_ISO_PREPARER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])iso_preparer=[-0-9a-zA-Z. ~;:/_]+' | cut -f 2 -d '=' | head -n1) + LB_ISO_PUBLISHER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])iso_publisher=[-0-9a-zA-Z. ~;:/_@]+' | cut -f 2 -d '=' | head -n1) + LB_ISO_VOLUME=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])iso_volume=[-0-9a-zA-Z. ~;:/_]+' | cut -f 2 -d '=' | head -n1) + LB_MEMTEST=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])memtest=[0-9a-z+]+' | cut -f 2 -d '=' | head -n1) + LB_NET_ROOT_PATH=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])net_path=[-0-9a-zA-Z._/]+' | cut -f 2 -d '=' | head -n1) + LB_NET_ROOT_SERVER=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])net_server=[0-9.]+' | cut -f 2 -d '=' | head -n1) + + # Advanced source options + LB_SOURCE=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])source=[a-z]+' | cut -f 2 -d '=' | head -n1) + LB_SOURCE_IMAGES=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])source_images=[a-z]+' | cut -f 2 -d '=' | head -n1) + + # Unofficial options + _CUSTOM_BOOTSTRAP=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])custom_bootstrap=[-0-9a-zA-Z.~:/_]+' | cut -f 2 -d '=' | head -n1) + _CUSTOM_BINARY=$(echo "${QUERY_STRING}" | grep -oE '(^|[?&])custom_binary=[-0-9a-zA-Z.~:/_]+' | cut -f 2 -d '=' | head -n1) + + # FIXME: filter invalid options + unset QUERY_STRING + + if [ -z "${_EMAIL}" ] + then + echo "<h2><div style='color: red;'>Error: No email address specified.</div></h2>" + + sed -e "s#LB_MIRROR_BOOTSTRAP#${LB_MIRROR_BOOTSTRAP}#" \ + -e "s#LB_MIRROR_BINARY_SECURITY#${LB_MIRROR_BINARY_SECURITY}#" \ + -e "s#LB_MIRROR_BINARY#${LB_MIRROR_BINARY}#" \ + -e "s/VERSION/${VERSION}/" \ + -e "s/DATE/`date +%Y%m%d-%H:%M`/" \ + "${_TEMPLATES}"/form.html + + exit + fi + + # Getting build identifier + _BUILD=$(date +%Y%m%d.%H%M%S.%N) + + #echo "${QUERY_STRING}" + # Sending html confirmation + # Note: On each string remember to use a delimeter that is not in the string. + sed -e "s/BUILD/${_BUILD}/g" \ + -e "s/EMAIL/${_EMAIL}/" \ + -e "s/LB_BINARY_IMAGES/${LB_BINARY_IMAGES}/" \ + -e "s/LB_DISTRIBUTION/${LB_DISTRIBUTION}/" \ + -e "s/LB_PACKAGES_LISTS/${LB_PACKAGES_LISTS}/" \ + -e "s/LB_TASKS/${LB_TASKS}/" \ + -e "s/LB_PACKAGES/${LB_PACKAGES}/" \ + -e "s/LB_ARCHITECTURE/${LB_ARCHITECTURE}/" \ + -e "s/LB_BOOTSTRAP_FLAVOUR/${LB_BOOTSTRAP_FLAVOUR}/" \ + -e "s#LB_MIRROR_BOOTSTRAP#${LB_MIRROR_BOOTSTRAP}#" \ + -e "s#LB_MIRROR_BINARY_SECURITY#${LB_MIRROR_BINARY_SECURITY}#" \ + -e "s#LB_MIRROR_BINARY#${LB_MIRROR_BINARY}#" \ + -e "s/LB_ARCHIVE_AREAS/${LB_ARCHIVE_AREAS}/" \ + -e "s/LB_CHROOT_FILESYSTEM/${LB_CHROOT_FILESYSTEM}/" \ + -e "s/LB_LINUX_FLAVOURS/${LB_LINUX_FLAVOURS}/" \ + -e "s/LB_SECURITY/${LB_SECURITY}/" \ + -e "s/LB_SYMLINKS/${LB_SYMLINKS}/" \ + -e "s/LB_SYSVINIT/${LB_SYSVINIT}/" \ + -e "s/LB_BINARY_INDICES/${LB_BINARY_INDICES}/" \ + -e "s#LB_BOOTAPPEND_INSTALL#${LB_BOOTAPPEND_INSTALL}#" \ + -e "s#LB_BOOTAPPEND_LIVE#${LB_BOOTAPPEND_LIVE}#" \ + -e "s/LB_BOOTLOADER/${LB_BOOTLOADER}/" \ + -e "s/LB_DEBIAN_INSTALLER/${LB_DEBIAN_INSTALLER}/" \ + -e "s/LB_ENCRYPTION/${LB_ENCRYPTION}/" \ + -e "s#LB_ISO_APPLICATION#${LB_ISO_APPLICATION}#" \ + -e "s#LB_ISO_PREPARER#${LB_ISO_PREPARER}#" \ + -e "s#LB_ISO_PUBLISHER#${LB_ISO_PUBLISHER}#" \ + -e "s#LB_ISO_VOLUME#${LB_ISO_VOLUME}#" \ + -e "s/LB_MEMTEST/${LB_MEMTEST}/" \ + -e "s#LB_NET_ROOT_PATH#${LB_NET_ROOT_PATH}#" \ + -e "s/LB_NET_ROOT_SERVER/${LB_NET_ROOT_SERVER}/" \ + -e "s#SERVER#${_SERVER}#g" \ + -e "s/LB_SOURCE_IMAGES/${LB_SOURCE_IMAGES}/" \ + -e "s/LB_SOURCE/${LB_SOURCE}/" \ + -e "s#CUSTOM_BOOTSTRAP#${_CUSTOM_BOOTSTRAP}#" \ + -e "s#CUSTOM_BINARY#${_CUSTOM_BINARY}#" \ + "${_TEMPLATES}"/build.html + + # Creating temporary directory + mkdir -p "${_TEMPDIR}" + +# Writing build file +cat > "${_TEMPDIR}"/"${_BUILD}".build << EOF +# live-build.cgi "${VERSION}" build file +# `date -R` + +_BUILD="${_BUILD}" +_EMAIL="${_EMAIL}" + +REMOTE_ADDR="${REMOTE_ADDR}" + +# Standard options +LB_BINARY_IMAGES="${LB_BINARY_IMAGES}" +LB_DISTRIBUTION="${LB_DISTRIBUTION}" +LB_PACKAGES_LISTS="${LB_PACKAGES_LISTS}" +LB_TASKS="${LB_TASKS}" +LB_PACKAGES="${LB_PACKAGES}" + +# Advanced bootstrap options +LB_ARCHITECTURE="${LB_ARCHITECTURE}" +LB_MIRROR_BOOTSTRAP="${LB_MIRROR_BOOTSTRAP}" +LB_MIRROR_BINARY_SECURITY="${LB_MIRROR_BINARY_SECURITY}" +LB_MIRROR_BINARY="${LB_MIRROR_BINARY}" +LB_ARCHIVE_AREAS="${LB_ARCHIVE_AREAS}" + +# Advanced chroot options +LB_CHROOT_FILESYSTEM="${LB_CHROOT_FILESYSTEM}" +LB_LINUX_FLAVOURS="${LB_LINUX_FLAVOURS}" +LB_SECURITY="${LB_SECURITY}" +LB_SYMLINKS="${LB_SYMLINKS}" +LB_SYSVINIT="${LB_SYSVINIT}" + +# Advanced binary options +LB_BINARY_INDICES="${LB_BINARY_INDICES}" +LB_BOOTAPPEND_INSTALL="${LB_BOOTAPPEND_INSTALL}" +LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE}" +LB_BOOTLOADER="${LB_BOOTLOADER}" +LB_DEBIAN_INSTALLER="${LB_DEBIAN_INSTALLER}" +LB_ENCRYPTION="${LB_ENCRYPTION}" +LB_ISO_APPLICATION="${LB_ISO_APPLICATION}" +LB_ISO_PREPARER="${LB_ISO_PREPARER}" +LB_ISO_PUBLISHER="${LB_ISO_PUBLISHER}" +LB_ISO_VOLUME="${LB_ISO_VOLUME}" +LB_MEMTEST="${LB_MEMTEST}" +LB_NET_ROOT_PATH="${LB_NET_ROOT_PATH}" +LB_NET_ROOT_SERVER="${LB_NET_ROOT_SERVER}" + +# Advanced source options +LB_SOURCE_IMAGES="${LB_SOURCE_IMAGES}" +LB_SOURCE="${LB_SOURCE}" + +# Unofficial options +_CUSTOM_BOOTSTRAP="${_CUSTOM_BOOTSTRAP}" +_CUSTOM_BINARY="${_CUSTOM_BINARY}" + +# Other +LB_REPOSITORIES="${LB_REPOSITORIES}" +EOF + + echo "$(date +%b\ %d\ %H:%M:%S) ${HOSTNAME} live-build.cgi: add web build (${_BUILD}) from ${REMOTE_ADDR}." >> /var/log/live + echo "$(date +%b\ %d\ %H:%M:%S) ${HOSTNAME} live-build.cgi: options ${_BUILD} |email ${_EMAIL}|binary_images ${LB_BINARY_IMAGES}|distribution ${LB_DISTRIBUTION}|packages_lists ${LB_PACKAGES_LISTS}|tasks ${LB_TASKS}|packages ${LB_PACKAGES}|architecture ${LB_ARCHITECTURE}|mirror_bootstrap_security ${LB_MIRROR_BOOTSTRAP}|mirror_bootstrap ${LB_MIRROR_BOOTSTRAP}|mirror_binary_security ${LB_MIRROR_BINARY_SECURITY}|mirror_binary ${LB_MIRROR_BINARY}|archive_areas ${LB_ARCHIVE_AREAS}|chroot_filesystem ${LB_CHROOT_FILESYSTEM}|linux_flavours ${LB_LINUX_FLAVOURS}|security ${LB_SECURITY}|symlinks ${LB_SYMLINKS}|sysvinit ${LB_SYSVINIT}|binary_indices ${LB_BINARY_INDICES}|bootappend_install ${LB_BOOTAPPEND_INSTALL}|bootappend_live ${LB_BOOTAPPEND_LIVE}|bootloader ${LB_BOOTLOADER}|debian_installer ${LB_DEBIAN_INSTALLER}|encryption ${LB_ENCRYPTION}|iso_application ${LB_ISO_APPLICATION}|iso_preparer ${LB_ISO_PREPARER}|iso_publisher ${LB_ISO_PUBLISHER}|iso_volume ${LB_ISO_VOLUME}|memtest ${LB_MEMTEST}|net_path ${LB_NET_ROOT_PATH}|net_server ${LB_NET_ROOT_SERVER}|source_images ${LB_SOURCE_IMAGES}|source ${LB_SOURCE}|custom_bootstrap ${_CUSTOM_BOOTSTRAP}|custom_binary ${_CUSTOM_BINARY}\n" >> /var/log/live +fi + +sed -e "s/VERSION/${VERSION}/" "${_TEMPLATES}"/footer.html |