!C99Shell v. 1.0 pre-release build #13!

Software: Apache/2.0.54 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.54 OpenSSL/0.9.7l DAV/2 FrontPage/5.0.2.2635 PHP/4.4.0 mod_gzip/2.0.26.1a 

uname -a: Linux snow.he.net 4.4.276-v2-mono-1 #1 SMP Wed Jul 21 11:21:17 PDT 2021 i686 

uid=99(nobody) gid=98(nobody) groups=98(nobody) 

Safe-mode: OFF (not secure)

/usr/local/frontpage/version5.0/   drwxr-xr-x
Free 318.36 GB of 458.09 GB (69.5%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     fp_install.sh (78.54 KB)      -r-xr-xr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/bin/sh
#
# Copyright 1998-2001 Microsoft Corporation -- All Rights Reserved.
#
# $Revision: 1.24 $
# $Date: 2003/02/27 22:07:46 $

#

#
# This is the main part of the shell script.
#
main() {
    initialize
    step1                               # setup environment
    step2                               # untar
    $FPDIR/set_default_perms.sh         # Run the external permissions script.
    step3                               # upgrade/install
    
    echo 
    echo "Installation completed!  Exiting..." 
    
    exit 0
}

# main install steps
step1()
{
    echo 
    echo "Step 1.  Setting Up Installation Environment" 
    echo 
    
    checkuser      || error        # Check to make sure we are root
    banner         || error        # Display header/copyright info
    usrlocalexists || error        # Check to make sure that /usr/local exists
    checkforaccess || error        # Check for RWX access to /usr/local
    wheretoinstall || error        # Find out where to install the extensions
}

step2()
{
    echo 
    echo "Step 2.  Untarring the Extensions and Checking Protections" 
    echo 
    
    untarext       || error        # Untar the extensions
}

step3()
{
    echo 
    echo "Step 3.  Upgrading/Installing the extensions" 
    echo 
    
    getapachevers           || error   # Find out which version of Apache
    migrateoldconfig        || error   # Migrate old frontpage.cnf (if any)
    change_server           || error   # upgrade httpd
    not_stub_apache         || error   # Check if we're debugging this script
    upgradeexistingservers  || error   # Check to see if servers need upgrading
    upgrade="yes"
    chownexistingservers    || error   # Now chown the webs
    handlelanguage          || error   # configure some global settings
    installrootweb          || error   # Install the root web
    installnewsubwebs $PORT || error   # Install new servers
    installvirtualwebs      || error   # Install any virtual webs
}

################################################################################
# basic utility functions
#

myprompt()
{
    answer="|"
    until echo $1 | grep $answer >/dev/null
    do
        $echo "${2} [${3}]?  ${nnl}" 
        read answer
        if [ "$3" != "" ] && [ "$answer" = "" ]
        then
            answer=$3
        fi
    done
}

getpassword()
{
    prompt=$1
    PASSWORD=""
    until [ "$PASSWORD" != "" ]
    do
        $echo "$prompt:  ${nnl}" 
        stty -echo
        read password1
        stty echo
        echo
        $echo "Re-enter $prompt:  ${nnl}" 
        stty -echo
        read password2
        stty echo
        echo 
        if [ "$password1" = "$password2" ]
        then
            PASSWORD=$password1
        fi
    done
    
    return 1
}

getHomedir()
{
    user=$1
    shell=`egrep "csh|ksh|bash" /etc/shells | head -1`
    homedir=`$shell -f -c 'echo ~'$user`
}

# Print an error message and exit the program.
error()
{
    echo 
    echo "Exiting due to an error!  Please fix the error and try again." 
    echo 
    
    exit 1
}

# Print a useful error message and exit the program.
die() {
    echo "Aborting, could not successfully $*"
    exit 1
}

die1() {
    echo "$*"
    exit 1
}

initialize()
{
    VERSION="5.0"
    OLDPATH=$PATH
    PATH=".:/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb:/etc:/usr/bsd"
    INSTALLDIRDEFAULT="/usr/local/frontpage"
    NEWHTTPDNEW="/usr/local/frontpage/version${VERSION}/apache-fp/httpd"
    NEWMODFPSO1="/usr/local/frontpage/version${VERSION}/apache-fp/mod_frontpage.c"
    NEWMOFPSO2="/usr/local/frontpage/version${VERSION}/apache2/mod_frontpage.c"
    DEFAULTHTTPD="/usr/local/apache/sbin/httpd"
    FPDIR="/usr/local/frontpage/version${VERSION}"
    APACHE_2_0_VERSION="2.0.40"

    case "`echo 'x\c'`" in
       'x\c')   echo="echo -n"    nnl= ;;      #BSD
       x)       echo="echo"       nnl="\c" ;;  # Sys V
       *)       echo "$0 quitting:  Can't set up echo." ; exit 1 ;;
    esac
    
    TAB="	"
    system=`uname -a`
    
    case "$system" in
        OSF1*)              machine="alpha" ;;
        Linux*)             machine="linux" ;;
        HP-UX*)             machine="hp700" ;;
        AIX*)               machine="rs6000" ;;
        IRIX*)              machine="sgi" ;;
        SunOS*5.*sun4*)     machine="solaris" ;;
        SunOS*5.*i386*)     machine="solarisx86" ;;
        BSD/OS*)            machine="bsdi" ;;
        FreeBSD*)           machine="freebsd" ;;
        *)              echo "ERROR:  Unsupported platform!  Uname is $system."
                        return 1
                         ;;
    esac

    case "$machine" in 
        sunos) functions="function toupper(CHAR) {
                        UPPER = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";
                        LOWER = \"abcdefghijklmnopqrstuvwxyz\";
                        if (POS = index(LOWER,CHAR))
                            RETVAL = substr(UPPER,POS,1);
                        else 
                            RETVAL = CHAR;
                        
                        return RETVAL 
                     }
                     
                     function tolower(CHAR) {
                        UPPER = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";
                        LOWER = \"abcdefghijklmnopqrstuvwxyz\";
                        if (POS = index(UPPER,CHAR))
                            RETVAL = substr(LOWER,POS,1);
                        else 
                            RETVAL = CHAR;
                        
                        return RETVAL 
                     }"
            ;;
         *) functions="" 
            ;;
    esac

    awk=nawk
    lsg="ls -ld"
    psea="ps -ea"
    fgrep=fgrep
    strings=cat 
    
    case "$machine" in
         alpha) strings="strings -a"
                ;;
          bsdi) awk=awk
                ;;
       freebsd) awk=awk
                strings="strings -a"
                ;;
         hp700) awk=awk
                ;;
         linux) awk=awk
                psea="ps ea"
                strings="strings -a"
                ;;
        rs6000) strings="strings -a"
                ;;
           sgi) awk=nawk 
                lsg="ls -ld"
                ;;
       solaris) awk=nawk
                lsg="ls -ld"
                strings="strings -a"
                ;;
    solarisx86) awk=nawk
                lsg="ls -ld"
                ;;
             *)
                ;;
    esac
}

# Compare two version numbers, including all sub-versions (such as 5.0.2.1234)
# The result is stored in the third argument, which must be a name suitable
# for a shell environment variable.  This variable will be set to a string,
# either GT, EQ, or LT, as appropriate.
compareVersions()
{
    Version1=$1
    Version2=$2
    RetName=$3
    eval ${RetName}=`(echo $Version1 ; echo $Version2) | $awk -F . '
            {if (NR==1) {A=$1;B=$2;C=$3;D=$4; next}}
            {if ((A > $1) ||
                ((A == $1) && ((B > $2) ||
                ((B == $2) && ((C > $3) ||
                ((C == $3) && (D > $4))))))) {print "GT";next}}
            {if ((A == $1) && (B == $2) && 
                 (C == $3) && (D == $4)) {print "EQ";next}}
            {print "LT"}'`
}

################################################################################
# Step 1: Setup/Verify Environment
#

banner()
{
cat <<EOF

 fp_install.sh
 
 Revision$Revision: 1.24 $dummy
 Date$Date: 2003/02/27 22:07:46 $dummy
 
This script will step the user through upgrading existing and installing 
new servers and webs.  As with any software installation, a backup should be
done before continuing.  It is recommended that the FrontPage installation
directory, server configuration file directory, and all web content be 
backed up before continuing with this installation.
 
EOF

   myprompt 'yYnN' "Are you satisfied with your backup of the system (y/n)" "N"
   if [ $answer = n ] || [ $answer = N ]
   then
      exit 0
   fi
   echo
   
   return 0
}

#
# The following functions do some initial checks that we are who we need to be
# and have the directories and permissions on the directories that we need
#
checkuser()
{
    # Make sure we are running as root.
    
    whoami=`whoami 2>/dev/null` || whoami=`/usr/bin/id | sed -e ' s/).*//; s/^.*(//;'`
    retval=0
    
    echo "Setting umask 002" 
    umask 002
    
    if [ $whoami != "root" ]
    then
        echo "ERROR:  Logged in as $whoami.  Must be root to do this installation!"
        retval=1
    else
        echo "Logged in as root." 
    fi
    
    return $retval
}

usrlocalexists()
{
    # Now lets make sure that /usr/local exists.
    
    localdir="/usr/local"
    prot=755
    retval=0
    
    if [ ! -d "$localdir" ]
    then
        myprompt 'yYnN' "$localdir does not exist.  Would you like to create it (y/n)" "Y"
        if [ $answer = y ] || [ $answer = Y ]
        then
            echo "Creating $localdir" 
            if mkdir "$localdir"
            then
                echo "Directory $localdir has been created." 
                if chmod "$prot" "$localdir"
                then
                    echo "Directory $localdir chmoded to $prot." 
                else
                    echo "ERROR:  Unable to chmod $localdir to $prot." 
                    retval=1
                fi
            else
                echo "ERROR:  Unable to create $localdir!" 
                retval=1
            fi
        else
            echo "ERROR:  Directory $localdir must exist!" 
            retval=1
        fi
    else
        if [ ! -d "$localdir" ]
        then
            echo "ERROR:  $localdir exists but is not a directory!" 
            retval=1
        else
            echo "Directory $localdir exists." 
        fi
    fi
    
    return $retval
}

