#!/bin/sh #---------------------------------------------------------------------------- # /var/install/bin/apache2-config-modules-trac-delproject # # Creation: 2007-03-25 hb # Last Update: $Id$ # # Copyright (c) 2007-@@YEAR@@ Holger Bruenjes /tmp/delproject-trace$$.log #set -x # set echo line, for allways equal echo_line=" ----------------------------" # get version VERSION=3.4.0 # --------------------------------------------------------------------------- # update subversion configuration if necessary # --------------------------------------------------------------------------- update_config() { if ${modified:-false} then /var/install/config.d/trac.sh fi } # --------------------------------------------------------------------------- # remove MySQL database environment # --------------------------------------------------------------------------- remove_mysql_db_env() { _db_name="trac_$(echo ${project_dir} | tr '-' '_')" _db_host="localhost" _db_admin="tracuser" _db_server="MySQL" mysql_exec=/usr/bin/mysql if [ -z "${_server_admin_user}" -o -z "${_server_admin_user_passwd}" ] then get_admin_and_passwd ret=${?} if [ ${ret} -ne 0 ] then echo mecho --error "The '${_db_server}' server Admin or Passwd failed!" echo mecho --info "Delete the MySQL database '${_db_name}' manuell." echo _db_admin_check=false else _db_admin_check=true fi else _db_admin_check=true fi if ${_db_admin_check} then # drop database ${mysql_exec} \ -h${_db_host} \ -u${_server_admin_user} \ -p${_server_admin_user_passwd} \ -e "DROP DATABASE ${_db_name};" # delete user ${mysql_exec} \ -Dmysql \ -h${_db_host} \ -u${_server_admin_user} \ -p${_server_admin_user_passwd} \ -e "DELETE FROM db WHERE USER = '${_db_admin}' and DB = '${_db_name}';" fi } # --------------------------------------------------------------------------- # remove PostgreSQL database environment # --------------------------------------------------------------------------- remove_pgsql_db_env() { _db_name="trac_$(echo ${project_name} | tr '-' '_')" _db_admin="tracuser" _db_server="PostgreSQL" _db_host="localhost" pgsql_exec='/usr/bin/psql' # check db admin _pg_admin=$(echo "SELECT usename FROM pg_user;" | ${pgsql_exec} template1 postgres | grep 'postgres' 2>/dev/null) if [ -z "${_pg_admin}" ] then get_admin_and_passwd ret=${?} if [ ${ret} -ne 0 ] then echo mecho --error "The '${_db_server}' server Admin or Passwd failed!" echo _db_admin_check=false # rewrite Parameter from 'yes' to 'no' set_parameter_no "TRAC_PROJ_${idx}_NAME_ACTIVE" break else _db_admin_check=true fi _db_admin_check=true fi if ${_db_admin_check} then # drop database echo "DROP DATABASE '${_db_name}' ;" | ${pgsql_exec} \ -h${_db_host} \ -U${_pg_admin} # drop user echo "DROP ROLE '${_db_admn}';" | ${pgsql_exec} \ -h${_db_host} \ -U${_pg_admin} fi } # --------------------------------------------------------------------------- # Remove config entry $1 from disk and config # --------------------------------------------------------------------------- remove_project() { project_n=${1} case ${TRAC_SPEC_FOLDER} in no) trac_path=/var/lib/trac ;; *) trac_path=${TRAC_SPEC_FOLDER}/trac ;; esac idx1=${project_n} # remove from disk eval project_dir='${TRAC_PROJ_'${idx1}'_NAME}' rm -rf "${trac_path}/${project_dir}" eval db_name='${TRAC_PROJ_'${idx1}'_DATABASE}' if [ "${db_name}" != "sqlite" ] then remove_${db_name}_db_env fi # remove from config while [ ${idx1} -lt ${TRAC_PROJ_N:-0} ] do idx2=$((${idx1} + 1)) eval TRAC_PROJ_${idx1}_NAME='${TRAC_PROJ_'${idx2}'_NAME}' eval TRAC_PROJ_${idx1}_ACTIVE='${TRAC_PROJ_'${idx2}'_ACTIVE}' eval TRAC_PROJ_${idx1}_GRP_MEMBER='${TRAC_PROJ_'${idx2}'_GRP_MEMBER}' eval TRAC_PROJ_${idx1}_HOST='${TRAC_PROJ_'${idx2}'_HOST}' eval TRAC_PROJ_${idx1}_HOST_NAME='${TRAC_PROJ_'${idx2}'_HOST_NAME}' eval TRAC_PROJ_${idx1}_HOST_ALIAS='${TRAC_PROJ_'${idx2}'_HOST_ALIAS}' eval TRAC_PROJ_${idx1}_HOST_FORCE_SSL='${TRAC_PROJ_'${idx2}'_HOST_SSL}' eval TRAC_PROJ_${idx1}_AC_CONTROL='${TRAC_PROJ_'${idx2}'_AC_CONTROL}' eval TRAC_PROJ_${idx1}_AC_ALL='${TRAC_PROJ_'${idx2}'__AC_ALL}' eval TRAC_PROJ_${idx1}_AC_AUTH='${TRAC_PROJ_'${idx2}'__AC_AUTH}' eval TRAC_PROJ_${idx1}_AC_AUTH_SEND_MAIL_FROM='${TRAC_PROJ_'${idx2}'_AC_AUTH_SEND_MAIL_FROM}' eval TRAC_PROJ_${idx1}_AC_HOST='${TRAC_PROJ_'${idx2}'_AC_HOST}' eval TRAC_PROJ_${idx1}_AC_IP='${TRAC_PROJ_'${idx2}'_AC_IP}' eval TRAC_PROJ_${idx1}_AC_LOCAL='${TRAC_PROJ_'${idx2}'_AC_LOCAL}' eval TRAC_PROJ_${idx1}_ADMIN_USER='${TRAC_PROJ_'${idx2}'_ADMIN_USER}' eval TRAC_PROJ_${idx1}_REPO_TYPE='${TRAC_PROJ_'${idx2}'_REPO_TYPE}' eval TRAC_PROJ_${idx1}_REPO_PATH='${TRAC_PROJ_'${idx2}'_REPO_PATH}' eval TRAC_PROJ_${idx1}_DATABASE='${TRAC_PROJ_'${idx2}'_DATABASE}' eval TRAC_PROJ_${idx1}_SPEC_LOGO='${TRAC_PROJ_'${idx2}'_SPEC_LOGO}' eval TRAC_PROJ_${idx1}_SPEC_LOGO_ALT='${TRAC_PROJ_'${idx2}'_SPEC_LOGO_ALT}' eval TRAC_PROJ_${idx1}_SPEC_LOGO_HEIGHT='${TRAC_PROJ_'${idx2}'_SPEC_LOGO_HEIGHT}' eval TRAC_PROJ_${idx1}_SPEC_LOGO_LINK='${TRAC_PROJ_'${idx2}'_SPEC_LOGO_LINK}' eval TRAC_PROJ_${idx1}_SPEC_LOGO_SRC='${TRAC_PROJ_'${idx2}'_SPEC_LOGO_SRC}' eval TRAC_PROJ_${idx1}_SPEC_LOGO_WIDTH='${TRAC_PROJ_'${idx2}'_SPEC_LOGO_WIDTH}' idx1=${idx2} done # delete passwd file if [ -f ${trac_path}/${project_dir}.htpasswd ] then rm -f ${trac_path}/${project_dir}.htpasswd fi TRAC_PROJ_N=$((${TRAC_PROJ_N:-0} - 1)) } # --------------------------------------------------------------------------- # for MySQL # --------------------------------------------------------------------------- get_admin_and_passwd() { echo _ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "Please enter the '${_db_server}' Admin user:" "" "+" >${_ask_tmpfile} rc=${?} read a < ${_ask_tmpfile} ${RM} -f ${_ask_tmpfile} _server_admin_user=${a} # if ask break, ask returned 255 if [ ${rc} = 255 ] then _mysql_admin_user=false else _mysql_admin_user=true fi if ${_mysql_admin_user} then echo _ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "Please enter the '${_db_server}' Admin Passwd:" "" "+hidden+" >${_ask_tmpfile} rc=${?} read a < ${_ask_tmpfile} ${RM} -f ${_ask_tmpfile} echo _server_admin_user_passwd=${a} # if ask break, ask returned 255 if [ ${rc} = 255 ] then _mysql_admin_passwd=false else _mysql_admin_passwd=true fi fi if ${_mysql_admin_passwd} then # check for admin and passwd db_exists=$(${mysql_exec} \ -h${_db_host} \ -u${_server_admin_user} \ -p${_server_admin_user_passwd} \ --skip-column-names \ -e "SHOW DATABASES" 2>/dev/null | sed 's# #\n#g' | grep -c "^mysql$") ret=${?} if [ ${ret} -ne 0 ] then _db_server_admin=$((${_db_server_admin} + 1)) if [ ${_db_server_admin} -le 3 ] then echo mecho --error "The '${_db_server}' server Admin or Passwd failed!" echo get_admin_and_passwd else _mysql_admin_check=false fi else _mysql_admin_check=true fi else _mysql_admin_check=false fi } # --------------------------------------------------------------------------- # Rewrite config file # --------------------------------------------------------------------------- rewrite_config_file() { { # ----------------------------------------------------------------------- printgpl --conf trac '2007-03-22' 'hbfl' # ----------------------------------------------------------------------- echo "# trac-VERSION ${VERSION}" # ----------------------------------------------------------------------- printgroup 'Basic configuration' # ----------------------------------------------------------------------- printvar 'START_TRAC' printcomment 'Use: yes or no' echo printvar 'TRAC_PYTHON_MODUL' printcomment 'Use: mod_wsgi or mod_python' printvar 'TRAC_SPEC_FOLDER' printcomment 'path to folder, the last folder' printcomment "'trac' is given" # 0.9.0 # ----------------------------------------------------------------------- printgroup 'Project groups' # ----------------------------------------------------------------------- printvar 'TRAC_PROJ_GRP_N' printcomment 'Number of project groups' idx=1 while [ ${idx} -le ${TRAC_PROJ_GRP_N:-0} ] do printvar "TRAC_PROJ_GRP_${idx}_NAME" printcomment 'Name of project group' printvar "TRAC_PROJ_GRP_${idx}_ACTIVE" printcomment 'Use: yes or no' printvar "TRAC_PROJ_GRP_${idx}_HOST" printcomment 'Use: yes or no' printvar "TRAC_PROJ_GRP_${idx}_HOST_NAME" printcomment 'Hostname to contact project group' printvar "TRAC_PROJ_GRP_${idx}_HOST_ALIAS" printcomment 'Name to connect the service' printvar "TRAC_PROJ_GRP_${idx}_HOST_SSL" printcomment 'Use ssl -> https to connect the service' printvar "TRAC_PROJ_GRP_${idx}_AC_CONTROL" printcomment 'Use: yes or no, access control available' printvar "TRAC_PROJ_GRP_${idx}_AC_ALL" printcomment 'Use: yes or no, access for all over the world' printvar "TRAC_PROJ_GRP_${idx}_AC_AUTH" printcomment 'Use: yes or no, access with user and password' printvar "TRAC_PROJ_GRP_${idx}_AC_AUTH_SEND_MAIL_FROM" printcomment 'Use: empty, no mail or Mailadress from Admin,' printcomment 'required for outgoing mail' printvar "TRAC_PROJ_GRP_${idx}_AC_HOST" printcomment 'Use: hostname or domain,' printcomment 'multiple with space as separator' printvar "TRAC_PROJ_GRP_${idx}_AC_IP" printcomment 'Use: ip for your host or network,' printcomment 'multiple with space as separator' printvar "TRAC_PROJ_GRP_${idx}_AC_LOCAL" printcomment 'Use: yes or no, only local access' idx=$((${idx} + 1)) done echo # ----------------------------------------------------------------------- printgroup 'Projects' # ----------------------------------------------------------------------- printvar 'TRAC_PROJ_N' printcomment 'Number of projects' idx=1 while [ ${idx} -le ${TRAC_PROJ_N:-0} ] do echo printvar "TRAC_PROJ_${idx}_NAME" printcomment 'Name of project, like the same as in svn' printvar "TRAC_PROJ_${idx}_ACTIVE" printcomment 'Use: yes or no' printvar "TRAC_PROJ_${idx}_GRP_MEMBER" printcomment 'Use: no or name from project group' printvar "TRAC_PROJ_${idx}_HOST" printcomment 'Use: yes or no' printvar "TRAC_PROJ_${idx}_HOST_NAME" printcomment 'Hostname to contact project group' printvar "TRAC_PROJ_${idx}_HOST_ALIAS" printcomment 'Name to connect the service' printvar "TRAC_PROJ_${idx}_HOST_SSL" printcomment 'Use ssl -> https to connect the service' printvar "TRAC_PROJ_${idx}_AC_CONTROL" printcomment 'Use: yes or no, access control available' printvar "TRAC_PROJ_${idx}_AC_ALL" printcomment 'Use: yes or no, access for all over the world' printvar "TRAC_PROJ_${idx}_AC_AUTH" printcomment 'Use: yes or no, access with user and password' printvar "TRAC_PROJ_${idx}_AC_AUTH_SEND_MAIL_FROM" printcomment 'Use: empty, no mail or Mailadress from Admin,' printcomment 'required for outgoing mail' printvar "TRAC_PROJ_${idx}_AC_HOST" printcomment 'Use: hostname or domain,' printcomment 'multiple with space as separator' printvar "TRAC_PROJ_${idx}_AC_IP" printcomment 'Use: ip for your host or network,' printcomment 'multiple with space as separator' printvar "TRAC_PROJ_${idx}_AC_LOCAL" printcomment 'Use: yes or no, only local access' echo printvar "TRAC_PROJ_${idx}_ADMIN_USER" printcomment 'Name of admin user' printvar "TRAC_PROJ_${idx}_REPO_TYPE" printcomment 'only svn is given' printvar "TRAC_PROJ_${idx}_REPO_PATH" printcomment 'Path to SVN repo' printvar "TRAC_PROJ_${idx}_DATABASE" printcomment 'Use: pgsql or sqlite or mysql' printvar "TRAC_PROJ_${idx}_SPEC_LOGO" printcomment 'Use: yes or no = default is given' printvar "TRAC_PROJ_${idx}_SPEC_LOGO_ALT" printcomment 'Use: a alternativ name' printvar "TRAC_PROJ_${idx}_SPEC_LOGO_HEIGHT" printcomment 'height from logo' printvar "TRAC_PROJ_${idx}_SPEC_LOGO_LINK" printcomment 'http://your.domain you can change to' printvar "TRAC_PROJ_${idx}_SPEC_LOGO_SRC" printcomment 'name from logo file' printvar "TRAC_PROJ_${idx}_SPEC_LOGO_WIDTH" printcomment 'width from logo' idx=$((${idx} + 1)) done # ----------------------------------------------------------------------- printend # ----------------------------------------------------------------------- } > /etc/config.d/trac # Set rights chmod 0600 /etc/config.d/${package_name} chown root /etc/config.d/${package_name} } # --------------------------------------------------------------------------- # perform deletion # --------------------------------------------------------------------------- while true do clrhome if [ ${TRAC_PROJ_N} -eq 0 ] then echo mecho --error "Error: There are no projects defined on this server!" anykey update_config exit 1 fi echo mecho --info "Please select project to remove it" echo techo --begin '3 3r 2 32' techo --row '' --info No '' --info Project mecho "${echo_line}" idx=1 while [ ${idx} -le ${TRAC_PROJ_N:-0} ] do eval project_name='${TRAC_PROJ_'${idx}'_NAME}' techo --row '' "${idx}" '' "${project_name}" idx=$((${idx} + 1)) done mecho "${echo_line}" techo --end echo _ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "Select" "${del_project}" "1-${TRAC_PROJ_N}" "^$=Return" "0=Exit" >${_ask_tmpfile} rc=${?} read del_project < ${_ask_tmpfile} ${RM} -f ${_ask_tmpfile} if [ ${rc} = 255 ] then del_project=0 fi case ${del_project} in '') update_config exit 0 ;; 0) update_config exit 127 ;; esac eval project_name='${TRAC_PROJ_'${del_project}'_NAME}' echo mecho --warn "ALL DATA WILL BE LOST!" _ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "Do you really want to remove project '${project_name}'" "yes" >${_ask_tmpfile} rc=${?} read remove_action < ${_ask_tmpfile} ${RM} -f ${_ask_tmpfile} if [ ${rc} = 255 ] then remove_action=no fi case ${remove_action} in yes) mecho --info -n "deleting... " remove_project "${del_project}" rewrite_config_file mecho "done" modified=true ;; esac echo if [ ${TRAC_PROJ_N:-0} = '0' ] then mecho "No more projects left!" anykey update_config exit 0 fi _ask_tmpfile=$(${MKTEMP} -t XXXXXXXXXXXXX) ${ASK} "Delete one more projects" "no" >${_ask_tmpfile} rc=${?} read more_action < ${_ask_tmpfile} ${RM} -f ${_ask_tmpfile} if [ ${rc} = 255 ] then more_action=no fi case ${more_action} in no) update_config exit 0 #del_project='' ;; *) # update_config # exit 0 del_project='' ;; esac done exit 0 # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------