|  | #!/bin/bash | 
|  | # Copyright (C) 2000-2005 SWsoft. All rights reserved. | 
|  | # | 
|  | # This file may be distributed under the terms of the Q Public License | 
|  | # as defined by Trolltech AS of Norway and appearing in the file | 
|  | # LICENSE.QPL included in the packaging of this file. | 
|  | # | 
|  | # This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 
|  | # WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 
|  | # | 
|  |  | 
|  | # Set the sane umask | 
|  | umask 022 | 
|  |  | 
|  | # Error codes | 
|  | VZ_INVALID_PARAMETER_SYNTAX=20 | 
|  | VZ_FS_NO_DISK_SPACE=46 | 
|  | VZ_FS_BAD_TMPL=47 | 
|  | VZ_FS_NEW_VE_PRVT=48 | 
|  | VZ_CHANGEPASS=74 | 
|  | VZ_CANT_ADDIP=34 | 
|  | VZ_IP_INUSE=78 | 
|  |  | 
|  | # Prints error message and exits | 
|  | # Parameters: | 
|  | #   $1 - error message | 
|  | #   $2 - exit code | 
|  | # Example of usage: | 
|  | #   error "Fatal error" 1 | 
|  | function error() | 
|  | { | 
|  | # print errors to stdout too | 
|  | ERR=$? | 
|  | echo "$SELFNAME ERROR: $1" | 
|  | exit $2 | 
|  | } | 
|  |  | 
|  | # Puts line | 
|  | # NAME="value" | 
|  | # to config file. If NAME is found, line gets replaced, | 
|  | # otherwise it is added to the end of file. | 
|  | # Parameters: | 
|  | # $1 - config file | 
|  | # $2 - NAME | 
|  | # $3 - value | 
|  | function put_param() | 
|  | { | 
|  | local file="$1" | 
|  | local name="$2" | 
|  | local value="$3" | 
|  | local path | 
|  |  | 
|  | path=${file%/*} | 
|  | if [ ! -d "${path}" ]; then | 
|  | mkdir -p ${path} || error "Unable to create dir ${path}" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | if grep -E "^$name=.*" $file>/dev/null 2>&1; then | 
|  | /bin/cp -fp ${file} ${file}.$$ || error "Can't copy file $file" $VZ_FS_NO_DISK_SPACE | 
|  | /bin/sed -e "s|^$name=.*|$name=\"$value\"|" < ${file} > ${file}.$$ | 
|  | if [ $? -ne 0 ]; then | 
|  | rm -f ${file}.$$ 2>/dev/null | 
|  | error "Can't change file $file" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | mv -f ${file}.$$ ${file} | 
|  | else | 
|  | echo "$name=\"$value\"" >> $file || error "Can't change file $file" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | } | 
|  |  | 
|  | # Puts line | 
|  | # NAME value | 
|  | # to config file. If NAME is found, line gets replaced, | 
|  | # otherwise it is added to the end of file. | 
|  | # Parameters: | 
|  | # $1 - config file | 
|  | # $2 - NAME | 
|  | # $3 - value | 
|  | function put_param2() | 
|  | { | 
|  | local file="$1" | 
|  | local name="$2" | 
|  | local value="$3" | 
|  | local path; | 
|  |  | 
|  | path=${file%/*} | 
|  | if [ ! -d "${path}" ]; then | 
|  | mkdir -p ${path} || error "Unable to create dir ${path}" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | if grep -E "^\<$name\>" $file>/dev/null 2>&1; then | 
|  | /bin/cp -fp ${file} ${file}.$$ || error "Can't copy file $file" $VZ_FS_NO_DISK_SPACE | 
|  | /bin/sed -e "s|^\<$name\>.*|$name $value|" < ${file} > ${file}.$$ | 
|  | if [ $? -ne 0 ]; then | 
|  | rm -f ${file}.$$ 2>/dev/null | 
|  | error "Can't change file $file" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | mv -f ${file}.$$ ${file} | 
|  | else | 
|  | echo "$name $value" >> $file || error "Can't change file $file" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | } | 
|  |  | 
|  | # Puts line | 
|  | # NAME=( value ) | 
|  | # to config file. If NAME is found, line gets replaced, | 
|  | # otherwise it is added to the end of file. | 
|  | # Parameters: | 
|  | # $1 - config file | 
|  | # $2 - NAME | 
|  | # $3 - value | 
|  | function put_param3() { | 
|  | local file=$1 | 
|  | local name=$2 | 
|  | local value=$3 | 
|  | local path | 
|  |  | 
|  | path=${file%/*} | 
|  | if [ ! -d "${path}" ]; then | 
|  | mkdir -p ${path} || error "Unable to create dir ${path}" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | if grep -E "^$name=\(.*\)" $file>/dev/null 2>&1; then | 
|  | /bin/cp -fp ${file} ${file}.$$ || error "Can't copy file $file" $VZ_FS_NO_DISK_SPACE | 
|  | if [ -z "${value}" ]; then | 
|  | /bin/sed -e "s|^$name=\(.*\)|$name=\( \)|" < ${file} > ${file}.$$ | 
|  | else | 
|  | /bin/sed -e "s|^$name=\(.*\)|$name=\( \"$value\" \)|" < ${file} > ${file}.$$ | 
|  | fi | 
|  | if [ $? -ne 0 ]; then | 
|  | rm -f ${file}.$$ 2>/dev/null | 
|  | error "Can't change file $file" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | mv -f ${file}.$$ ${file} | 
|  | else | 
|  | echo "$name=( \"$value\" )" >> $file || error "Can't change file $file" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | } | 
|  |  | 
|  | # Adds value to array NAME | 
|  | # in config file. If NAME is found, value gets added, | 
|  | # otherwise it is added to the end of file. | 
|  | # Parameters: | 
|  | # $1 - config file | 
|  | # $2 - NAME | 
|  | # $3 - value | 
|  | function add_param3() { | 
|  | local file=$1 | 
|  | local name=$2 | 
|  | local value=$3 | 
|  | local path | 
|  |  | 
|  | path=${file%/*} | 
|  | if [ ! -d "${path}" ]; then | 
|  | mkdir -p ${path} || error "Unable to create dir ${path}" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | if grep -E "^$name=\(.*\)" $file>/dev/null 2>&1; then | 
|  | /bin/cp -fp ${file} ${file}.$$ || error "Can't copy file $file" $VZ_FS_NO_DISK_SPACE | 
|  | /bin/sed -r "s|^$name=\((.*)\)|$name=\( \1 \"$value\" \)|" < ${file} > ${file}.$$ | 
|  | if [ $? -ne 0 ]; then | 
|  | rm -f ${file}.$$ 2>/dev/null | 
|  | error "Can't change file $file" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | mv -f ${file}.$$ ${file} | 
|  | else | 
|  | echo "$name=( \"$value\" )" >> $file || error "Can't change file $file" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | } | 
|  |  | 
|  | # Removes value from array NAME | 
|  | # in config file. If NAME is found, value gets removed, | 
|  | # otherwise this is a noop function. | 
|  | # Parameters: | 
|  | # $1 - config file | 
|  | # $2 - NAME | 
|  | # $3 - value | 
|  | function del_param3() { | 
|  | local file=$1 | 
|  | local name=$2 | 
|  | local value=$3 | 
|  |  | 
|  | [ ! -f $file ] && return | 
|  |  | 
|  | if grep -E "^$name=\(.*\)" $file>/dev/null 2>&1; then | 
|  | /bin/cp -fp ${file} ${file}.$$ || error "Can't copy file $file" $VZ_FS_NO_DISK_SPACE | 
|  | /bin/sed -r "s|^($name=\( .*)\"$value\"(.* \))|\1\2|" < ${file} > ${file}.$$ | 
|  | if [ $? -ne 0 ]; then | 
|  | rm -f ${file}.$$ 2>/dev/null | 
|  | error "Can't change file $file" $VZ_FS_NO_DISK_SPACE | 
|  | fi | 
|  | mv -f ${file}.$$ ${file} | 
|  | else | 
|  | return | 
|  | fi | 
|  | } | 
|  |  |