checkforaccess()
{
    # Make sure that we have the correct access to /usr/local
    
    retval=0
    
    # Check to make sure that we have read access to the directory
    comma=""
    if [ ! -r /usr/local ]
    then
        noaccess="Read"
        comma=", "
    fi
    
    # Check to make sure that we have write access to the directory
    if [ ! -w /usr/local ]
    then
        noaccess="$noaccess${comma}Write"
        comma=", "
    fi
    
    # Check to make sure that we have execute access to the directory
    if [ ! -x /usr/local ]
    then
        noaccess="$noaccess${comma}Execute"
    fi
    
    if  [ "$noaccess" != "" ]
    then
        echo "ERROR:  Root does not have $noaccess access to /usr/local!" 
        retval=1
    else
        echo "Root has necessary access to /usr/local." 
    fi
    
    return $retval
}

#
# Find out where to install the extensions and create directory and/or link
# as necessary.
#
wheretoinstall()
{
    retval=0
    
    cat <<EOF

Where would you like to install the FrontPage Server Extensions.  If
you select a location other than /usr/local/frontpage/ then a symbolic
link will be created from /usr/local/frontpage/ to the location that
is chosen.

EOF
    $echo "FrontPage Server Extensions directory [/usr/local/frontpage/]:  ${nnl}"
    read installdir
    
    if [ "$installdir" = "" ]
    then
        installdir=$INSTALLDIRDEFAULT
    fi
    # Normalize the name
    installdir=`dirname $installdir`/`basename $installdir`

    if [ ! -d "$installdir" ]
    then
        echo "Creating $installdir" 
        if mkdir "$installdir"
        then
            echo "Directory $installdir has been created." 
            if chmod "$prot" "$installdir"
            then
                echo "Directory $installdir chmoded to $prot." 
            else
                echo "ERROR:  Unable to chmod $installdir to $prot." 
                retval=1
            fi
        else
            echo "ERROR:  Unable to create $installdir!" 
            retval=1
        fi
    else
        echo "WARNING:  Directory $installdir already exists." 
        echo "Installation will overwrite existing files." 
        echo 
        
        myprompt 'yYnN' "Continue the installation (y/n)" "N"
        echo 
        if [ $answer = n ] || [ $answer = N ]
        then
            exit 0
        fi
    fi
    
    if [ "$installdir" != "/usr/local/frontpage" ]
    then
        if [ ! -d "/usr/local/frontpage" ]
        then
            if ln -s "$installdir" "/usr/local/frontpage"
            then
                echo "Snapped link /usr/local/frontpage --> $installdir"
            else
                echo "ERROR:  Unable to  snap link /usr/local/frontpage --> $installdir!" 
                retval=1
            fi
        else
            echo "ERROR:  Unable to snap link /usr/local/frontpage --> $installdir, /usr/local/frontpage already exists!" 
            retval=1
        fi
    fi
    
    return $retval 
}

#
# Find out if this is an Apache 1.3 or Apache 2.0 installation
#
getapachevers()
{
    $echo "Which version of Apache will you be using? (1.3 or 2.0) ${nnl}"
    read ApacheVers
    while [ "$ApacheVers" != "1.3" -a "$ApacheVers" != "2.0" ]
    do
      $echo "Please enter either '1.3' or '2.0'"
      $echo "Which version of Apache will you be using? (1.3 or 2.0) ${nnl}"
      read ApacheVers
    done

    if [ "$ApacheVers" = "1.3" ]
    then
        promptstring="Where is the current apache daemon located: [$HttpdFile] ${nnl}"
    else
        promptstring="Where is the current apache control file (apachectl) located: [$HttpdFile] ${nnl}"
    fi
       
    echo
    HttpdFile=""
    while ( [ "$HttpdFile" = "" ] || [ ! -x $HttpdFile ] )
    do
        HttpdFile=$DEFAULTHTTPD
        $echo $promptstring
        read location
        if [ "$location" != "" ]
        then
	    HttpdFile=$location
        fi

	#
	# We don't change the 1.3 behavior, but 2.0 requires apachectl, so
	# we double check
	if [ "$ApacheVers" = "2.0" -a `basename $HttpdFile` != "apachectl" ]
	then
	    echo "Warning: The Apache control file you entered is not named 'apachectl'"
	    myprompt 'yYnN' "Are you sure this is correct? (y/n)" "Y"

	    if [ "$answer" != "y" -a "$answer" != "Y" ]
	    then
		# Reset it
		HttpdFile=""
	    fi
	fi

	if [ "$ApacheVers" = "1.3"  ]
	then
	   if [ ! -x "$HttpdFile" -o ! -f "$HttpdFile" ]
	   then
	    HttpdFile=""
	   fi
	fi

    done
    if [ "$ApacheVers" = "1.3" ] 
    then
        getapachevers1
    else
	getapachevers2
    fi
}

getapachevers1()
{
    # Get the installed Apache Version
    installedApacheVers=`$HttpdFile -v | sed 's%^.*Apache/\([0-9\.]*\).*%\1%' | head -1`

    echo "Currently running Apache/${installedApacheVers}"
}

getapachevers2()
{
    installedApacheVers=`$HttpdFile -v  start | sed 's%^.*Apache/\([0-9\.]*\).*%\1%' | head -1`
    echo "Currently running Apache/${installedApacheVers}"
}

###############################################################################
#
# Step 2: Untar the extensions into the installation directory and check
#         permissions
#
untarext()
{
    retval=0
    
    if [ -d "${installdir}/version${VERSION}" ]
    then
        echo "Version $VERSION FrontPage Server Extensions found."
        myprompt 'yYnN' "Would you like to overwrite? (y/n)" "Y"
        echo 
        if [ $answer = n ] || [ $answer = N ]
        then
            echo "No need to un-tar the extensions.  Continuing..."
            return $retval
        else
            echo "Looking for tar file..."
        fi
    else
        echo "Version $VERSION FrontPage Server Extensions not found."
        echo "Looking for tar file..."
    fi
    
    vtfile="fp50.$machine.tar"
    echo "Platform is $machine." 
    
    vtfilelocation="`pwd`/"
    
    getextfilename $vtfilelocation $vtfile || return 1
    
    olddir=`pwd`

    if [ "$installdir" != "/usr/local/frontpage" ]
    then
        cd $installdir
    else
        cd /usr/local
    fi
    case $fullvtfile in 
     *tar) echo "Untarring file $fullvtfile into /usr/local..." 
           tar -xf $fullvtfile ;;
       *Z) echo "Uncompressing/Untarring file $fullvtfile into /usr/local..."
           zcat $fullvtfile | tar -xf - 
           ;;
      *gz) zcat=""
           while [ "$zcat" = "" ] || [ ! -f "$zcat" ]
           do
               $echo "Where is the zcat which can uncompress gz files? ${nnl}"
               read zcat
               base=`basename zcat`
               case $base in
                  zcat) ;; 
                     *) zcat=`dirname $zcat`/`basename $zcat`/zcat ;;
               esac
           done
           echo "Uncompressing/Untarring file $fullvtfile into /usr/local..."
           $zcat $fullvtfile | tar -xf -
           ;;
        *) echo "ERROR:  Unknown file type: $fullvtfile"
           return 1
           ;;
    esac
    
    if [ "$installdir" != "/usr/local/frontpage" ]
    then
        mv frontpage/* .
        rm -rf frontpage
    fi
    
    cd $olddir
    
    return $retval
}

# get the name of the tarball file
# used by untarext
getextfilename()
{
    vtfilelocation=$1
    vtfile=$2
    fullvtfile="${vtfilelocation}${vtfile}"
    if [ ! -f "$fullvtfile" ]
    then
        if [ -f "${fullvtfile}.Z" ]
        then
            fullvtfile="${fullvtfile}.Z"       
        else
            if [ -f "${fullvtfile}.gz" ]
            then
                fullvtfile="${fullvtfile}.gz"
            else
                if [ -f "${fullvtfile}.z" ]
                then
                    echo "Renaming ${vtfile}.z to ${vtfile}.Z"
                    mv "${fullvtfile}.z" "${fullvtfile}.Z"
                    fullvtfile="${fullvtfile}.Z"
                else
                    echo "Cannot find the FrontPage Server Extensions tar file in ${vtfilelocation}." 
                    $echo "Which directory is the file located in (X to cancel)?  ${nnl}" 
                    read vtfilelocation
                    if [ "$vtfilelocation" = "X" ] || [ "$vtfilelocation" = "x" ]
                    then
                        return 1
                    else
                        vtfilelocation=`echo $vtfilelocation |sed -e 's/\/$//'`
                        
                        if [ ! -d "$vtfilelocation" ]
                        then
                            vtfilelocation=`dirname $vtfilelocation`
                        fi
                        getextfilename $vtfilelocation/ $vtfile
                    fi
                fi
            fi
        fi
    fi
}

###############################################################################
#
# Step 3: Upgrade/Install extensions
#

#
# Look for older versions of frontpage.cnf, and migrate them into the current
#
migrateoldconfig()
{
    retval=0
    
    echo "Checking for previous versions of FrontPage Server Extensions to upgrade..." 
    
    upgrade=""
    for file in ${installdir}/version*/frontpage.cnf
    do
        if [ $file != ${installdir}/version${VERSION}/frontpage.cnf ]
        then
            upgrade="$upgrade $file"
        fi
    done
    
    if [ "$upgrade" != "" ]
    then
        upgrade=`echo $upgrade | sed -e 's/.*version//g' -e 's/\/frontpage\.cnf//g'`
        echo "You have an older version of FrontPage Server Extensions installed ($upgrade).";
        myprompt 'yYnN' "Would you like to migrate these settings to version $VERSION now (y/n)" "Y"
        
        if [ $answer = n ] || [ $answer = N ] ; then
            upgrade=""
	    retval=1
            return $retval;
        fi
    else
        echo "You have no previous versions of FrontPage Server Extensions installed."
        echo "There are no settings to migrate!"
        return $retval;
    fi
    echo
    
    for ver in $upgrade ; do
        mergefiles ${installdir}/version${ver}/frontpage.cnf $FPDIR/frontpage.cnf $FPDIR/frontpage.cnf
    done

    # mergefiles mucks w/ owner/group/mode, so we must reset them here
    chown bin $FPDIR/frontpage.cnf || die chown frontpage.cnf
    chgrp bin $FPDIR/frontpage.cnf || die chgrp frontpage.cnf
    chmod 664 $FPDIR/frontpage.cnf || die chmod frontpage.cnf
    
    return $retval
}

