AGENT_CONF=$CONFDIR/agent.conf DRWEB32_INI=$CONFDIR/drweb32.ini ICAPD_INI=$CONFDIR/drweb-icapd.ini DEFAULT_LICENSE_FILE=$PREFIX/drweb32.key KEY_SCRIPT_NAME=`basename $0` # $1 - config file # $2 - section name # $3 - key name DeleteAbsentLicenseFiles() { if [ ! -f "$1" ]; then echo "*** WARNING: $1 : No such file!" echo return 1 fi # Retrieve all license file names from config. files=`IniKeyValues $1 $2 $3` config=$1 config_new=`MakeTmpFile` cp -p -f $config $config_new # Iterate over them, check if they present, # don't include them into config copy if they aren't. for i in $files ; do if [ ! -f "$i" ]; then IniSectProc $config_new $2 "next if m|^\\s*$3\\s*=\\s*$i\\s*\$|;" fi done if diff $config $config_new >/dev/null; then true else echo echo "Some keys specified in $config are not found!" echo "These keys will be removed from the configuration file." AskUpdateConfig $config $config_new dont_ask fi } AddLicenseFile() { # Add what license_file=$1 # Add where config_file=$2 section_name=$3 key_name=$4 if [ ! -f "$config_file" ]; then return 1 fi config_file_new=`MakeTmpFile` cp -p -f $config_file $config_file_new # Retrieve all license file names from config. files=`IniKeyValues $config_file_new $section_name $key_name` # Iterate over them and diff them with the new license file. added_already= for i in $files ; do [ -f "$i" ] || continue diff "$i" "$license_file" 1>/dev/null && added_already=1 && break done # If not added yet, copy license file (if needed) and add it to the config. license_file_copy= if [ -z "$added_already" ]; then # Look if this key is in confdir already... keys_in_confdir=`ls $CONFDIR/drweb32-*.key 2>/dev/null` for i in $keys_in_confdir ; do if diff "$i" "$license_file" 1>/dev/null ; then license_file_copy=$i break fi done # ...Copy it if not. if [ -z "$license_file_copy" ]; then license_file_copy="$CONFDIR/drweb32-`env LANG=C date +%Y%m%d%H%M%S`.key" cp -p -f $license_file $license_file_copy fi if [ -n "$files" ]; then # There's some key in the section, add the new one before it. IniSectProc $config_file_new $section_name "if (/^\\s*$key_name\\s*=\\s*(.*)/) { print \"$key_name = $license_file_copy\n\"; last }" else # There are no keys in the section, add the first one. IniSectProc $config_file_new $section_name "if (!\$added) { \$_=\"# Added by Dr.Web's $KEY_SCRIPT_NAME\n$key_name = $license_file_copy\n\n\".\$_; \$added=1 }" fi echo echo "Adding $license_file_copy into [$section_name] of $config_file ." AskUpdateConfig $config_file $config_file_new dont_ask else echo echo "Already added to [$section_name] of $config_file ." fi } SetKey() { IsKeyValid && return # Ask user for path to the key. # while true ; do printf "Enter path to the Dr.Web license key file or '0' to skip: " read file echo [ -z "$file" ] && continue [ "$file" = "0" ] && break if [ -f "$file" ] ; then # Check the key. if IsKeyValid "$file" ; then true else echo "Wrong key!" echo continue fi # Check for clean install (default license file is absent on disk). if [ -f "$DEFAULT_LICENSE_FILE" ]; then # Try to add license file to all configs. AddLicenseFile "$file" $AGENT_CONF StandaloneMode LicenseFile AddLicenseFile "$file" $DRWEB32_INI Daemon Key AddLicenseFile "$file" $DRWEB32_INI Scanner Key if [ "$PRODUCT_NAME_SHORT" = "drweb-internet-gateways" ]; then # Try to add license file to $ICAPD_INI also. AddLicenseFile "$file" $ICAPD_INI Icapd Key fi # Delete entries of all keys which are absent on disk. DeleteAbsentLicenseFiles $AGENT_CONF StandaloneMode LicenseFile DeleteAbsentLicenseFiles $DRWEB32_INI Daemon Key DeleteAbsentLicenseFiles $DRWEB32_INI Scanner Key if [ "$PRODUCT_NAME_SHORT" = "drweb-internet-gateways" ]; then # Delete dead keys from $ICAPD_INI also. DeleteAbsentLicenseFiles $ICAPD_INI Icapd Key fi else # Add this license file under default name. cp -p -f "$file" $DEFAULT_LICENSE_FILE chmod 600 $DEFAULT_LICENSE_FILE chown drweb:drweb $DEFAULT_LICENSE_FILE fi break else echo "`eval_gettext \"Specified path to key file is invalid. Try again, please.\"`" fi done } IsKeyValid() { retval=0 if [ -n "$1" ] ; then license_file=$1 else license_file="$DEFAULT_LICENSE_FILE" fi if [ -f "$license_file" ] ; then if [ -x "$PREFIX/read_signed" ] ; then if $PREFIX/read_signed key "$license_file" ; then retval=0 else retval=1 fi fi else retval=1 fi return $retval }