# keys in "in1" replace keys in "in2".  keys in only one file are maintained
mergefiles()
{
    in1=$1
    in2=$2
    out=$3
    outreal=$out
    if [ $out = $in1 -o $out = $in2 ]
    then
        out=${outreal}.new
    fi
    
    cat $in1 > $out
    for key in `sed -e 's/:.*//g' $in2` ; do
        if [ `grep -i -c "^$key:" $in1` = 0 ]
        then
            grep -i "^$key:" $in2 >> $out
        fi
    done
    
    if [ $out != $outreal ]
    then
        mv -f $out $outreal
    fi
}

# Are we running against a test stub Apache?  We only do that to facilitate
# QA of the change_server code.
not_stub_apache() {
    #First check for a test stub Apache.  We use the test stub to 
    #test the fp_install.sh code
    isStubApache=""
    if [ "$ApacheVers" = "1.3" ] 
    then
      isStubApache=`$HttpdFile -v | grep "FrontPage Test Stub Apache Server"`
    else
      isStubApache=`$HttpdFile -v start | grep "FrontPage Test Stub Apache Server"`
    fi
    if [ -n "$isStubApache" ]
    then
      echo "Found stub Apache used for testing the first part of the install"
      echo "Exiting test run after change_server processing."
      exit
    fi
}

# Check to see if servers need upgrading
upgradeexistingservers()
{
    retval=0
    
    echo "Checking for existing FrontPage web servers to upgrade..." 
    
    upgrade="none"
    for file in ${installdir}/*.cnf
    do
        if [ "$file" = "${installdir}/*.cnf" ]
        then
            echo "No existing FrontPage web servers found to upgrade." 
            return $retval
        fi
        
        cat <<EOF
 
Existing web servers were found; do you want to upgrade them now?
(If you answer "no", you can safely run this script again and answer "yes"
to upgrade your servers later.)

EOF
        myprompt 'yYnN' "Upgrade now (y/n)" "Y"
        
        if [ $answer = n ] || [ $answer = N ]
        then
            upgrade="no"
            echo "For details on how to upgrade servers manually, please see" 
            echo "the Server Extension Resource Kit (SERK), located at"
            echo "http://www.microsoft.com/frontpage"
            echo
            return $retval
        else
            upgrade="yes"
        fi
        break
    done

    cat <<EOF
 
The file ${installdir}/version${VERSION}/upgrade_results.txt will
contain Success/Fail status for the upgrades.  When the upgrade is
complete you should examine this file to make sure that all of the
upgrades completed successfully.

EOF
    $echo "Hit enter to continue${nnl}" 
    read continue
    echo
    
    echo "All existing servers will now be upgraded:" 
    echo " " 
    
    createdate=`date`
    cat >${installdir}/version${VERSION}/upgrade_results.txt <<EOF 
#
# Server Upgrade Results
#
# Automatically generated by fp_install.sh on $createdate
#
EOF
    
    for weconfigfile in ${installdir}/*.cnf
    do
        echo 
        echo "Upgrading using configuration file:  "$weconfigfile 
        if verifywebserver $weconfigfile
        then
            if upgradeserver $weconfigfile
            then
                echo "Upgrade Successful  $weconfigfile" >> ${FPDIR}/upgrade_results.txt
            else
                echo "Upgrade Failed      $weconfigfile" >> ${FPDIR}/upgrade_results.txt
                echo "ERROR:  Server upgrade failed!"
                echo "Continuing with next server." 
                $echo "Hit enter to continue${nnl}" 
                read continue
            fi
        else
            echo "Cancelling upgrade..."
            echo "Upgrade Failed      $weconfigfile" >> ${FPDIR}/upgrade_results.txt
        fi
    done
    
    weconfigfile=""
    
    return $retval
}

# examine weX.cnf file, make sure it is a patched apache server
verifywebserver()
{
    weconfigfile="$1"
    
    conf=`basename $weconfigfile`
    webport=`echo  $conf | sed -e '
        s/:/:/
        tmulti
        s/.cnf$//
        s/.*[^0-9]//
        q
        :multi
        s/.cnf$//'`
    
    port=$webport
    
    echo "Verifying web server configuration..."
    
    configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
                    s/serverconfig://g
                    s/fakeconf.*\///'`
    if [ ! -f "$configfile" ]
    then
        echo "$configfile does not exist."
        return 1
    fi

    servertype=`grep -i "^servertype:" $weconfigfile | sed -e 's/servertype://g'`
    configfiledir=`dirname $configfile`"/"

    if [ $servertype != "apache-fp" ]
    then
        echo "This version of FrontPage Server Extensions does not suppport"
        echo "$servertype servers.  We only support patched apache servers."
        echo "For more information about supported servers, please see" 
        echo "the Server Extension Resource Kit (SERK), located at"
        echo "http://www.microsoft.com/frontpage"
        return 1
    fi

    getdocroot $weconfigfile ||
    {
        echo "ERROR:  Unable to get DocumentRoot/UserDir" 
        return 1
    }

    getHttpDirective $configfile AccessConfig $port
    if [ "$param" != "" ]
    then
        case $param in
            /dev/null) accessconffile=$configfile
                ;;
            /*) accessconffile=$param  # fully qualified pathname
                ;;
            *)  file=`basename $param`
                accessconffile="${configfiledir}${file}"
                ;;
        esac
    else
        accessconffile="${configfiledir}access.conf"
        if [ ! -f $accessconffile ]
        then
            accessconffile=$configfile
        fi
    fi
    if [ "$accessconffile" != "" -a "$accessconffile" != "/dev/null" -a ! -f "$accessconffile" ]
    then
        echo "$accessconffile does not exist."
        return 1
    fi

    servicesfile=${docroot}"/_vti_pvt/services.cnf"
    
    if [ ! -f "$servicesfile" ]
    then
        echo "There are no services to upgrade for this web."
        return 1
    fi
    
    return 0
}

# Go through all webs on all servers and chown the content appropriately
chownexistingservers()
{
    retval=0
    
    if [ "$upgrade" = "yes" ]
    then
        echo
        echo "Preparing to chown webs..." 
        cat <<EOF

All requested upgrades to the new FrontPage Server Extensions have taken place.
The next step is to chown the web in order to guarantee that the extensions
will work properly.  At this point you have two options:

   1. This script will prompt you interactively for an owner and group of
      each web and then perform the chown.  If you do not have a lot of 
      webs you might want to choose this option.
      
   2. This script will generate a script, which you can edit to fill in the
      owner and group for each web, to run at a later date.  If you have a
      large number of webs you might want to choose this option.
      
EOF
        myprompt 'yYnNsS' "Would you like interactive prompting for each webs owner/group (y/n)" "Y"
        if [ $answer = s ] || [ $answer = S ]
        then
            return $retval
        fi
        if [ $answer = y ] || [ $answer = Y ]
        then
            chownwebs 
        else
            generatechownscript $file  ||
            (
                echo "ERROR: Server chown failed! Continuing with next server."
                $echo "Hit enter to continue${nnl}" 
                read continue
            )
        fi
        return $retval
    fi
}

# Go through all webs on a given server and chown the content appropriately
chownwebs()
{
    retval=0
    
    for weconfigfile in ${installdir}/*.cnf
    do
        if grep Failed ${installdir}/version${VERSION}/upgrade_results.txt | grep ${weconfigfile} > /dev/null
        then
            echo
            echo "Upgrade of ${weconfigfile} failed."
            echo "See ${installdir}/version${VERSION}/upgrade_results.txt" 
            echo "Skipping chown..."
        else
            servertype=`grep -i "^servertype:" $weconfigfile|sed -e 's/servertype://g'`
            if [ "$servertype" != "apache-fp" ]
            then
                echo "Skipping non patched-apache web $weconfigfile"
            else
                chownWeb $weconfigfile
            fi
        fi
    done
    weconfigfile=""
    return $retval
}

# chown the content of a given web/subweb
chownWeb()
{
    weconfigfile=$1
    
    conf=`basename $weconfigfile`
    webport=`echo  $conf | sed -e '
        s/:/:/
        tmulti
        s/.cnf$//
        s/.*[^0-9]//
        q
        :multi
        s/.cnf$//'`
    
    port=$webport
    
    echo 
    echo "Processing webs in port $webport..."
    echo 
    
    configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
                    s/serverconfig://g
                    s/fakeconf.*\///'`
    configfiledir=`dirname $configfile`"/"
    
    getdocroot $weconfigfile ||
    {
        echo "ERROR:  Unable to get DocumentRoot/UserDir"
        return 1
    }
    
    servicesfile=${docroot}"/_vti_pvt/services.cnf"
    
    # map our $servicesfile to STDIN so we can use "read" on it...
    exec 4<&0
    exec <$servicesfile
    n=0
    while read service
    do
        echo
        if [ $service = "/" ]
        then
            webname=""
            webtext="root web"
            web=""
        else
            webname="$service"
            webtext="$service"
            web="-w $webname"
        fi
        exec 5<&0
        exec 0<&4
        
        getdocroot $weconfigfile ||
        {
            echo "ERROR:  Unable to get DocumentRoot/UserDir"
            return 1
        }

        # Figure out who owns (or should own) this web.  Prompt if we can't
        # figure it out ourselves.
        case $service in
           /~*) owner=`echo $service | sed -e 's/\///'`
                webowner=`echo $service | sed -e 's/\/~//'`
                getHomedir $webowner
                
                if [ -d "${homedir}/${userdir}" ]
                then
                    echo "Web ${webtext} on port ${webport} will be owned by ${webowner}"
                    defwebgroup=`$lsg ${homedir}/${userdir} | $awk ' { print $4}'`
                    exists=0
                else
                    exists="${homedir}/${userdir}"
                fi
             ;;
            *)  if [ -d "${docroot}/${service}" ]
                then
                    defwebowner=`$lsg ${docroot}${service} | $awk ' { print $3}'`
                    defwebgroup=`$lsg ${docroot}${service} | $awk ' { print $4}'`
                    webowner=""
                    until [ "$webowner" != "" ]
                    do
                        $echo "Who should own web ${webtext} on port ${webport} [${defwebowner}]:  ${nnl}"
                        read webowner
                        if [ "$webowner" = "" ]
                        then
                            webowner=$defwebowner
                        fi
                    done
                    exists=0
                else
                    exists="${docroot}/${service}"
                fi
             ;;
        esac

        # We have the owner, now let's find the group
        if [ "$exists" = "0" ]
        then
            webgroup=""
            until [ "$webgroup" != "" ]
            do
                $echo "What should the group for web ${webtext} on port ${webport} be [${defwebgroup}]:  ${nnl}"
                read webgroup
                if [ "$webgroup" = "" ]
                then
                    webgroup=$defwebgroup
                fi
            done
            
            case $webport in 
               *:*) multihost="-m "`echo $webport | cut -d: -f1`
                    multiport="-p "`echo $webport | cut -d: -f2`
                    ;;
                 *) multihost=""
                    multiport="-p $webport"
                    ;;
            esac
            
	    if [ $httpdmajor -eq 2 ]
	    then
	        echo "Using Apache V2.0"
	        fpversionoption="apache-2.0"
	    else
	        echo "Using Apache V1"
	        fpversionoption="apache-fp"
	    fi
            $FPDIR/bin/owsadm.exe -o chown $multiport $multihost $web -xUser $webowner -xGroup $webgroup -t $fpversionoption ||
            {
                echo 
                echo "ERROR: Unable to chown web ${webtext} in port ${webport}"
                $echo "Hit enter to continue${nnl}" 
                read continue
            }
        else
            echo "ERROR:  web $service - $exists does not exist!  Skipping to next web."  
        fi
            exec 0<&5
    done
    exec <&4
}

#
# Generate a script fp_chown.sh that will call "owsadm -o chown" for each web,
# Used when the user says they do not want to be prompted interactively for
# each web
# 
generatechownscript()
{
    retval=0
    scriptout="${FPDIR}/fp_chown.sh"
    createdate=`date`
    
    cat <<EOF
 
A script will be generated in ${scriptout} 
which you can edit to chown your webs at a future date.  You will 
need to edit the script and set the owner and group for each web 
before running the script.
 
EOF
    
    cat >$scriptout <<EOF 
#! /bin/sh
#
#
# Copyright 1996-2001 Microsoft Corporation -- All Rights Reserved.
#
#          Automatically generated by fp_install.sh
#
# Automatically generated by fp_install.sh on $createdate
#
# You will need to edit this script before running it.  Change each 
# <OWNER> and <GROUP> to reflect the ownership/group that you want 
# set for the web.
#
# Example:  80 /testweb webowner webgroup
#

VERSION="5.0"

chown_web()
{
    port=\$1
    webname=\$2
    webowner=\$3
    webgroup=\$4
    
    if [ "\$webowner" = "<OWNER>" ] || [ "\$webgroup" = "<GROUP>" ]
    then
        echo "WARNING:  Owner/Group not specified for web \$webname on \$port."
        echo "Skipping to next web..."
    else
        if [ "\$webname" != "/" ]
        then
            webname=\`echo \$webname | sed -e 's%^/%%g'\`
            webtext="\$webname"
            web="-w \$webname"
        else
            webtext="root web"
            web=""
        fi
        case \${port} in
           *:*) multihost="-m "\`echo \${port} | cut -d: -f1\`
                multiport="-p "\`echo \${port} | cut -d: -f2\`
                ;;
             *) multihost=""
                multiport="-p \${port}"
                ;;
        esac
        echo
        echo "Chowning web \${webtext} in port \${port} to owner \${webowner} group \${webgroup}"
        /usr/local/frontpage/version${VERSION}/bin/owsadm.exe -o chown \$multiport \$multihost \$web  -xUser \$webowner -xGroup \$webgroup -t $fpversionoption 
    fi
}
 
while read port webname webowner webgroup
do
    chown_web \$port \$webname \$webowner \$webgroup
done <<ENDCHOWN
EOF
    
    for weconfigfile in ${installdir}/*.cnf
    do
        if grep Failed ${installdir}/version${VERSION}/upgrade_results.txt | grep ${weconfigfile} > /dev/null
        then 
            echo
            echo "Upgrade of ${weconfigfile} failed."
            echo "See ${installdir}/version${VERSION}/upgrade_results.txt" 
            echo "Skipping chown..."
        else
            addChownWeb $weconfigfile
        fi
    done
    
    echo "ENDCHOWN" >>$scriptout
    
    chmod 764 $scriptout
    
    weconfigfile=""
    return $retval
}

# Very similar to chownWeb(), but stick results into a file for fp_chown.sh
addChownWeb()
{
    weconfigfile=$1
    
    echo 
    echo "Processing  $weconfigfile"
    conf=`basename $weconfigfile`
    webport=`echo  $conf | sed -e '
        s/:/:/
        tmulti
        s/.cnf$//
        s/.*[^0-9]//
        q
        :multi
        s/.cnf$//'`
    
    port=$webport
    
    echo "Adding webs in port ${webport} to chown script..."
    servertype=`grep -i "^servertype:" $weconfigfile|sed -e 's/servertype://g'`
    configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
                s/serverconfig://g
                s/fakeconf.*\///'`
    configfiledir=`dirname $configfile`"/"
    getdocroot $weconfigfile ||
    {
        echo "ERROR:  Unable to get DocumentRoot/UserDir"
        return 1
    }
    
    servicesfile="${docroot}/_vti_pvt/services.cnf"
    if [ -r $servicesfile ]
    then
        exec 4<&0
        exec <$servicesfile
        n=0

        while read service
        do 
            if [ $service = "/" ]
            then
                webtext="root web"
            else
                webtext="$service"
            fi
            
            case $service in
               /~*) owner=`echo $service | sed -e 's/\///'`
                    webowner=`echo $service | sed -e 's/\/~//'`
                    getHomedir $webowner
                    
                    if [ -d "${homedir}/${userdir}" ]
                    then
                        webgroup=`$lsg ${homedir}/${userdir} | $awk ' { print $4}'`
                        exists=0
                    else
                        exists="${homedir}/${userdir}"
                    fi
                ;;
                 *) if [ -d "${docroot}/${service}" ]
                    then
                        webowner=`$lsg ${docroot}${service} | $awk ' { print $3}'`
                        webgroup=`$lsg ${docroot}${service} | $awk ' { print $4}'`
                        exists="0"
                    else
                        exists="${docroot}/${service}"
                    fi
                    ;;
            esac
            
            if [ "$exists" = "0" ]
            then
                echo "web ${webtext}"
                echo "$webport $service $webowner $webgroup" >> $scriptout
            else
                echo "ERROR:  web ${webtext}- Path $exists does not exist!  Skipping to next web."  
            fi
        done
        exec <&4
    else
        echo "WARNING:  Unable to read $servicesfile!" 
        echo "Skipping to next port."
    fi
}

# upgrade a server
upgradeserver()
{
    retval=0
    weconfigfile="$1"
    bindir=$installdir'/version'$VERSION'/bin'
    conf=`basename $weconfigfile`
    webport=`echo  $conf | sed -e '
        s/:/:/
        tmulti
        s/.cnf$//
        s/.*[^0-9]//
        q
        :multi
        s/.cnf$//'`
    
    echo "Upgrading server "$webport

    case $webport in
       *:*) multihost="-m "`echo $webport | cut -d: -f1`
            multiport="-p "`echo $webport | cut -d: -f2`
            ;;
         *) multihost=""
            multiport="-p $webport"
            ;;
    esac
    
    # docroot is set by getdocroot which is called from verifywebserver which
    # is called before upgradeserver
    webowner=`$lsg ${docroot} | $awk ' { print $3}'`
    xuser="-xu $webowner"
    
    $bindir/owsadm.exe -o upgrade $multiport $multihost $xuser -t $fpversionoption 
    
    return $retval
}

getrootconfigfile()
{
    if [ -n "$rootconfigfile" ]
    then
	configfile=$rootconfigfile
	return
    fi
    configfile=""
    while ( [ "$configfile" = "" ] || [ ! -f $configfile ] )
    do
        $echo "Server config filename:  ${nnl}" 
        read configfile
    done
    rootconfigfile=$configfile
}

# Install the root web
installrootweb()
{
    retval=0
    
    configfile=""
    admin=""
    port=""
    multihost=""
    webname=""
    webowner=""
    
    echo "  Note: Local version of Apache must use the FrontPage Apache patch."
    echo "  See http://www.microsoft.com/frontpage/ for more details."
    
    servertype="apache-fp"
    
    echo 
    echo "Note: If you have not installed the root web then you need to do it now." 
    echo
    myprompt 'yYnN' "Do you want to install a root web (y/n)" "Y"
    if [ $answer = n ] || [ $answer = N ]
    then
        return $retval
    fi
    
    echo " " 
    echo "Installing the root web..." 
    echo " " 
    
    webname="/"
    
    getrootconfigfile
    httpdconfigfile=$configfile
    
    admin=""
    until [ "$admin" != "" ]
    do
        $echo "FrontPage Administrator's user name:  ${nnl}" 
        read admin
    done
    httpdconfigfile=$configfile
    
    getHttpRootDirective $configfile Port
    port=$param
    
    until [ "$port" != "" ]
    do
        $echo "Enter the new server's port number:  ${nnl}" 
        read port
    done
    weconfigfile="${installdir}/we${port}.cnf"
    
    echo 
    getparam User $configfile $port "Getting User from "
    defwebowner=$param
    webowner=""
    until [ "$webowner" != "" ]
    do
        $echo "Unix user name of the owner of this new web: [$defwebowner]  ${nnl}"
        read webowner
        if [ "$webowner" = "" ]
        then
            webowner=$defwebowner
        fi
    done
    
    echo 
    getparam Group $configfile $port "Getting Group from "
    defgroup=$param
    webgroup=""
    until [ "$webgroup" != "" ]
    do
        $echo "Unix group of this new web: [$defgroup]  ${nnl}" 
        read webgroup
        if [ "$webgroup" = "" ]
        then
            webgroup=$defgroup
        fi
    done
    
    multihost="."
    if [ "$configfile" = "" ]
    then
        configfile="."
    fi
    
    PORT=$port
    
    echo "Installing root web into port $port..." 
    echo 
    installserver $port $multihost $webname $webowner $webgroup \
                  $admin $configfile $servertype ||
    {
        echo "ERROR:  $webname installation failed." 
        $echo "Hit enter to continue${nnl}" 
        read continue
        return $retval
    }
    
    return $retval
}

# set the global values for language and charactor encoding
handlelanguage()
{
    retval=0
    
    until [ "$charencoding" != "" ]
    do
        echo 
        echo "    1.  LATIN1 (ISO 8859-1)" 
        echo "    2.  LATIN2 (ISO 8859-2)" 
        echo "    3.  EUCJP  (Japanese EUC)" 
        echo "    4.  EUCKR  (Korean EUC)" 
        $echo "Which local character encoding does your system support: [1]  ${nnl}" 
        read charencodingnum
        echo
        
        case $charencodingnum in
           "") charencoding="latin1" ;;
          "1") charencoding="latin1" ;;
          "2") charencoding="latin2" ;;
          "3") charencoding="eucjp" ;;
          "4") charencoding="euckr" ;;
            *) echo "Invalid option!  Please try again."  ;;
        esac
    done
    
    until [ "$lang" != "" ]
    do
        echo 
        echo "    1.  English" 
        echo "    2.  French" 
        echo "    3.  German" 
        echo "    4.  Italian" 
        echo "    5.  Japanese" 
        echo "    6.  Spanish" 
        $echo "What should the default language be: [1] ${nnl}" 
        read langnum
        echo
        
        case $langnum in
            "") lang="en" ;;
           "1") lang="en" ;;
           "2") lang="fr" ;;
           "3") lang="de" ;;
           "4") lang="it" ;;
           "5") lang="ja" ;;
           "6") lang="es" ;;
             *) echo "Invalid option!  Please try again."  ;;
        esac
    done
    
    conffile=$FPDIR/frontpage.cnf
    echo "Setting "$conffile" to:" 
    echo 
    echo "defaultLanguage:${lang}"
    echo "localCharEncoding:${charencoding}"
    echo 
    echo "Copying ${conffile} to ${conffile}.orig"
    echo
    cp -p $conffile ${conffile}.orig ||
    {
        echo "ERROR:  Unable to backup $conffile to ${conffile}.orig!"
        $echo "Hit enter to continue${nnl}" 
        read continue
        return 1
    }
    
    echo "Creating and modifying new ${conffile}..."
    echo
    sed -e "s/defaultLanguage:.*/defaultLanguage:${lang}/g
            s/localCharEncoding:.*/localCharEncoding:${charencoding}/g" \
        ${conffile}.orig > $conffile ||
    {
        echo "ERROR:  Unable to create new $conffile!"
        echo "If the file has been corrupted you should be able to replace it with"
        echo "the backup file (${conffile}.orig)"
        $echo "Hit enter to continue${nnl}"
        read continue
        return 1
    }
    
    return $retval
}

# Install a web on a multihosted server
installvirtualwebs()
{
    retval=0
    
    echo
    echo "Installing Virtual Webs.." 
    echo 
    myprompt 'yYnN' "Do you want to install Virtual Webs (y/n)" "Y"
    if [ $answer = n ] || [ $answer = N ]
    then
        return $retval
    fi
    
    defaultconfigfile=$configfile
    configfile=""
    while ( [ "$configfile" = "" ] || [ ! -f $configfile ] )
    do
        $echo "Server config filename [${defaultconfigfile}]:  ${nnl}" 
        read configfile
        if [ "$configfile" = "" ]
        then
            configfile=$defaultconfigfile
        fi
    done
    httpdconfigfile=$configfile
    
    getHttpRootDirective $configfile Port
    port=$param
    getparam User $configfile $port "Getting User from "
    webowner=$param

    virtnames=`cat $configfile | $awk "
        BEGIN {
            value = \"\"; j=0
        }
        
        { x=0; y=0; server=\"\"; virtname=\"\" }
        
        /^[^#]* *< *[Vv][Ii][Rr][Tt][Uu][Aa][Ll][Hh][Oo][Ss][Tt][ $TAB]/ { 
            virtname = \\\$2; y=1; j++
        }
        
        /^[^#]*[Ss][Ee][Rr][Vv][Ee][Rr][Nn][Aa][Mm][Ee][ $TAB]/  { 
            server = \\\$2; y=2
        }
        
        {
            if (y == 1) {  gsub(/>/,\"\",virtname); ARRAY[j] = virtname }
            if (y == 2) { ARRAY[j] = server }
        }
        
        END { 
            for ( i =1; i <= j; i++ ) { 
                print ARRAY[i] \" \" 
            }
        }"`

    virtnames=`echo $virtnames | sed -e 's/>//g'`
    n=0
    for word in $virtnames 
    do
        n=`expr $n + 1` 
        eval virtwebs$n="$word" 
    done

    while echo
        n=1
        vweb="virtwebs$n"
        val=`eval echo '$'$vweb`
        while [ "$val" != "" ]
        do
            echo "  $n) $val" 
            n=`expr $n + 1`
            vweb="virtwebs$n"
            val=`eval echo '$'$vweb`
        done
        
        echo 
        $echo "Select the virtual web to install (CTRL-D if no more webs): ${nnl}" 
        read virtwebno
    do
        getHttpRootDirective $configfile Port
        port=$param
        until [ "$port" != "" ]
        do
            $echo "Enter the new server's port number:  ${nnl}" 
            read port
        done
        
        port="`eval echo '$'"virtwebs$virtwebno"`:$port"
        
        getHttpVirtualDirective $configfile $port User
        defwebowner=$param
        
        webowner=""
        until [ "$webowner" != "" ]
        do
            $echo "Unix user name of the owner of this new web:[$defwebowner]  ${nnl}"
            read webowner
            if [ "$webowner" = "" ]
            then
                webowner=$defwebowner
            fi
        done
        
        getHttpVirtualDirective $configfile $port Group
        defwebgroup=$param
        
        webgroup=""
        until [ "$webgroup" != "" ]
        do
            echo 
            $echo "Unix group of this new web:[$defgroup]  ${nnl}" 
            read webgroup
            if [ "$webgroup" = "" ]
            then
            webgroup=$defgroup
            fi
        done
        
        webname="/"
        
        admin=""
        until [ "$admin" != "" ]
        do
            $echo "FrontPage Administrator's user name:  ${nnl}" 
            read admin
        done
        
        servertype="apache-fp"
        
        multihost="`eval echo '$'"virtwebs$virtwebno"`"
        if [ "$configfile" = "" ]
        then
            configfile="."
        fi
        
        PORT=$port
        echo "Installing virtual root web into port $port..." 
        echo 
        installserver $port $multihost $webname $webowner $webgroup \
        $admin $configfile $servertype ||
        {
            echo "ERROR:  $webname installation failed." 
            $echo "Hit enter to continue${nnl}" 
            read continue
            return $retval
        }
        
        weconfigfile=""
        
        installnewsubwebs $PORT || error     # Install new servers
        echo
    done
    
    return $retval
}

# Install all subwebs, including per-user webs
installnewsubwebs()
{
    port=$1
    
    retval=0
    
    echo 
    myprompt 'yYnN' "Install new sub/per-user webs now (y/n)" "Y"
    if [ $answer = n ] || [ $answer = N ]
    then
        echo "For details on how to upgrade servers manually, please see" 
        echo "the Server Extension Resource Kit (SERK), located at"
        echo "http://www.microsoft.com/frontpage"
        echo
        return $retval
    fi
    echo 
    
    if [ "$weconfigfile" = "" ]
    then
        until [ "$weconfigfile" != "" ] && [ -f $weconfigfile ]
        do
            port=""
            if [ "$port" = "" ]
            then
                cat <<EOF
 
You need to specify which server to install the subweb into.
Examples:
          80
          www.virtual.web:80
 
          where 80 is the port the server is running on.
 
EOF
                $echo "Which server would you like to install the subweb into:  ${nnl}" 
                read port
            fi
            echo 
            case $port in 
              *:*) weconfigfile="${installdir}/${port}.cnf" ;;
                *) weconfigfile="${installdir}/we${port}.cnf" ;;
            esac
        done
    fi
    
    echo "Using FrontPage Configuration File:  ${weconfigfile}"
    echo
    
    servertype="apache-fp"
    configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
                s/serverconfig://g
                s/fakeconf.*\///'`
    configfiledir=`dirname $configfile`"/"
    
    getdocroot $weconfigfile ||
    {
        echo "ERROR:  Unable to get DocumentRoot/UserDir"
        return 1
    }
    
    services=${docroot}"/_vti_pvt/services.cnf"
    
    if [ ! -f $services ]
    then
        echo
        echo "ERROR:  The root web must be installed before sub/per-user webs!"
        echo "Document Root:  ${docroot}"
        $echo "Hit enter to continue${nnl}" 
        read continue
        echo
        return $retval
    fi
    
    echo 
    while $echo "Enter the web name (CTRL-D if no more webs): ${nnl}" 
        read webname    
    do
        admin=""
        until [ "$admin" != "" ]
        do
            $echo "FrontPage Administrator's user name:  ${nnl}" 
            read admin
        done
        
        case "$webname" in
            ~*) PERUSER=1
                echo 
                echo "Web $webname is a per-user web" 
                webowner=`echo $webname | sed -e 's/~//'`
                ;;
             *) PERUSER=0
                echo 
                echo "Web $webname is a subweb"  
                webowner=""
                ;;
        esac
        
        defwebowner=`$lsg ${docroot}${service} | $awk ' { print $3}'`
        until [ "$webowner" != "" ]
        do
            echo
            $echo "Unix user name of the owner of this new web:[$defwebowner]  ${nnl}"
            read webowner
            if [ "$webowner" = "" ]
            then
                webowner=$defwebowner
            fi
        done

        getparam Group $configfile $port "Getting Group from "
        defgroup=$param
        webgroup=""
        if [ "$PERUSER" = 1 ]
        then
            getHomedir $webowner
            if [ -d "${homedir}" ]
            then
                webgroup=`$lsg ${homedir} | $awk ' { print $4}'`
            fi
            if [ -d "${homedir}/${userdir}" ]
            then
                webgroup=`$lsg ${homedir}/${userdir} | $awk ' { print $4}'`
            fi
        fi
        
        until [ "$webgroup" != "" ]
        do
            echo 
            $echo "Unix group of this new web:[$defgroup]  ${nnl}" 
            read webgroup
            if [ "$webgroup" = "" ]
            then
                webgroup=$defgroup
            fi
        done
        
        multihost="."
        
        if [ "$configfile" = "" ]
        then
            configfile="."
        fi
        
        if [ "$servertype" = "" ]
        then
            servertype="."
        fi
        
        installserver $port $multihost $webname $webowner $webgroup \
                      $admin $configfile $servertype ||
        {
            echo "ERROR:  $webname installation failed." 
            $echo "Hit enter to continue${nnl}"
            retval=0 
            read continue
        }
        echo
    done
    
    return $retval
}

installserver()
{
    retval=0
    
    webport="$1"
    multihost="$2"
    webname="$3"
    webowner="$4"
    webgroup="$5"
    admin="$6"
    configfile="$7"
    servertype="$8"

    case $webport in
       *:*) multihost=`echo $webport | cut -d: -f1`
            port=`echo $webport | cut -d: -f2`
            ;;
         *) port=$webport
            ;;
    esac
    
    echo 
    echo "installing server " $webname " on port " $port
    
    if [ "$PERUSER" = 1 ]
    then
        user=`echo $webowner | sed -e 's/~//g'`
        echo 
        echo "Will chown per-user web to $user as part of install." 
        echo "Will chgrp per-user web to $webgroup as part of install." 
        chown="-xUser $user -xGroup $webgroup"  
    else
        if [ "$webowner" != "." ]
        then
            echo 
            echo "Will chown web to $webowner as part of install." 
            echo "Will chgrp web to $webgroup as part of install." 
            chown="-xUser $webowner -xGroup $webgroup"
        else
            chown=""
        fi
    fi
    
    if [ "$configfile" != "." ]
    then
        config="-s $configfile"
    else
        config=""
    fi
    
    if [ "$webname" != "/" ]
    then 
        web="-w $webname"
    else
        web=""
    fi

    if [ "$multihost" != "." ]
    then
        ${FPDIR}/bin/owsadm.exe -o install -p $port $web $config -u $admin $chown -m $multihost -t $fpversionoption || retval=1
    else
        ${FPDIR}/bin/owsadm.exe -o install -p $port $web $config -u $admin $chown -m "" -t $fpversionoption || retval=1
    fi
    
    return $retval
}

###############################################################################
#
# The following set of functions are used for reading the webserver's config
# file(s) (i.e. httpd.conf)
#

# take a string and converts it to a regular expression which matches all
# possible case combinations.
#
# String = [Ss][Tt][Rr][Ii][Nn][Gg]
#
getMixedCase() {
    mc_string=`echo $1 | $awk "
                BEGIN {
                    newstring = \"\";
                    oldstring = \"$1\"; 
                } 
                
                $functions
                {
                    strlen = length(oldstring);
                    for ( i = 1; i <= strlen; ++i ) {
                        char = substr(oldstring, i, 1)
                        newstring = newstring \"[\" toupper(char) tolower(char) \"]\";
                    };
                    print newstring
                }"`
}

getDirective()
{
    gdconfigfile=$1
    directive=$2
    port=$3

    param=""
    if [ "$gdconfigfile" = "" ]
    then
        return 0
    fi
    
    case $port in
      *:*) getHttpVirtualDirective $gdconfigfile $port $directive ;;
        *) getHttpRootDirective $gdconfigfile $directive ;;
    esac
}

# Get the DocRoot and UserDir settings
getdocroot()
{
    weconfigfile=$1
    
    servertype="apache-fp"
    configfile=`grep -i "^serverconfig:" $weconfigfile | sed -e '
                s/serverconfig://g
                s/fakeconf.*\///'`
    
    echo "Getting DocumentRoot and UserDir."
    
    if [ ! -f "$configfile" ]
    then
        echo "$configfile does not exist."
        return 1
    fi
    
    configfiledir=`dirname $configfile`"/"
    
    docroot=""
    resconffile=$configfile
    echo "Getting resource configuration file"
    getHttpDirective $configfile ResourceConfig $port
    if [ "$param" != "" ]
    then
        case $param in
            /dev/null) resconffile=$configfile
                ;;
            /*) resconffile=$param  # fully qualified pathname
                ;;
            *)  file=`basename $param`
                resconffile="${configfiledir}${file}"
                ;;
        esac
    elif [ $httpdmajor -eq 1 ]
    then
    # only Apache 1 requires srm.conf
        resconffile="${configfiledir}srm.conf"
        if [ ! -f $resconffile ]
        then
            resconffile=$configfile
        fi
    else
       resconffile=$configfile
    fi
    
    if [ $httpdmajor -eq 1 -a "$resconffile" != "" -a "$resconffile" != "/dev/null" -a ! -f "$resconffile" ]
    then
        echo "ERROR:  $resconffile does not exist!"
        return 1
    fi
        
    getparam DocumentRoot $resconffile $port "Getting DocumentRoot from "
    docroot=$param

    getparam UserDir $resconffile $port "Getting UserDir from "
    userdir=$param

    if [ "${docroot}" = "" ]
    then
        echo "ERROR:  DocumentRoot not defined!"
        return 1
    fi
    
    if [ ! -d "${docroot}" ]
    then
        echo "ERROR:  ${docroot} does not exist!"
        return 1
    fi
    
    echo
    echo "DocumentRoot: ${docroot}"
    
    if [ "${userdir}" = "" ]
    then
        echo "WARNING:  UserDir not defined."
    else
        echo "UserDir: ${userdir}"
    fi
    
    echo
    
    return 0
}

# call either getHttpVirtualDirective or getHttpRootDirective
getHttpDirective()
{
    configfile=$1
    directive=$2
    port=$3
    
    getDirective "$configfile" "$directive" "$port"
    
    if [ "$param" = "" ]
    then
        echo "Directive $directive not found."
    else 
        echo "Found Directive $directive, value $param."
    fi
}

# find a directive in a config file that is not part of a virtual host section
getHttpRootDirective()
{
    configfile=$1
    directive=$2
    
    getMixedCase VirtualHost
    virtualhost=${mc_string}
    
    getMixedCase $directive
    
    param=`cat $configfile | $awk "
            /^[^#]* *< *${virtualhost}/,/^[^#]* *< *\/${virtualhost}/ { next }
            /^[^#]* *${mc_string}[ $TAB]/  { print \\\$2 }" | sed -e 's/^\"//' -e 's/\"$//' ` 
            
    return 0
}

# find a directive in a config file that is part of a virtual host section
getHttpVirtualDirective() # from fp_install.sh
{
    configfile=$1
    port=$2
    directive=$3
    
    virtweb=`echo  $port | sed -e 's/:[0-9]*.$//'`
    virtweb=`basename $virtweb`
    
    getMixedCase VirtualHost
    virtualhost=${mc_string}
    
    getMixedCase ServerName
    servername=${mc_string}
    
    getMixedCase $directive
    
    param=`cat $configfile | $awk "
                            BEGIN    { value = \"\"; j=0 }
                                     { x=0; y=0; server=\"\"; virtname=\"\" }
                        /^[^#]* *< *${virtualhost}[ $TAB]/ { 
                            virtname = \\\$2; y=1; j++
                        }
                        /^[^#]*${servername}[ $TAB]/   { 
                            server = \\\$2; y=2
                        }
                        /^[^#]* *${mc_string}[ $TAB]/  {
                            arg = \\\$2; y=3
                        }
                        
                        {
                            if (y == 1) {
                                gsub(/>/,\"\",virtname)
                                VIRTNAMES[j] = virtname
                            }
                            if (y == 2) { SERVERNAMES[j] = server } 
                            if (y == 3) { ARRAY[j] = arg }
                        }
                    
                    END { 
                            for ( i =1; i <= j; i++ ) { 
                                if (SERVERNAMES[i] == \"$virtweb\" || VIRTNAMES[i] == \"$virtweb\" ) {
                                    print ARRAY[i] 
                                }
                            }
                    } "`
    
    if [ "$param" = "" ]
    then
        getHttpRootDirective $configfile $directive
    fi 
}

# get the value of parameters from the config file
getparam() {
    directive=$1
    gpconfigfile=$2
    port=$3
    msg=$4

    getDirective "$httpdconfigfile" "$directive" "$port"   # try httpd.conf
    if [ "$param" = "" -a -f "$gpconfigfile" ]       # try again w/configfile
    then
        getDirective "$gpconfigfile" "$directive" "$port"
    else
        gpconfigfile=$httpdconfigfile
    fi
    echo $msg $gpconfigfile
    if [ "$param" = "" ]
    then
        return 1;
    else
        return 0;
    fi
    param=`egrep -i "^[ $TAB]*$1[ $TAB]" $2 | $awk '{print $2}' | sed -e 's/^\"//' -e 's/\"$//'` || return 1
    return 0;
}

###############################################################################
# (formerly a separate script, change_server.sh)
# these functions are used to replace the existing Apache daemon (httpd) with a
# new one that contains the FrontPage patch

change_server()
{
    rm -f ${FPDIR}/apache-fp/suidkey
    
    # Generate new key file
    ps=`$psea | tail -10` ; echo $ps | sed -e 's/ //g' | cut -c10-137 > ${FPDIR}/apache-fp/suidkey
    
    chown root ${FPDIR}/apache-fp/suidkey
    chmod 600 ${FPDIR}/apache-fp/suidkey

    
    checkVersion
    rtc=$?
    if [ $rtc -eq 1 ]
    then
        # User doesn't want us to upgrade Apache, so we abort.
        exit 0
    elif [ $rtc -eq 2 ]
    then 
        # Already upgraded, so we return
        httpdmajor=1
        fpversionoption="apache-fp"
        return 0
    elif [ $rtc -eq 3 ]
    then
        # Apache 2.0
	httpdmajor=2
        fpversionoption="apache-2.0"
	installfpdso2 || 
	{
	    echo "ERROR: Unable to install mod_frontpage dso"
	    return 1
	}
	return 0
    elif [ $rtc -eq 4 ]
    then
	# Apache 1.3 with mod_so
	httpdmajor=1
	fpversionoption="apache-fp"
	installfpdso1 || 
	{
	    echo "ERROR: Unable to install mod_frontpage dso"
	    return 1
	}
	return 0
    elif [ $rtc -ne 0 ]
    then
        # Unknown return value from checkVersion
        echo "ERROR: checkVersion returned $rtc, aborting."
	exit 1
    fi
    
    not_stub_apache         || error   # Check if we're debugging this script
    if [ $rtc -eq 0 ]
    then
        upgradeHttpd || 
	{
	    echo "ERROR:  Unable to upgrade Apache daemon!"
	    return 1
	}
    fi
    
    httpdmajor=1
    fpversionoption="apache-fp"
    return 0
}

# checkVersion:
# Use the httpd -v command to get the built-in Apache version number.  If it
# is a Version 1.3 apache, then run "strings" on the httpd file to see if 
# the current version of the FP patch is installed; ask the user if they 
# want to upgrade to the current one.
# Return values:
#    0:  Apache is version 1 and needs to be upgraded by us
#    1:  Apache is old but User does not want to upgrade Apache (for an old
#        Apache 1), or else it's an old Apache 2, which users must upgrade
#        themselves.  This will cause change_server (the caller of this
#        function) to abort with no message (thus, the messages must be
#        issued here).
#    2:  Apache is version 1, but it has the FP patch
#    3:  Apache is version 2
#    4:  Apache is correct version 1, with mod_so and no FrontPage, so we
#        install the mod_frontpage.so (not the patched version).

checkVersion()
{
    rtc=0;
    echo
    NEWHTTPD=$NEWHTTPDNEW
    
    # First check for Apache 2
    if [ "$ApacheVers" = "2.0"  ]
    then
      # It's Apache 2.0, check the details, and if ok, return.  We don't
      # ship a prebuilt Apache 2.0, nor is there a patch to install
      checkVersion2 $installedApacheVers
      rtc=$?
      unset installedApacheVers
      return $rtc
    fi

    if [ 1 -ne `expr "$installedApacheVers" : "1"` ]
    then
      # Unknown
      die1 "Unknown Apache version, aborting"
    fi

    checkVersion1 $installedApacheVers
    rtc=$?
    unset installedApacheVers
    return $rtc
}

#
# checkVersion1 ApacheCompare
#
#     ApacheCompare must be one of "LT", "EQ", or "GT", representing the
#     comparison of the version in this kit agains the version the user
#     has installed
#
# Make sure we have the correct version of Apache 1.3.
# If it's too old, we recommend mod_so, but will continue with our version
# 
checkVersion1()
{
    # First collect the version numbers for the Apache in our kit, and
    # compare them
    sourceVersion=`$NEWHTTPD -v | sed 's%^.*Apache/\([0-9\.]*\).*%\1%' | head -1`
    sourceFPVersion=`$strings $NEWHTTPD | $fgrep "FrontPage/" 2> /dev/null | sed -e 's%^.*FrontPage/\([0-9\.]*\).*%\1%' | tail -1`
    compareVersions "$sourceVersion" "$installedApacheVers" ApacheCompare

    # Now get the FrontPage patch versions, and compare them.
    echo "Checking if the FrontPage patch to Apache is already installed."
    targetFPVersion=`$strings $HttpdFile | $fgrep "FrontPage/" 2> /dev/null | sed -e 's%^.*FrontPage/\([0-9\.]*\).*%\1%' | tail -1`
    if [ "${targetFPVersion}" = "" ]
    then
	# We treat the case of no patch the same as if it is an older patch,
        # except for the following message.  Hence setting FPCompare to GT
        # works.
        echo "The FrontPage server patch has not been installed in your server"
        FPCompare="NO"
    else
	echo "Your server has the FrontPage patch ${targetFPVersion} installed."
        compareVersions "$sourceFPVersion" "$targetFPVersion" FPCompare
    fi

    # All the comparisons are done, dispatch the recommendations.
    badCompare=""
    if [ "$ApacheCompare" = "GT" ]
    then
      case "$FPCompare" in
        NO)  recommendation1gt_no ; rtc=$?;;
	GT)  recommendation1gt_gt ; rtc=$?;;
	EQ)  recommendation1gt_eq ; rtc=$?;;
	LT)  recommendation1gt_lt ; rtc=$?;;
	*)   badCompare="FP=$FPCompare"  ; rtc=1;;
      esac
    elif [ "$ApacheCompare" = "EQ" ]
    then
      case "$FPCompare" in
        NO)  recommendation1eq_no ; rtc=$?;;
	GT)  recommendation1eq_gt ; rtc=$?;;
	EQ)  recommendation1eq_eq ; rtc=$?;;
	LT)  recommendation1eq_lt ; rtc=$?;;
	*)   badCompare="FP=$FPCompare"  ; rtc=1;;
      esac
    elif [ "$ApacheCompare" = "LT" ]
    then
      case "$FPCompare" in
        NO)  recommendation1lt_no ; rtc=$?;;
	GT)  recommendation1lt_gt ; rtc=$?;;
	EQ)  recommendation1lt_eq ; rtc=$?;;
	LT)  recommendation1lt_lt ; rtc=$?;;
	*)   badCompare="FP=$FPCompare"  ; rtc=1;;
      esac
    else
      badCompare="AP=$ApacheCompare"
      rtc=1
    fi

    if [ "$badCompare" != "" ] ;
    then
      echo "Internal installation error, bad value is $badCompare"
      exit 1
    fi
    return $rtc
}


recommend_upgrade()
{
    echo "We recommend installing Apache $sourceVersion with mod_so."
    echo "Alternatively, we can install a prebuilt Apache $sourceVersion "
    echo "that has been patched to work with this version of FrontPage."
}

warnLoseCustomModules()
{
    echo "Our prebuilt Apache is a stock Apache containing the FrontPage "
    echo "patch and may result in the loss of any nonstandard modules "
    echo "that have been compiled into the Apache daemon that you have"
    echo "currently installed."
}

ask_upgrade()
{
    recommend_upgrade
    warnLoseCustomModules
    myprompt 'yYnN' "Are you sure you want to install the prebuilt Apache? (y/n)" "N"
    if [ $answer = n ] || [ $answer = N ]
    then
      echo 
      echo "Please install Apache $sourceVersion with mod_so, then rerun"
      echo "this installation."
      return 1
    else
      return 0
    fi
}

recommendation1gt_no()
{
    # We have a newer Apache, and they have no FP patch
    echo "Your Apache needs to be upgraded."
    ask_upgrade
    rtc=$?
    return $rtc
}

recommendation1gt_gt() 
{
    # We're newer on both counts
    echo "Your Apache needs to be upgraded, along with the FrontPage patch."
    ask_upgrade
    rtc=$?
    return $rtc
}

recommendation1gt_eq()
{
    # We have a newer Apache, but they have the same FP patch
    echo "Your Apache needs to be upgraded."
    ask_upgrade
    rtc=$?
    return $rtc
}

recommendation1gt_lt()
{
    # We have a newer Apache, but an older FP patch.
    echo "You are currently running an older Apache with a more recent "
    echo "FrontPage patch.  That configuration is not recommended."
    echo "Installing this kit requires a newer Apache, but will result in"
    echo "a downgrade of your FrontPage patch."
    myprompt 'yYnN' "Do you want to continue? (y/n)" "N"
    if [ $answer = n ] || [ $answer = N ]
    then
      return 1
    fi
    ask_upgrade
    rtc=$?
    return $rtc
}

getModFpVersion1() 
{
    httpdir=`dirname $HttpdFile`
    # Remove the /bin
    httpdir=`dirname $httpdir`/libexec
    if [ ! -d "$httpdir" ]
    then
	httpdir="/usr/local/apache/modules"
    fi
    while ( [ ! -d "$httpdir" ] )
    do 
	$echo "Where is the current Apache modules directory: [$httpdir] ${nnl}"
	read location
	if [ "$location" != "" ]
	then
	    httpdir=$location
	fi
    done
    modfpso="${httpdir}/mod_frontpage.so"
}

checkModFpSo1()
{
    getModFpVersion1
    if [ ! -r "$modfpso" ]
    then
      # No mod_frontpage.so
      echo "The mod_frontpage.so module is not installed, but mod_so is."
      echo "You can let us install mod_frontpage.so, or we can install"
      echo "a prebuilt Apache with mod_frontpage built in"
      myprompt 'yYnN' "Do you want us to install the mod_frontpage.so DSO? (y/n)" "Y"
      if [ $answer = y ] || [ $answer = Y ]
      then
          return 4
      else
          return 0
      fi
    else
      # There is a mod_frontpage.so, check version
      targetModFPVersion=`$strings $modfpso | $fgrep "FrontPage/" 2> /dev/null | sed -e 's%^.*FrontPage/\([0-9\.]*\).*%\1%' | tail -1`
      sourceModFPVersion=`$fgrep "FrontPage/" "$NEWMODFPSO1" 2> /dev/null | sed -e 's%^.*FrontPage/\([0-9\.]*\).*%\1%' | tail -1`
      compareVersions "$sourceModFPVersion" "$targetModFPVersion" ModFPCompare
      case "$ModFPCompare" in
        GT) echo "Your existing mod_frontpage.so will be upgraded"
	    return 4;;
	EQ) echo "You are already running mod_frontpage.so, no changes will be made"
	    return 2;;
	LT) echo "You are running mod_frontpage.so version $targetModFPVersion"
	    echo "Installing this version will be a downgrade."
            myprompt 'yYnN' "Are you sure that you want to do this (y/n)" "N"
            if [ $answer = n ] || [ $answer = N ]
            then
                return 1
	    else
	        return 4
            fi;;
	 *) echo "Internal installation error, bad value is ModFPCompare=$ModFPCompare"
	    exit 1;;
      esac
  fi
}


recommendation1eq_no()
{
    # Right Apache, no FP.
    # Check for mod_so
    hasSo=`$HttpdFile -l | grep " mod_so.c"`
    if [ "$hasSo" = "" ]
    then
	echo "Your Apache is the correct version, but does not have mod_so."
	echo "We recommend rebuilding Apache with mod_so.  Alternatively,"
	echo "we can install a prebuilt Apache that has been patched to"
	echo "work with FrontPage."
	warnLoseCustomModules
	myprompt 'yYnN' "Do you really want to install the prebuilt Apache? (y/n)" "N"
	if [ $answer = n ] || [ $answer = N ]
	then
	    echo 
	    echo "Please build Apache $sourceVersion with mod_so, then rerun"
	    echo "this installation."
	    return 1
	else
	    return 0
	fi
    fi

    # At this point, it has mod_so, so we continue
    checkModFpSo1
    rtc=$?
    if [ "$rtc" -eq 4 ]
    then
      echo "You will need to restart Apache after this installation completes."
    fi
    return $rtc
}

recommendation1eq_gt()
{
    echo "Your Apache is the correct version, but it has an older FrontPage"
    echo "patch that must be upgraded."
    echo "You can rebuild Apache with mod_so and without the existing"
    echo "FrontPage patch, and then rerun this installation to install"
    echo "the FrontPage module using Apache's mod_so.  Alternatively, "
    echo "we can install a prebuilt Apache of the same version, with the"
    echo "current FrontPage patch."
    warnLoseCustomModules
    myprompt 'yYnN' "Do you want to install the prebuilt Apache? (y/n)" "N"
    if [ $answer = n ] || [ $answer = N ]
    then
      echo 
      echo "Please install Apache $sourceVersion with mod_so, then rerun"
      echo "this installation."
      return 1
    else
      return 0
    fi
}

recommendation1eq_eq()
{
    echo "Your Apache server is currently the correct version, with the "
    echo "correct patch."
    return 2
}

recommendation1eq_lt()
{
    echo "Your Apache is the correct version, but it has a newer FrontPage"
    echo "patch.  That configuration is not recommended."
    echo "Installing this kit requires a downgrade of your FrontPage patch"
    myprompt 'yYnN' "Do you want to continue? (y/n)" "N"
    if [ $answer = n ] || [ $answer = N ]
    then
      return 1
    fi
    ask_upgrade
    rtc=$?
    return $rtc
}

warnNewApache() {
    echo "You are running a newer version of Apache than supported by"
    echo "this kit.  Your Apache should work with this version, but check"
    echo "our release notes to be sure."
}
recommendation1lt_no()
{
    hasSo=`$HttpdFile -l | grep " mod_so.c"`
    if [ "$hasSo" = "" ]
    then
        warnNewApache
	echo "Your Apache does not have mod_so."
	echo "Your choices are to rebuild Apache with mod_so, and then"
	echo "rerun this installation, or to have us install our prebuilt"
	echo "version."
	warnLoseCustomModules
	myprompt 'yYnN' "Do you want to install the prebuilt Apache? (y/n)" "N"
	if [ $answer = n ] || [ $answer = N ]
	then
	    echo 
	    echo "Please install Apache with mod_so, then rerun"
	    echo "this installation."
	    return 1
	else
	    return 0
	fi
    fi
    #At this point, we know they have mod_so installed.
    warnNewApache
    getModFpVersion1
    if [ ! -r "$modfpso" ]
    then
      # At this point, we know the user has a newer Apache with mod_so but
      # without mod_frontpage.
      echo "The mod_frontpage.so modules is not installed."
      echo "Your choices are:"
      echo "   Let us install our mod_frontpage.so into your existing Apache"
      echo "   Install Apache $sourceVersion with mod_so."
      echo "   Install Apache $sourceVersion with our patch." 
      myprompt 'yYnN' "Do you want us to install mod_frontpage.so into your existing Apache (y/n)" "N"
      if [ $answer = y ] || [ $answer = Y ]
      then
	return 4
      fi
      echo 
      echo "Please install the apropriate Apache, and then rerun"
      echo "this installation."
      return 1
    else
      # At this point, we know the user has a newer Apache with mod_so
      # and with mod_frontpage installed, but we don't know the version
      checkModFpSo1
      rtc=$?
      if [ "$rtc" -eq 4 ]
      then
        echo "You will need to restart Apache after this installation completes."
      fi
      return $rtc
    fi
}

recommendation1lt_gt()
{
    # Newer Apache, older patch (not mod_so)
    echo "You are currently running a newer Apache with an older FrontPage patch"
    echo "Your choices are to rebuild your Apache with mod_so and without the"
    echo "FrontPage patch, and then rerun this installation, or we can "
    echo "install a pre-built, older version of Apache with the current"
    echo "FrontPage patch built-in.  This would be an Apache downgrade."
    warnLoseCustomModules
    myprompt 'yYnN' "Do you want to downgrade to our prebuilt Apache? (y/n)" "N"
    if [ $answer = n ] || [ $answer = N ]
    then
        echo 
	echo "Please install the apropriate Apache, and then rerun"
	echo "this installation."
	return 1
    fi
    return 0
}

recommendation1lt_eq()
{
    # Newer Apache, current patch
    echo "You are currently running a newer version of Apache, but with the"
    echo "correct FrontPage patch.  We will use this version"
    return 2
}

recommendation1lt_lt()
{
    # Newer Apache, newer FrontPage
    echo "You are currently running a newer version of Apache ($installedApacheVers)"
    echo "with a newer version of FrontPage ($targetFPVersion).  Please check "
    echo "the release notes to ensure this configuration is supported."
    echo "We will continue the installation without changing your Apache."
    return 2
}
    

recommendation1()
{ 
    echo "This version of FrontPage requires either:"
    echo "  Apache Version $sourceVersion"
    echo "or"
    echo "  Apache Version APACHE_2_0_VERSION (with mod_so)"
    echo 
    echo "We recommend you install one of these versions, with mod_so."
    echo "Alternatively, we can install a prebuilt Apache $sourceVersion ."
    echo "This prebuilt version does not use mod_so for FronPage, but instead"
    echo "has been patched to work with FrontPage."
    myprompt 'yYnN' "Do you want to install this prebuilt version (y/n)" "N"
    if [ $answer = n ] || [ $answer = N ]
    then
      return 1
    fi
    return 0  
}    

#
# checkVersion2  targetApacheVersion
#
# Make sure we have the correct version of Apache 2.  We refuse to
# install if it's too old, and we require confirmation if it's too new.
#
# Make sure the required modules are compiled in.
# Currently, we abort if they're not, and return the result code for Version
# 2 (which happens to be 3, because 2 was already in use; see checkVersion
# for the values).
#
checkVersion2()
{
    installedApacheVers=$1
    ApacheCompare=""
    compareVersions "$APACHE_2_0_VERSION" "$installedApacheVers" ApacheCompare
    if [ "$ApacheCompare" != "EQ" -a "$ApacheCompare" != "LT" ]
    then
      echo "For Apache 2.0, FrontPage requires Apache version $sourceVersion or later."
      die1 "Please first upgrade to Apache 2.0.40 or later, with mod_so."
    fi

    if [ "$ApacheCompare" = "LT" ]
    then
      echo "WARNING: The Apache you are running is newer than the one"
      echo "supported by this kit."
      echo "You are running Apache $installedApacheVers ."
      echo "This kit supports Apache $sourceVersion ."
      myprompt 'yYnN' "Do you wish to continue? (y/n)" "N"
      if [ $answer = n ] || [ $answer = N ]
      then
          exit 0
      fi
    fi

    hasSo=`$HttpdFile -l start | grep " mod_so.c"`
    if [ "$hasSo" = "" ]
    then
	echo "Your Apache is missing one or more modules: ${nnl}"
	if [ "$hasSo" = "" ] ;     then echo "mod_so ${nnl}" ; fi
	echo "; these modules are required."
	die1 "Please rebuild Apache with all requied modules"
    fi
    # Set the return 
    rtc=3 
    return $rtc
}

# Replace the old httpd daemon with the new httpd daemon (after making backup)
upgradeHttpd()
{
    echo "Upgrading FrontPage Webs..."
    cp -p $HttpdFile ${HttpdFile}.orig || 
    {
        echo
        echo "ERROR:  Unable to copy ${HttpdFile} to ${HttpdFile}.orig" 
        return 1
    }
    
    cp ${NEWHTTPD} ${HttpdFile} || 
    {
        echo
        echo "ERROR:  Unable to copy ${NEWHTTPD} to ${HttpdFile}"
        return 1
    }
    
    return 0
}


installfpdso1()
{
    httpdir=`dirname $HttpdFile`
    while ( [ ! -d "$httpdir" ] )
    do 
	httpdir="/usr/local/apache/bin"
	$echo "Where is the current Apache 1.3 bin directory: [$httpdir] ${nnl}"
	read location
	if [ "$location" != "" ]
	then
	    httpdir=$location
	fi
    done
    if [ ! -x "$httpdir/apxs" ]
    then
	echo "Cannot find Apache apxs at $httpdir/apxs"
	return 1
    fi
    echo "Using the Apache apxs utility to build mod_frontpage.so"
    CURPATH=$PATH
    PATH=$OLDPATH
    case "$machine" in 
       freebsd) opts=-Wc,-DFREEBSD ;;
       bsdi)    opts=-Wc,-Dbsdi ;;
       linux)   opts=-Wc,-Dlinux ;;
       *)       opts= ;;
    esac
    $httpdir/apxs -c $opts $FPDIR/apache-fp/mod_frontpage.c
    res=$?
    PATH=$CURPATH
    if [ $res -ne 0 ]
    then
	return $res
    fi
    
    echo "Using the Apache apxs utility to install mod_frontpage.so"
    PATH=$OLDPATH
    $httpdir/apxs -i -a -n frontpage $FPDIR/apache-fp/mod_frontpage.so
    res=$?
    PATH=$CURPATH
    echo "Finished running the Apache apxs utility."
    return $res

}

installfpdso2()
{
    httpdir=`dirname $HttpdFile`
    while ( [ ! -d "$httpdir" ] )
    do 
	httpdir="/usr/local/apache/bin"
	$echo "Where is the current Apache 2.0 bin directory: [$httpdir] ${nnl}"
	read location
	if [ "$location" != "" ]
	then
	    httpdir=$location
	fi
    done
    if [ ! -x "$httpdir/apxs" ]
    then
	echo "Cannot find Apache apxs at $httpdir/apxs"
	return 1
    fi
    echo "Using the Apache apxs utility to build mod_frontpage.so"
    CURPATH=$PATH
    PATH=$OLDPATH
    case "$machine" in 
       freebsd) opts=-Wc,-DFREEBSD ;;
       bsdi)    opts=-Wc,-Dbsdi ;;
       linux)   opts=-Wc,-Dlinux ;;
       *)       opts= ;;
    esac
    $httpdir/apxs -c $opts $FPDIR/apache2/mod_frontpage.c $FPDIR/apache2/mod_fpcgid.c
    res=$?
    PATH=$CURPATH
    if [ $res -ne 0 ]
    then
	return $res
    fi
    echo "Using the Apache apxs utility to install mod_frontpage.so"
    PATH=$OLDPATH
    $httpdir/apxs -i -a -n frontpage $FPDIR/apache2/mod_frontpage.la
    res=$?
    PATH=$CURPATH
    echo "Finished running the Apache apxs utility."
    return $res

}

      
main

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0063 ]--