, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
OCSNG_UNIX_SERVER-2.0.5/setup.sh 0100755 0001750 0001750 00000173501 11736060303 0015432 0 ustar 00guigui guigui #!/bin/sh
################################################################################
#
# OCS Inventory NG Management Server Setup
#
# Copyleft 2006 Didier LIROULET
# Web: http://www.ocsinventory-ng.org
#
# This code is open source and may be copied and modified as long as the source
# code is always made freely available.
# Please refer to the General Public Licence http://www.gnu.org/ or Licence.txt
################################################################################
#
# Which host run database server
DB_SERVER_HOST="localhost"
# On which port run database server
DB_SERVER_PORT="3306"
# Database server credentials
DB_SERVER_USER="ocs"
DB_SERVER_PWD="ocs"
# Where is Apache daemon binary (if empty, will try to find it)
APACHE_BIN=""
# Where is Apache configuration file (if empty, will try to find it)
APACHE_CONFIG_FILE=""
# Where is Apache includes configuration directory (if emty, will try to find it)
APACHE_CONFIG_DIRECTORY=""
# Which user is running Apache web server (if empty, will try to find it)
APACHE_USER=""
# Which group is running Apache web server (if empty, will try to find it)
APACHE_GROUP=""
# Where is Apache document root directory (if empty, will try to find it)
APACHE_ROOT_DOCUMENT=""
# Which version of mod_perl is apache using, 1 for <= 1.999_21 and 2 for >= 1.999_22 (if empty, user will be asked for)
APACHE_MOD_PERL_VERSION=""
# Where are located OCS Communication server log files
OCS_COM_SRV_LOG="/var/log/ocsinventory-server"
# Where is located perl interpreter
PERL_BIN=`which perl 2>/dev/null`
# Where is located make utility
MAKE=`which make 2>/dev/null`
# Where is located logrotate configuration directory
LOGROTATE_CONF_DIR="/etc/logrotate.d"
# Where is located newsyslog.conf
NEWSYSLOG_CONF_FILE="/etc/newsyslog.conf"
# Where to store setup logs
SETUP_LOG=`pwd`/ocs_server_setup.log
# Communication Server Apache configuration file
COM_SERVER_APACHE_CONF_FILE="ocsinventory-server.conf"
# Communication Server logrotate configuration file
COM_SERVER_LOGROTATE_CONF_FILE="ocsinventory-server"
# Administration Console Apache configuration file
ADM_SERVER_APACHE_CONF_FILE="ocsinventory-reports.conf"
# Administration console read only files directory
ADM_SERVER_STATIC_DIR="/usr/share/ocsinventory-reports"
ADM_SERVER_STATIC_REPORTS_DIR="ocsreports"
ADM_SERVER_REPORTS_ALIAS="/ocsreports"
# Administration console read/write files dir
ADM_SERVER_VAR_DIR="/var/lib/ocsinventory-reports"
# Administration default packages directory and Apache alias
ADM_SERVER_VAR_PACKAGES_DIR="download"
ADM_SERVER_PACKAGES_ALIAS="/download"
# Administration console log files dir
ADM_SERVER_VAR_LOGS_DIR="logs"
# Administration console scripts log files dir
ADM_SERVER_VAR_SCRIPTS_LOGS_DIR="scripts"
# Administration console default ipdsicover-util.pl cache dir
ADM_SERVER_VAR_IPD_DIR="ipd"
# OS or linux distribution from automatic detection
UNIX_DISTRIBUTION=""
###################### DO NOT MODIFY BELOW #######################
# Check for Apache web server binaries
echo
echo "+----------------------------------------------------------+"
echo "| |"
echo "| Welcome to OCS Inventory NG Management server setup ! |"
echo "| |"
echo "+----------------------------------------------------------+"
echo
# Check for OS or linux distribution
echo "Trying to determine whitch OS or Linux distribution you use"
if [ -f /etc/redhat-release ]
then
UNIX_DISTRIBUTION="redhat"
else
if [ -f /etc/debian_version ]
then
UNIX_DISTRIBUTION="debian"
fi
fi
# Check for Apache web server binaries
echo "+----------------------------------------------------------+"
echo "| Checking for Apache web server binaries ! |"
echo "+----------------------------------------------------------+"
echo
echo "CAUTION: If upgrading Communication server from OCS Inventory NG 1.0 RC2 and"
echo "previous, please remove any Apache configuration for Communication Server!"
echo
echo -n "Do you wish to continue ([y]/n)?"
read ligne
if [ -z "$ligne" ] || [ "$ligne" = "y" ] || [ "$ligne" = "Y" ]
then
echo "Assuming Communication server 1.0 RC2 or previous is not installed"
echo "on this computer."
echo
else
echo "Installation aborted !"
echo
exit 1
fi
echo > $SETUP_LOG
OCS_LOCAL_DATE=`date +%Y-%m-%d-%H-%M-%S`
echo "Starting OCS Inventory NG Management server setup on $OCS_LOCAL_DATE" >> $SETUP_LOG
echo -n "from folder " >> $SETUP_LOG
pwd >> $SETUP_LOG
echo -n "Starting OCS Inventory NG Management server setup from folder "
pwd
echo "Storing log in file $SETUP_LOG" >> $SETUP_LOG
echo "Storing log in file $SETUP_LOG"
echo >> $SETUP_LOG
echo "============================================================" >> $SETUP_LOG
echo "Checking OCS Inventory NG Management Server requirements..." >> $SETUP_LOG
echo "============================================================" >> $SETUP_LOG
echo
echo "+----------------------------------------------------------+"
echo "| Checking for database server properties... |"
echo "+----------------------------------------------------------+"
echo
# Check mysql client distribution version
echo "Checking for database server properties" >> $SETUP_LOG
DB_CLIENT_MAJOR_VERSION=`eval mysql -V | cut -d' ' -f6 | cut -d'.' -f1` >> $SETUP_LOG 2>&1
DB_CLIENT_MINOR_VERSION=`eval mysql -V | cut -d' ' -f6 | cut -d'.' -f2` >> $SETUP_LOG 2>&1
echo "Your MySQL client seems to be part of MySQL version $DB_CLIENT_MAJOR_VERSION.$DB_CLIENT_MINOR_VERSION."
echo "MySQL client distribution version $DB_CLIENT_MAJOR_VERSION.$DB_CLIENT_MINOR_VERSION." >> $SETUP_LOG
# Ensure mysql distribution is 4.1 or higher
if [ $DB_CLIENT_MAJOR_VERSION -gt 4 ]
then
res=1
else
if [ $DB_CLIENT_MAJOR_VERSION -eq 4 ]
then
if [ $DB_CLIENT_MINOR_VERSION -eq 1 ]
then
res=1
else
res=0
fi
else
res=0
fi
fi
if [ $res -eq 0 ]
then
# Not 4.1 or higher, ask user to contnue ?
echo "Your computer does not seem to be compliant with MySQL 4.1 or higher."
echo -n "Do you wish to continue (y/[n])?"
read ligne
if [ "$ligne" = "y" ]
then
echo "Ensure your database server is running MySQL 4.1 or higher !"
echo "Ensure also this computer is able to connect to your MySQL server !"
else
echo "Installation aborted !"
exit 1
fi
else
echo "Your computer seems to be running MySQL 4.1 or higher, good ;-)"
echo "Computer seems to be running MySQL 4.1 or higher" >> $SETUP_LOG
fi
echo
# Ask user for database server host
res=0
while [ $res -eq 0 ]
do
echo -n "Which host is running database server [$DB_SERVER_HOST] ?"
read ligne
if [ -z "$ligne" ]
then
res=1
else
DB_SERVER_HOST="$ligne"
res=1
fi
done
echo "OK, database server is running on host $DB_SERVER_HOST ;-)"
echo "Database server is running on host $DB_SERVER_HOST" >> $SETUP_LOG
echo
# Ask user for database server port
res=0
while [ $res -eq 0 ]
do
echo -n "On which port is running database server [$DB_SERVER_PORT] ?"
read ligne
if [ -z "$ligne" ]
then
res=1
else
DB_SERVER_PORT="$ligne"
res=1
fi
done
echo "OK, database server is running on port $DB_SERVER_PORT ;-)"
echo "Database server is running on port $DB_SERVER_PORT" >> $SETUP_LOG
echo
echo
echo "+----------------------------------------------------------+"
echo "| Checking for Apache web server daemon... |"
echo "+----------------------------------------------------------+"
echo
echo "Checking for Apache web server daemon" >> $SETUP_LOG
# Try to find Apache daemon
if [ -z "$APACHE_BIN" ]
then
APACHE_BIN_FOUND=`which httpd 2>/dev/null`
if [ -z "$APACHE_BIN_FOUND" ]
then
APACHE_BIN_FOUND=`which apache 2>/dev/null`
if [ -z "$APACHE_BIN_FOUND" ]
then
APACHE_BIN_FOUND=`which apache2 2>/dev/null`
fi
fi
fi
echo "Found Apache daemon $APACHE_BIN_FOUND" >> $SETUP_LOG
# Ask user's confirmation
res=0
while [ $res -eq 0 ]
do
echo -n "Where is Apache daemon binary [$APACHE_BIN_FOUND] ?"
read ligne
if [ -z "$ligne" ]
then
APACHE_BIN=$APACHE_BIN_FOUND
else
APACHE_BIN="$ligne"
fi
# Ensure file exists and is executable
if [ -x $APACHE_BIN ]
then
res=1
else
echo "*** ERROR: $APACHE_BIN is not executable !"
res=0
fi
# Ensure file is not a directory
if [ -d $APACHE_BIN ]
then
echo "*** ERROR: $APACHE_BIN is a directory !"
res=0
fi
done
echo "OK, using Apache daemon $APACHE_BIN ;-)"
echo "Using Apache daemon $APACHE_BIN" >> $SETUP_LOG
echo
echo
echo "+----------------------------------------------------------+"
echo "| Checking for Apache main configuration file... |"
echo "+----------------------------------------------------------+"
echo
# Try to find Apache main configuration file
echo "Checking for Apache main configuration file" >> $SETUP_LOG
if [ -z "$APACHE_CONFIG_FILE" ]
then
APACHE_ROOT=`eval $APACHE_BIN -V | grep "HTTPD_ROOT" | cut -d'=' -f2 | tr -d '"'`
echo "Found Apache HTTPD_ROOT $APACHE_ROOT" >> $SETUP_LOG
APACHE_CONFIG=`eval $APACHE_BIN -V | grep "SERVER_CONFIG_FILE" | cut -d'=' -f2 | tr -d '"'`
echo "Found Apache SERVER_CONFIG_FILE $APACHE_CONFIG" >> $SETUP_LOG
if [ -e $APACHE_CONFIG ]
then
APACHE_CONFIG_FILE_FOUND="$APACHE_CONFIG"
else
APACHE_CONFIG_FILE_FOUND="$APACHE_ROOT/$APACHE_CONFIG"
fi
fi
echo "Found Apache main configuration file $APACHE_CONFIG_FILE_FOUND" >> $SETUP_LOG
# Ask user's confirmation
res=0
while [ $res -eq 0 ]
do
echo -n "Where is Apache main configuration file [$APACHE_CONFIG_FILE_FOUND] ?"
read ligne
if [ -z "$ligne" ]
then
APACHE_CONFIG_FILE=$APACHE_CONFIG_FILE_FOUND
else
APACHE_CONFIG_FILE="$ligne"
fi
# Ensure file is not a directory
if [ -d $APACHE_CONFIG_FILE ]
then
echo "*** ERROR: $APACHE_CONFIG_FILE is a directory !"
res=0
fi
# Ensure file exists and is readable
if [ -r $APACHE_CONFIG_FILE ]
then
res=1
else
echo "*** ERROR: $APACHE_CONFIG_FILE is not readable !"
res=0
fi
done
echo "OK, using Apache main configuration file $APACHE_CONFIG_FILE ;-)"
echo "Using Apache main configuration file $APACHE_CONFIG_FILE" >> $SETUP_LOG
echo
echo
echo "+----------------------------------------------------------+"
echo "| Checking for Apache user account... |"
echo "+----------------------------------------------------------+"
echo
# Try to find Apache main configuration file
echo "Checking for Apache user account" >> $SETUP_LOG
if [ -z "$APACHE_USER" ]
then
# Debian
if [ -f /etc/apache2/envvars ]; then
. /etc/apache2/envvars
APACHE_USER_FOUND=$APACHE_RUN_USER
else
APACHE_USER_FOUND=`cat $APACHE_CONFIG_FILE | grep "User " | tail -1 | cut -d' ' -f2`
fi
fi
echo "Found Apache user account $APACHE_USER_FOUND" >> $SETUP_LOG
# Ask user's confirmation
res=0
while [ $res -eq 0 ]
do
echo -n "Which user account is running Apache web server [$APACHE_USER_FOUND] ?"
read ligne
if [ -z "$ligne" ]
then
APACHE_USER=$APACHE_USER_FOUND
else
APACHE_USER="$ligne"
fi
# Ensure group exist in /etc/passwd
if [ `cat /etc/passwd | grep $APACHE_USER | wc -l` -eq 0 ]
then
echo "*** ERROR: account $APACHE_USER not found in system table /etc/passwd !"
else
res=1
fi
done
echo "OK, Apache is running under user account $APACHE_USER ;-)"
echo "Using Apache user account $APACHE_USER" >> $SETUP_LOG
echo
echo
echo "+----------------------------------------------------------+"
echo "| Checking for Apache group... |"
echo "+----------------------------------------------------------+"
echo
# Try to find Apache main configuration file
echo "Checking for Apache group" >> $SETUP_LOG
if [ -z "$APACHE_GROUP" ]
then
# Debian
if [ -f /etc/apache2/envvars ]; then
. /etc/apache2/envvars
APACHE_GROUP_FOUND=$APACHE_RUN_GROUP
else
APACHE_GROUP_FOUND=`cat $APACHE_CONFIG_FILE | grep "Group" | tail -1 | cut -d' ' -f2`
fi
if [ -z "$APACHE_GROUP_FOUND" ]
then
# No group found, assume group name is the same as account
echo "No Apache user group found, assuming group name is the same as user account" >> $SETUP_LOG
APACHE_GROUP_FOUND=$APACHE_USER
fi
fi
echo "Found Apache user group $APACHE_GROUP_FOUND" >> $SETUP_LOG
# Ask user's confirmation
res=0
while [ $res -eq 0 ]
do
echo -n "Which user group is running Apache web server [$APACHE_GROUP_FOUND] ?"
read ligne
if [ -z "$ligne" ]
then
APACHE_GROUP=$APACHE_GROUP_FOUND
else
APACHE_GROUP="$ligne"
fi
# Ensure group exist in /etc/group
if [ `cat /etc/group | grep $APACHE_GROUP | wc -l` -eq 0 ]
then
echo "*** ERROR: group $APACHE_GROUP not found in system table /etc/group !"
else
res=1
fi
done
echo "OK, Apache is running under users group $APACHE_GROUP ;-)"
echo "Using Apache user group $APACHE_GROUP" >> $SETUP_LOG
echo
echo
echo "+----------------------------------------------------------+"
echo "| Checking for Apache Include configuration directory... |"
echo "+----------------------------------------------------------+"
echo
# Try to find Apache includes configuration directory
echo "Checking for Apache Include configuration directory" >> $SETUP_LOG
if [ -z "$APACHE_CONFIG_DIRECTORY" ]
then
# Works on RH/Fedora/CentOS
CONFIG_DIRECTORY_FOUND=`eval cat $APACHE_CONFIG_FILE | grep Include | grep conf.d |head -1 | cut -d' ' -f2 | cut -d'*' -f1`
if [ -n "$CONFIG_DIRECTORY_FOUND" ]
then
APACHE_CONFIG_DIRECTORY_FOUND="$APACHE_ROOT/$CONFIG_DIRECTORY_FOUND"
echo "Redhat compliant Apache Include configuration directory $CONFIG_DIRECTORY_FOUND" >> $SETUP_LOG
else
APACHE_CONFIG_DIRECTORY_FOUND=""
echo "Not found Redhat compliant Apache Include configuration directory" >> $SETUP_LOG
fi
if ! [ -d $APACHE_CONFIG_DIRECTORY_FOUND ]
then
# Works on Debian/Ubuntu
CONFIG_DIRECTORY_FOUND=`eval cat $APACHE_CONFIG_FILE | grep Include | grep conf.d |head -1 | cut -d' ' -f2 | cut -d'[' -f1`
if [ -n "$CONFIG_DIRECTORY_FOUND" ]
then
APACHE_CONFIG_DIRECTORY_FOUND="$APACHE_ROOT/$CONFIG_DIRECTORY_FOUND"
echo "Debian compliant Apache Include configuration directory $CONFIG_DIRECTORY_FOUND" >> $SETUP_LOG
else
APACHE_CONFIG_DIRECTORY_FOUND=""
echo "Not found Debian compliant Apache Include configuration directory" >> $SETUP_LOG
fi
fi
fi
echo "Found Apache Include configuration directory $APACHE_CONFIG_DIRECTORY_FOUND" >> $SETUP_LOG
# Ask user's confirmation
echo "Setup found Apache Include configuration directory in"
echo "$APACHE_CONFIG_DIRECTORY_FOUND."
echo "Setup will put OCS Inventory NG Apache configuration in this directory."
res=0
while [ $res -eq 0 ]
do
echo -n "Where is Apache Include configuration directory [$APACHE_CONFIG_DIRECTORY_FOUND] ?"
read ligne
if [ -z "$ligne" ]
then
APACHE_CONFIG_DIRECTORY=$APACHE_CONFIG_DIRECTORY_FOUND
else
APACHE_CONFIG_DIRECTORY="$ligne"
fi
# Ensure file is a directory
if [ -d $APACHE_CONFIG_DIRECTORY ]
then
res=1
else
echo "*** ERROR: $APACHE_CONFIG_DIRECTORY is not a directory !"
res=0
fi
# Ensure directory exists and is writable
if [ -w $APACHE_CONFIG_DIRECTORY ]
then
res=1
else
echo "*** ERROR: $APACHE_CONFIG_DIRECTORY is not writable !"
res=0
fi
done
echo "OK, Apache Include configuration directory $APACHE_CONFIG_DIRECTORY found ;-)"
echo "Using Apache Include configuration directory $APACHE_CONFIG_DIRECTORY" >> $SETUP_LOG
echo
echo
echo "+----------------------------------------------------------+"
echo "| Checking for PERL Interpreter... |"
echo "+----------------------------------------------------------+"
echo
echo "Checking for PERL Interpreter" >> $SETUP_LOG
if [ -z "$PERL_BIN" ]
then
echo "PERL Interpreter not found !"
echo "PERL Interpreter not found" >> $SETUP_LOG
echo "OCS Inventory NG is not able to work without PERL Interpreter."
echo "Setup manually PERL first."
echo "Installation aborted !"
echo "installation aborted" >> $SETUP_LOG
exit 1
else
echo "Found PERL Intrepreter at <$PERL_BIN> ;-)"
echo "Found PERL Intrepreter at <$PERL_BIN>" >> $SETUP_LOG
fi
# Ask user's confirmation
res=0
while [ $res -eq 0 ]
do
echo -n "Where is PERL Intrepreter binary [$PERL_BIN] ?"
read ligne
if [ -n "$ligne" ]
then
PERL_BIN="$ligne"
fi
# Ensure file exists and is executable
if [ -x $PERL_BIN ]
then
res=1
else
echo "*** ERROR: $PERL_BIN is not executable !"
res=0
fi
# Ensure file is not a directory
if [ -d $PERL_BIN ]
then
echo "*** ERROR: $PERL_BIN is a directory !"
res=0
fi
done
echo "OK, using PERL Intrepreter $PERL_BIN ;-)"
echo "Using PERL Intrepreter $PERL_BIN" >> $SETUP_LOG
echo
echo
echo -n "Do you wish to setup Communication server on this computer ([y]/n)?"
read ligne
if [ -z "$ligne" ] || [ "$ligne" = "y" ] || [ "$ligne" = "Y" ]
then
# Setting up Communication server
echo >> $SETUP_LOG
echo "============================================================" >> $SETUP_LOG
echo "Installing Communication server" >> $SETUP_LOG
echo "============================================================" >> $SETUP_LOG
echo
echo
echo "+----------------------------------------------------------+"
echo "| Checking for Make utility... |"
echo "+----------------------------------------------------------+"
echo
echo "Checking for Make utility" >> $SETUP_LOG
if [ -z "$MAKE" ]
then
echo "Make utility not found !"
echo "Make utility not found" >> $SETUP_LOG
echo "Setup is not able to build OCS Inventory NG Perl module."
echo "Unable to build OCS Inventory NG Perl module !" >> $SETUP_LOG
exit 1
else
echo "OK, Make utility found at <$MAKE> ;-)"
echo "Make utility found at <$MAKE>" >> $SETUP_LOG
fi
echo
echo "+----------------------------------------------------------+"
echo "| Checking for Apache mod_perl version... |"
echo "+----------------------------------------------------------+"
echo
echo "Checking for Apache mod_perl version 1.99_22 or higher"
echo "Checking for Apache mod_perl version 1.99_22 or higher" >> $SETUP_LOG
$PERL_BIN -mmod_perl2 -e 'print "mod_perl 1.99_22 or higher is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
# mod_perl 2 not found !
echo "Checking for Apache mod_perl version 1.99_21 or previous"
echo "Checking for Apache mod_perl version 1.99_21 or previous" >> $SETUP_LOG
$PERL_BIN -mmod_perl -e 'print "mod_perl 1.99_21 or previous is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
# mod_perl 1 not found => Ask user
res=0
while [ $res -eq 0 ]
do
echo "Setup is unable to determine your Apache mod_perl version."
echo "Apache must have module mod_perl enabled. As configuration differs from"
echo "mod_perl 1.99_21 or previous AND mod_perl 1.99_22 or higher, Setup must"
echo "know which release Apache is using."
echo "You can find which release you are using by running the following command"
echo " - On RPM enabled OS, rpm -q mod_perl"
echo " - On DPKG enabled OS, dpkg -l libapache*-mod-perl*"
echo "Enter 1 for mod_perl 1.99_21 or previous."
echo "Enter 2 for mod_perl 1.99_22 and higher."
echo -n "Which version of Apache mod_perl the computer is running ([1]/2) ?"
read ligne
if [ -z "$ligne" ]
then
APACHE_MOD_PERL_VERSION=1
else
APACHE_MOD_PERL_VERSION=$ligne
fi
res=1
done
else
echo "Found that mod_perl version 1.99_21 or previous is available."
APACHE_MOD_PERL_VERSION=1
fi
else
echo "Found that mod_perl version 1.99_22 or higher is available."
APACHE_MOD_PERL_VERSION=2
fi
if [ $APACHE_MOD_PERL_VERSION -eq 1 ]
then
echo "OK, Apache is using mod_perl version 1.99_21 or previous ;-)"
echo "Using mod_perl version 1.99_21 or previous" >> $SETUP_LOG
else
echo "OK, Apache is using mod_perl version 1.99_22 or higher ;-)"
echo "Using mod_perl version 1.99_22 or higher" >> $SETUP_LOG
fi
echo
echo "+----------------------------------------------------------+"
echo "| Checking for Communication server log directory... |"
echo "+----------------------------------------------------------+"
echo
echo "Checking for Communication server log directory" >> $SETUP_LOG
# Ask user
res=0
while [ $res -eq 0 ]
do
echo "Communication server can create detailled logs. This logs can be enabled"
echo "by setting interger value of LOGLEVEL to 1 in Administration console"
echo "menu Configuration."
echo -n "Where to put Communication server log directory [$OCS_COM_SRV_LOG] ?"
read ligne
if [ -n "$ligne" ]
then
OCS_COM_SRV_LOG=$ligne
fi
res=1
done
echo "OK, Communication server will put logs into directory $OCS_COM_SRV_LOG ;-)"
echo "Using $OCS_COM_SRV_LOG as Communication server log directory" >> $SETUP_LOG
echo
# jump to communication server directory
echo "Entering Apache sub directory" >> $SETUP_LOG
# Check for required Perl Modules (if missing, please install before)
# - DBI 1.40 or higher
# - Apache::DBI 0.93 or higher
# - DBD::mysql 2.9004 or higher
# - Compress::Zlib 1.33 or higher
# - XML::Simple 2.12 or higher
# - Net::IP 1.21 or higher
#
echo
echo "+----------------------------------------------------------+"
echo "| Checking for required Perl Modules... |"
echo "+----------------------------------------------------------+"
echo
REQUIRED_PERL_MODULE_MISSING=0
DBI=0
APACHE_DBI=0
DBD_MYSQL=0
COMPRESS_ZLIB=0
XML_SIMPLE=0
NET_IP=0
echo "Checking for DBI PERL module..."
echo "Checking for DBI PERL module" >> $SETUP_LOG
$PERL_BIN -mDBI -e 'print "PERL module DBI is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module DBI is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
DBI=1
else
echo "Found that PERL module DBI is available."
fi
echo "Checking for Apache::DBI PERL module..."
echo "Checking for Apache::DBI PERL module" >> $SETUP_LOG
$PERL_BIN -mApache::DBI -e 'print "PERL module Apache::DBI is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module Apache::DBI is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
APACHE_DBI=1
else
echo "Found that PERL module Apache::DBI is available."
fi
echo "Checking for DBD::mysql PERL module..."
echo "Checking for DBD::mysql PERL module" >> $SETUP_LOG
$PERL_BIN -mDBD::mysql -e 'print "PERL module DBD::mysql is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module DBD::mysql is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
DBD_MYSQL=1
else
echo "Found that PERL module DBD::mysql is available."
fi
echo "Checking for Compress::Zlib PERL module..."
echo "Checking for Compress::Zlib PERL module" >> $SETUP_LOG
$PERL_BIN -mCompress::Zlib -e 'print "PERL module Compress::Zlib is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module Compress::Zlib is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
COMPRESS_ZLIB=1
else
echo "Found that PERL module Compress::Zlib is available."
fi
echo "Checking for XML::Simple PERL module..."
echo "Checking for XML::Simple PERL module" >> $SETUP_LOG
$PERL_BIN -mXML::Simple -e 'print "PERL module XML::Simple is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module XML::Simple is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
XML_SIMPLE=1
else
echo "Found that PERL module XML::Simple is available."
fi
echo "Checking for Net::IP PERL module..."
echo "Checking for Net::IP PERL module" >> $SETUP_LOG
$PERL_BIN -mNet::IP -e 'print "PERL module Net::IP is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module Net::IP is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
NET_IP=1
else
echo "Found that PERL module Net::IP is available."
fi
if [ $REQUIRED_PERL_MODULE_MISSING -ne 0 ]
then
echo "*** ERROR: There is one or more required PERL modules missing on your computer !"
echo "Please, install missing PERL modules first."
echo " "
echo "OCS setup.sh can install perl module from packages for you"
echo "The script will use the native package from your operating system like apt or rpm"
echo -n "Do you wish to continue (y/[n])?"
read ligne
if [ "$ligne" = "y" ] || [ "$ligne" = "Y" ]
then
case $UNIX_DISTRIBUTION in
"redhat")
echo "RedHat based automatic installation"
if [ $DBI=1 ]
then
PACKAGE="$PACKAGE perl-DBI"
fi
if [ $APACHE_DBI=1 ]
then
PACKAGE="$PACKAGE perl-Apache-DBI"
fi
if [ $DBD_MYSQL=1 ]
then
PACKAGE="$PACKAGE perl-DBD-MySQL"
fi
if [ $COMPRESS_ZLIB=1 ]
then
PACKAGE="$PACKAGE perl-Compress-Zlib"
fi
if [ $XML_SIMPLE=1 ]
then
PACKAGE="$PACKAGE perl-XML-Simple"
fi
if [ $NET_IP=1 ]
then
PACKAGE="$PACKAGE perl-Net-IP"
fi
yum update
yum install $PACKAGE
if [ $? != 0 ]
then
echo "Installation aborted !"
echo "Installation script encounter problems to install packages !"
echo "One or more required PERL modules missing !" >> $SETUP_LOG
echo "Installation aborted" >> $SETUP_LOG
exit 1
fi
echo "All packages have been installed on this computer"
;;
"debian")
if [ -f /usr/bin/apt-get ]
then
echo "Debian based automatic installation"
if [ $DBI=1 ]
then
PACKAGE="$PACKAGE libdbi-perl"
fi
if [ $APACHE_DBI=1 ]
then
PACKAGE="$PACKAGE libapache-dbi-perl"
fi
if [ $DBD_MYSQL=1 ]
then
PACKAGE="$PACKAGE libdbd-mysql-perl"
fi
if [ $COMPRESS_ZLIB=1 ]
then
PACKAGE="$PACKAGE libcompress-zlib-perl"
fi
if [ $XML_SIMPLE=1 ]
then
PACKAGE="$PACKAGE libxml-simple-perl"
fi
if [ $NET_IP=1 ]
then
PACKAGE="$PACKAGE libnet-ip-perl"
fi
apt-get update
apt-get install $PACKAGE
if [ $? != 0 ]
then
echo "Installation aborted !"
echo "Installation script encounter problems to install packages !"
echo "One or more required PERL modules missing !" >> $SETUP_LOG
echo "Installation aborted" >> $SETUP_LOG
exit 1
fi
echo "All packages have been installed on this computer"
else
echo "Installation aborted !"
echo "Installation script cannot run apt-get utility !"
echo "One or more required PERL modules missing !" >> $SETUP_LOG
echo "Installation aborted" >> $SETUP_LOG
exit 1
fi
;;
*)
echo "Installation aborted !"
echo "Installation script cannot find missing packages for your distribution"
echo "One or more required PERL modules missing !" >> $SETUP_LOG
echo "Installation aborted" >> $SETUP_LOG
exit 1
;;
esac
else
echo "Installation aborted !"
echo "Please, install missing PERL modules first."
echo "One or more required PERL modules missing !" >> $SETUP_LOG
echo "Installation aborted" >> $SETUP_LOG
exit 1
fi
fi
# Check for optional Perl Modules
# - SOAP::Lite 0.65, not required, used only in web service
# - XML::Entities 0.02, not required, used only in web service
#
echo
echo "+----------------------------------------------------------+"
echo "| Checking for optional Perl Modules... |"
echo "+----------------------------------------------------------+"
echo
echo "Checking for SOAP::Lite PERL module..."
echo "Checking for SOAP::Lite PERL module" >> $SETUP_LOG
$PERL_BIN -mSOAP::Lite -e 'print "PERL module SOAP::Lite is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** Warning: PERL module SOAP::Lite is not installed !"
echo "This module is only required by OCS Inventory NG SOAP Web Service."
echo -n "Do you wish to continue ([y]/n] ?"
read ligne
if [ -z "$ligne" ] || [ "$ligne" = "y" ]
then
echo "User choose to continue setup without PERL module SOAP::Lite" >> $SETUP_LOG
else
echo
echo "Installation aborted !"
echo "User choose to abort installation !" >> $SETUP_LOG
exit 1
fi
else
echo "Found that PERL module SOAP::Lite is available."
fi
echo "Checking for XML::Entities PERL module..."
echo "Checking for XML::Entities PERL module" >> $SETUP_LOG
$PERL_BIN -mXML::Entities -e 'print "PERL module XML::Entities is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** Warning: PERL module XML::Entities is not installed !"
echo "This module is only required by OCS Inventory NG SOAP Web Service."
echo -n "Do you wish to continue ([y]/n] ?"
read ligne
if [ -z "$ligne" ] || [ "$ligne" = "y" ]
then
echo "User choose to continue setup without PERL module XML::Entities" >> $SETUP_LOG
else
echo
echo "Installation aborted !"
echo "User choose to abort installation !" >> $SETUP_LOG
exit 1
fi
else
echo "Found that PERL module XML::Entities is available."
fi
echo
echo
echo "+----------------------------------------------------------+"
echo "| OK, looks good ;-) |"
echo "| |"
echo "| Configuring Communication server Perl modules... |"
echo "+----------------------------------------------------------+"
echo
echo "Configuring Communication server (perl Makefile.PL)" >> $SETUP_LOG
cd "Apache"
$PERL_BIN Makefile.PL
if [ $? -ne 0 ]
then
echo -n "Warning: Prerequisites too old ! Do you wish to continue (y/[n])?"
read ligne
if [ "$ligne" = "y" ]
then
echo "Maybe Communication server will encounter problems. Continuing anyway."
echo "Warning: Prerequisites too old ! Continuing anyway" >> $SETUP_LOG
else
echo "Installation aborted !"
exit 1
fi
fi
echo
echo "+----------------------------------------------------------+"
echo "| OK, looks good ;-) |"
echo "| |"
echo "| Preparing Communication server Perl modules... |"
echo "+----------------------------------------------------------+"
echo
echo "Preparing Communication server Perl modules (make)" >> $SETUP_LOG
$MAKE >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Prepare failed, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo
echo "+----------------------------------------------------------+"
echo "| OK, prepare finshed ;-) |"
echo "| |"
echo "| Installing Communication server Perl modules... |"
echo "+----------------------------------------------------------+"
echo
echo "Installing Communication server Perl modules (make install)" >> $SETUP_LOG
$MAKE install >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Install of Perl modules failed, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
cd ".."
echo
echo "+----------------------------------------------------------+"
echo "| OK, Communication server Perl modules install finished;-)|"
echo "| |"
echo "| Creating Communication server log directory... |"
echo "+----------------------------------------------------------+"
echo
echo "Creating Communication server log directory $OCS_COM_SRV_LOG."
echo "Creating Communication server log directory $OCS_COM_SRV_LOG" >> $SETUP_LOG
mkdir -p $OCS_COM_SRV_LOG >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to create log directory, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo
echo "Fixing Communication server log directory files permissions."
echo "Fixing Communication server log directory permissions" >> $SETUP_LOG
chown -R $APACHE_USER:$APACHE_GROUP $OCS_COM_SRV_LOG >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set log directory permissions, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
chmod -R gu+rwx $OCS_COM_SRV_LOG >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set log directory permissions, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
chmod -R o-w $OCS_COM_SRV_LOG >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set log directory permissions, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
# Log rotation, BSD style
if [ -f $NEWSYSLOG_CONF_FILE ]
then
echo "*** WARNING Please configure log rotation for files in $OCS_COM_SRV_LOG"
fi
# Log rotation, Linux flavor
if [ -d $LOGROTATE_CONF_DIR ]
then
echo "Configuring logrotate for Communication server."
echo "Configuring logrotate (ed logrotate.ocsinventory-NG)" >> $SETUP_LOG
cp etc/logrotate.d/$COM_SERVER_LOGROTATE_CONF_FILE logrotate.$COM_SERVER_LOGROTATE_CONF_FILE.local
$PERL_BIN -pi -e "s#PATH_TO_LOG_DIRECTORY#$OCS_COM_SRV_LOG#g" logrotate.$COM_SERVER_LOGROTATE_CONF_FILE.local
echo "******** Begin updated logrotate.$COM_SERVER_LOGROTATE_CONF_FILE.local ***********" >> $SETUP_LOG
cat logrotate.$COM_SERVER_LOGROTATE_CONF_FILE.local >> $SETUP_LOG
echo "******** End updated logrotate.COM_SERVER_LOGROTATE_CONF_FILE.local ***********" >> $SETUP_LOG
echo "Removing old communication server logrotate file $LOGROTATE_CONF_DIR/ocsinventory-NG"
echo "Removing old communication server logrotate file $LOGROTATE_CONF_DIR/ocsinventory-NG" >> $SETUP_LOG
rm -f "$LOGROTATE_CONF_DIR/ocsinventory-NG"
echo "Writing communication server logrotate to file $LOGROTATE_CONF_DIR/$COM_SERVER_LOGROTATE_CONF_FILE"
echo "Writing communication server logrotate to file $LOGROTATE_CONF_DIR/$COM_SERVER_LOGROTATE_CONF_FILE" >> $SETUP_LOG
cp -f logrotate.$COM_SERVER_LOGROTATE_CONF_FILE.local $LOGROTATE_CONF_DIR/$COM_SERVER_LOGROTATE_CONF_FILE >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to configure log rotation, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
fi
echo
echo
echo "+----------------------------------------------------------+"
echo "| OK, Communication server log directory created ;-) |"
echo "| |"
echo "| Now configuring Apache web server... |"
echo "+----------------------------------------------------------+"
echo
echo "To ensure Apache loads mod_perl before OCS Inventory NG Communication Server,"
echo "Setup can name Communication Server Apache configuration file"
echo "'z-$COM_SERVER_APACHE_CONF_FILE' instead of '$COM_SERVER_APACHE_CONF_FILE'."
echo "Do you allow Setup renaming Communication Server Apache configuration file"
echo -n "to 'z-$COM_SERVER_APACHE_CONF_FILE' ([y]/n) ?"
read ligne
if [ -z $ligne ] || [ "$ligne" = "y" ] || [ "$ligne" = "Y" ]
then
echo "OK, using 'z-$COM_SERVER_APACHE_CONF_FILE' as Communication Server Apache configuration file"
echo "OK, using 'z-$COM_SERVER_APACHE_CONF_FILE' as Communication Server Apache configuration file" >> $SETUP_LOG
FORCE_LOAD_AFTER_PERL_CONF=1
else
echo "OK, using '$COM_SERVER_APACHE_CONF_FILE' as Communication Server Apache configuration file"
echo "OK, using '$COM_SERVER_APACHE_CONF_FILE' as Communication Server Apache configuration file" >> $SETUP_LOG
FORCE_LOAD_AFTER_PERL_CONF=0
fi
echo "Configuring Apache web server (file $COM_SERVER_APACHE_CONF_FILE)" >> $SETUP_LOG
cp etc/ocsinventory/$COM_SERVER_APACHE_CONF_FILE $COM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#DATABASE_SERVER#$DB_SERVER_HOST#g" $COM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#DATABASE_PORT#$DB_SERVER_PORT#g" $COM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#VERSION_MP#$APACHE_MOD_PERL_VERSION#g" $COM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#PATH_TO_LOG_DIRECTORY#$OCS_COM_SRV_LOG#g" $COM_SERVER_APACHE_CONF_FILE.local
echo "******** Begin updated $COM_SERVER_APACHE_CONF_FILE.local ***********" >> $SETUP_LOG
cat $COM_SERVER_APACHE_CONF_FILE.local >> $SETUP_LOG
echo "******** End updated $COM_SERVER_APACHE_CONF_FILE.local ***********" >> $SETUP_LOG
echo "Removing old communication server configuration to file $APACHE_CONFIG_DIRECTORY/ocsinventory.conf"
echo "Removing old communication server configuration to file $APACHE_CONFIG_DIRECTORY/ocsinventory.conf" >> $SETUP_LOG
rm -f "$APACHE_CONFIG_DIRECTORY/ocsinventory.conf"
if [ $FORCE_LOAD_AFTER_PERL_CONF -eq 1 ]
then
rm -f "$APACHE_CONFIG_DIRECTORY/$COM_SERVER_APACHE_CONF_FILE"
echo "Writing communication server configuration to file $APACHE_CONFIG_DIRECTORY/z-$COM_SERVER_APACHE_CONF_FILE"
echo "Writing communication server configuration to file $APACHE_CONFIG_DIRECTORY/z-$COM_SERVER_APACHE_CONF_FILE" >> $SETUP_LOG
cp -f $COM_SERVER_APACHE_CONF_FILE.local $APACHE_CONFIG_DIRECTORY/z-$COM_SERVER_APACHE_CONF_FILE >> $SETUP_LOG 2>&1
res=$?
COM_SERVER_APACHE_CONF_FILE="z-$COM_SERVER_APACHE_CONF_FILE"
else
echo "Writing communication server configuration to file $APACHE_CONFIG_DIRECTORY/$COM_SERVER_APACHE_CONF_FILE"
echo "Writing communication server configuration to file $APACHE_CONFIG_DIRECTORY/$COM_SERVER_APACHE_CONF_FILE" >> $SETUP_LOG
cp -f $COM_SERVER_APACHE_CONF_FILE.local $APACHE_CONFIG_DIRECTORY/$COM_SERVER_APACHE_CONF_FILE >> $SETUP_LOG 2>&1
res=$?
fi
if [ $res -ne 0 ]
then
echo "*** ERROR: Unable to write $APACHE_CONFIG_DIRECTORY/$COM_SERVER_APACHE_CONF_FILE, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo
echo "+----------------------------------------------------------+"
echo "| OK, Communication server setup sucessfully finished ;-) |"
echo "| |"
echo "| Please, review $APACHE_CONFIG_DIRECTORY/$COM_SERVER_APACHE_CONF_FILE"
echo "| to ensure all is good. Then restart Apache daemon. |"
echo "+----------------------------------------------------------+"
echo
echo "Leaving Apache directory" >> $SETUP_LOG
echo "Communication server installation successfull" >> $SETUP_LOG
fi
echo
echo "Do you wish to setup Administration Server (Web Administration Console)"
echo -n "on this computer ([y]/n)?"
read ligne
if [ -z "$ligne" ] || [ "$ligne" = "y" ] || [ "$ligne" = "Y" ]
then
# Install Administration server
echo >> $SETUP_LOG
echo "============================================================" >> $SETUP_LOG
echo "Installing Administration server" >> $SETUP_LOG
echo "============================================================" >> $SETUP_LOG
echo
echo "+----------------------------------------------------------+"
echo "| Checking for Administration Server directories... |"
echo "+----------------------------------------------------------+"
echo
echo "CAUTION: Setup now install files in accordance with Filesystem Hierarchy"
echo "Standard. So, no file is installed under Apache root document directory"
echo "(Refer to Apache configuration files to locate it)."
echo "If you're upgrading from OCS Inventory NG Server 1.01 and previous, YOU"
echo "MUST REMOVE (or move) directories 'ocsreports' and 'download' from Apache"
echo "root document directory."
echo "If you choose to move directory, YOU MUST MOVE 'download' directory to"
echo "Administration Server writable/cache directory (by default"
echo "$ADM_SERVER_VAR_DIR), especialy if you use deployement feature."
echo
echo -n "Do you wish to continue ([y]/n)?"
read ligne
if [ -z "$ligne" ] || [ "$ligne" = "y" ] || [ "$ligne" = "Y" ]
then
echo "Assuming directories 'ocsreports' and 'download' removed from"
echo "Apache root document directory."
echo
else
echo "Installation aborted !"
echo
exit 1
fi
echo "Checking for Administration Server directories..." >> $SETUP_LOG
echo "Where to copy Administration Server static files for PHP Web Console"
echo -n "[$ADM_SERVER_STATIC_DIR] ?"
read ligne
if test -z $ligne
then
ADM_SERVER_STATIC_DIR=$ADM_SERVER_STATIC_DIR
else
ADM_SERVER_STATIC_DIR="$ligne"
fi
echo "OK, using directory $ADM_SERVER_STATIC_DIR to install static files ;-)"
echo "Using directory $ADM_SERVER_STATIC_DIR for static files" >> $SETUP_LOG
echo
echo "Where to create writable/cache directories for deployement packages,"
echo -n "administration console logs, IPDiscover [$ADM_SERVER_VAR_DIR] ?"
read ligne
if test -z $ligne
then
ADM_SERVER_VAR_DIR=$ADM_SERVER_VAR_DIR
else
ADM_SERVER_VAR_DIR="$ligne"
fi
echo "OK, writable/cache directory is $ADM_SERVER_VAR_DIR ;-)"
echo "Using $ADM_SERVER_VAR_DIR as writable/cache directory" >> $SETUP_LOG
echo
# Check for required Perl Modules (if missing, please install before)
# - DBI 1.40 or higher
# - DBD::mysql 2.9004 or higher
# - XML::Simple 2.12 or higher
# - Net::IP 1.21 or higher
#
echo
echo "+----------------------------------------------------------+"
echo "| Checking for required Perl Modules... |"
echo "+----------------------------------------------------------+"
echo
REQUIRED_PERL_MODULE_MISSING=0
echo "Checking for DBI PERL module..."
echo "Checking for DBI PERL module" >> $SETUP_LOG
$PERL_BIN -mDBI -e 'print "PERL module DBI is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module DBI is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
else
echo "Found that PERL module DBI is available."
fi
echo "Checking for DBD::mysql PERL module..."
echo "Checking for DBD::mysql PERL module" >> $SETUP_LOG
$PERL_BIN -mDBD::mysql -e 'print "PERL module DBD::mysql is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module DBD::mysql is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
else
echo "Found that PERL module DBD::mysql is available."
fi
echo "Checking for XML::Simple PERL module..."
echo "Checking for XML::Simple PERL module" >> $SETUP_LOG
$PERL_BIN -mXML::Simple -e 'print "PERL module XML::Simple is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module XML::Simple is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
else
echo "Found that PERL module XML::Simple is available."
fi
echo "Checking for Net::IP PERL module..."
echo "Checking for Net::IP PERL module" >> $SETUP_LOG
$PERL_BIN -mNet::IP -e 'print "PERL module Net::IP is available\n"' >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: PERL module Net::IP is not installed !"
REQUIRED_PERL_MODULE_MISSING=1
else
echo "Found that PERL module Net::IP is available."
fi
if [ $REQUIRED_PERL_MODULE_MISSING -ne 0 ]
then
echo "*** ERROR: There is one or more required PERL modules missing on your computer !"
echo "Please, install missing PERL modules first."
echo "Installation aborted !"
echo "One or more required PERL modules missing !" >> $SETUP_LOG
echo "Installation aborted" >> $SETUP_LOG
exit 1
fi
echo
echo "+----------------------------------------------------------+"
echo "| Installing files for Administration server... |"
echo "+----------------------------------------------------------+"
echo
echo "Creating PHP directory $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR."
echo "Creating PHP directory $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR" >> $SETUP_LOG
mkdir -p $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR >> $SETUP_LOG 2>&1
if [ $? != 0 ]
then
echo "*** ERROR: Unable to create ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Copying PHP files to $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR."
echo "Copying PHP files to $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR" >> $SETUP_LOG
cp -Rf ocsreports/* $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/ >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to copy files in $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Fixing permissions on directory $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR."
echo "Fixing permissions on directory $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR" >> $SETUP_LOG
# Set PHP pages directory owned by root, group Apache
chown -R root:$APACHE_GROUP $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
# Set PHP pages writable by root only
chmod -R go-w $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
# Set database configuration file dbconfig.inc.php writable by Apache
echo "Creating database configuration file $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php."
echo "Creating database configuration file $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php" >> $SETUP_LOG
rm -f $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo "> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo -n '$_SESSION["SERVEUR_SQL"]="' >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo -n "$DB_SERVER_HOST" >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo '";' >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo -n '$_SESSION["COMPTE_BASE"]="' >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo -n "$DB_SERVER_USER" >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo '";' >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo -n '$_SESSION["PSWD_BASE"]="' >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo -n "$DB_SERVER_PWD" >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo '";' >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
echo "?>" >> $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
chown root:$APACHE_GROUP $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php
chmod g+w $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/dbconfig.inc.php, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Creating IPDiscover directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR."
echo "Creating IPDiscover directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR" >> $SETUP_LOG
mkdir -p $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1
if [ $? != 0 ]
then
echo "*** ERROR: Unable to create $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Fixing permissions on directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR."
echo "Fixing permissions on directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR" >> $SETUP_LOG
# Set IPD area owned by root, group Apache
chown -R root:$APACHE_GROUP $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
# Set IPD area writable by root only
chmod -R go-w $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
# Set IPD area writable by Apache group
chmod g+w $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Creating packages directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR."
echo "Creating packages directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR" >> $SETUP_LOG
mkdir -p $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR >> $SETUP_LOG 2>&1
if [ $? != 0 ]
then
echo "*** ERROR: Unable to create ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Fixing permissions on directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR."
echo "Fixing permissions on directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR" >> $SETUP_LOG
# Set package area owned by root, group Apache
chown -R root:$APACHE_GROUP $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
# Set package area writable by root and Apache group only
chmod -R g+w,o-w $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Creating Administration server log files directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR."
echo "Creating Administration server log files directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR" >> $SETUP_LOG
mkdir -p $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR >> $SETUP_LOG 2>&1
if [ $? != 0 ]
then
echo "*** ERROR: Unable to create ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Fixing permissions on directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR."
echo "Fixing permissions on directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR" >> $SETUP_LOG
# Set log files area owned by root, group Apache
chown -R root:$APACHE_GROUP $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
# Set log files area writable by root and Apache group only
chmod -R g+w,o-w $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_LOGS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Creating Administration server scripts log files directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR."
echo "Creating Administration server scripts log files directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR" >> $SETUP_LOG
mkdir -p $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR >> $SETUP_LOG 2>&1
if [ $? != 0 ]
then
echo "*** ERROR: Unable to create ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Fixing permissions on directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR."
echo "Fixing permissions on directory $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR" >> $SETUP_LOG
# Set scripts log files area owned by root, group Apache
chown -R root:$APACHE_GROUP $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
# Set scripts log files area writable by root and Apache group only
chmod -R g+w,o-w $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_SCRIPTS_LOGS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Configuring IPDISCOVER-UTIL Perl script."
echo "Configuring IPDISCOVER-UTIL Perl script (ed ipdiscover-util.pl)" >> $SETUP_LOG
cp binutils/ipdiscover-util.pl ipdiscover-util.pl.local >> $SETUP_LOG 2>&1
$PERL_BIN -pi -e "s#localhost#$DB_SERVER_HOST#g" ipdiscover-util.pl.local
$PERL_BIN -pi -e "s#3306#$DB_SERVER_PORT#g" ipdiscover-util.pl.local
# echo "******** Begin updated ipdiscover-util.pl.local script ***********" >> $SETUP_LOG
# cat ipdiscover-util.pl.local >> $SETUP_LOG
# echo "******** End updated ipdiscover-util.pl.local script ***********" >> $SETUP_LOG
echo "Installing IPDISCOVER-UTIL Perl script."
echo "Installing IPDISCOVER-UTIL Perl script" >> $SETUP_LOG
cp ipdiscover-util.pl.local $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/ipdiscover-util.pl >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to copy files in $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Fixing permissions on IPDISCOVER-UTIL Perl script."
echo "Fixing permissions on IPDISCOVER-UTIL Perl script" >> $SETUP_LOG
chown root:$APACHE_GROUP $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/ipdiscover-util.pl >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
chmod gou+x $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR/ipdiscover-util.pl >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to set permissions on $ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo "Configuring Apache web server (file $ADM_SERVER_APACHE_CONF_FILE)" >> $SETUP_LOG
cp etc/ocsinventory/$ADM_SERVER_APACHE_CONF_FILE $ADM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#OCSREPORTS_ALIAS#$ADM_SERVER_REPORTS_ALIAS#g" $ADM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#PATH_TO_OCSREPORTS_DIR#$ADM_SERVER_STATIC_DIR/$ADM_SERVER_STATIC_REPORTS_DIR#g" $ADM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#IPD_ALIAS#$ADM_SERVER_IPD_ALIAS#g" $ADM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#PATH_TO_IPD_DIR#$ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR#g" $ADM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#PACKAGES_ALIAS#$ADM_SERVER_PACKAGES_ALIAS#g" $ADM_SERVER_APACHE_CONF_FILE.local
$PERL_BIN -pi -e "s#PATH_TO_PACKAGES_DIR#$ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_PACKAGES_DIR#g" $ADM_SERVER_APACHE_CONF_FILE.local
echo "******** Begin updated $ADM_SERVER_APACHE_CONF_FILE.local ***********" >> $SETUP_LOG
cat $ADM_SERVER_APACHE_CONF_FILE.local >> $SETUP_LOG
echo "******** End updated $ADM_SERVER_APACHE_CONF_FILE.local ***********" >> $SETUP_LOG
echo "Writing Administration server configuration to file $APACHE_CONFIG_DIRECTORY/$ADM_SERVER_APACHE_CONF_FILE"
echo "Writing communication server configuration to file $APACHE_CONFIG_DIRECTORY/$ADM_SERVER_APACHE_CONF_FILE" >> $SETUP_LOG
cp -f $ADM_SERVER_APACHE_CONF_FILE.local $APACHE_CONFIG_DIRECTORY/$ADM_SERVER_APACHE_CONF_FILE >> $SETUP_LOG 2>&1
if [ $? -ne 0 ]
then
echo "*** ERROR: Unable to write $APACHE_CONFIG_DIRECTORY/$ADM_SERVER_APACHE_CONF_FILE, please look at error in $SETUP_LOG and fix !"
echo
echo "Installation aborted !"
exit 1
fi
echo
echo "+----------------------------------------------------------+"
echo "| OK, Administration server installation finished ;-) |"
echo "| |"
echo "| Please, review $APACHE_CONFIG_DIRECTORY/$ADM_SERVER_APACHE_CONF_FILE"
echo "| to ensure all is good and restart Apache daemon. |"
echo "| |"
echo "| Then, point your browser to http://server/$ADM_SERVER_REPORTS_ALIAS"
echo "| to configure database server and create/update schema. |"
echo "+----------------------------------------------------------+"
echo
echo "Administration server installation successfull" >> $SETUP_LOG
fi
echo
echo "Setup has created a log file $SETUP_LOG. Please, save this file."
echo "If you encounter error while running OCS Inventory NG Management server,"
echo "we can ask you to show us his content !"
echo
echo "DON'T FORGET TO RESTART APACHE DAEMON !"
echo
echo "Enjoy OCS Inventory NG ;-)"
echo
exit 0
OCSNG_UNIX_SERVER-2.0.5/ocsreports 0040755 0001750 0001750 00000000000 11736060565 0016065 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend 0040755 0001750 0001750 00000000000 11736060505 0017446 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/AUTH 0040755 0001750 0001750 00000000000 11736060520 0020204 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/AUTH/methode 0040755 0001750 0001750 00000000000 11736060520 0021631 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/AUTH/methode/always_ok.php 0100755 0001750 0001750 00000001035 11736060505 0024414 0 ustar 00guigui guigui
OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/AUTH/methode/ldap.php 0100755 0001750 0001750 00000011243 11736060505 0023345 0 ustar 00guigui guigui from original OCS code.
*
* I'm fetching a few LDAP attributes to fill in the user record, namely sn,cn,givenname and mail.
*
*
*
**/
connexion_local_read();
$sql="select substr(NAME,7) as NAME,TVALUE from config where NAME like '%s'";
$arg=array('%CONEX%');
$res=mysql2_query_secure($sql,$_SESSION['OCS']["readServer"],$arg);
while($item = mysql_fetch_object($res)){
$config[$item->NAME]=$item->TVALUE;
define ($item->NAME,$item->TVALUE);
}
// copies the config values to the session area
$_SESSION['OCS']['config']=$config;
$login_successful=verif_pw_ldap($login, $mdp);
$cnx_origine="LDAP";
$user_group="LDAP";
function verif_pw_ldap($login, $pw) {
$info = search_on_loginnt($login);
if ($info["nbResultats"]!=1)
return ("BAD LOGIN OR PASSWORD"); // login does't exist
return (ldap_test_pw($info[0]["dn"], $pw) ? "OK" : "BAD LOGIN OR PASSWORD");
}
function search_on_loginnt($login) {
$f1_name=$_SESSION['OCS']['config']['LDAP_CHECK_FIELD1_NAME'];
$f2_name=$_SESSION['OCS']['config']['LDAP_CHECK_FIELD2_NAME'];
// default attributes for query
$attributs = array("dn", "cn", "givenname", "sn", "mail", "title");
// search for the custom user level attributes if they're defined
if ($f1_name != '')
{
array_push($attributs, $f1_name);
}
if ($f2_name != '')
{
array_push($attributs, $f2_name);
}
$ds = ldap_connection ();
$filtre = "(".LOGIN_FIELD."={$login})";
$sr = @ldap_search($ds,DN_BASE_LDAP,$filtre,$attributs);
$lce = @ldap_count_entries($ds,$sr);
$info = @ldap_get_entries($ds,$sr);
@ldap_close($ds);
$info["nbResultats"] = $lce;
// save user fields in session
$_SESSION['OCS']['details']['givenname']=$info[0]['givenname'][0];
$_SESSION['OCS']['details']['sn']=$info[0]['sn'][0];
$_SESSION['OCS']['details']['cn']=$info[0]['cn'][0];
$_SESSION['OCS']['details']['mail']=$info[0]['mail'][0];
$_SESSION['OCS']['details']['title']=$info[0]['title'][0];
// if the extra attributes are there, save them as well
/*ORIGINAL CODE BEGINS
if ($info[0][$f1_name][0] != '')
{
$_SESSION['OCS']['details'][$f1_name]=$info[0][$f1_name][0];
}
if ($info[0][$f2_name][0] != '')
{
$_SESSION['OCS']['details'][$f2_name]=$info[0][$f2_name][0];
}
ORIGINAL CODE ENDS*/
//NEW CODE
if ($info[0][$f1_name][0] != '')
{
//attribute name 'memberof' is for group searching
//FIXME: casing? -> 'memberOf'
if ($f1_name == "memberof")
{ //this is to store the entire array instead of just the first string
//may be redundant and could be simplified, but it works.
$_SESSION['OCS']['details'][$f1_name]=$info[0][$f1_name];
} else {
$_SESSION['OCS']['details'][$f1_name]=$info[0][$f1_name][0];
}
}
if ($info[0][$f2_name][0] != '')
{
if ($f2_name == "memberof")
{
$_SESSION['OCS']['details'][$f2_name]=$info[0][$f2_name];
} else {
$_SESSION['OCS']['details'][$f2_name]=$info[0][$f2_name][0];
}
}
//END NEW CODE
return $info;
}
function ldap_test_pw($dn, $pw) {
$ds = ldap_connection ();
if (!$ds) { // avec ldap 2.x.x, ldap_connect est tjrs ok. La connection n'est ouverte qu'au bind
$r = false;
} else {
@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, LDAP_PROTOCOL_VERSION);
$r = @ldap_bind($ds, $dn, $pw);
@ldap_close($ds);
return $r;
}
}
function ldap_connection (){
$ds = ldap_connect(LDAP_SERVEUR,LDAP_PORT);
// Set the LDAP version
// add by acop http://forums.ocsinventory-ng.org/viewtopic.php?pid=35261
@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, LDAP_PROTOCOL_VERSION);
@ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
if (ROOT_DN != ''){
$b = @ldap_bind($ds, ROOT_DN, ROOT_PW);
}else //Anonymous bind
$b = @ldap_bind($ds);
if (!$b)
return false;
else
return $ds;
}
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/AUTH/methode/local.php 0100644 0001750 0001750 00000002012 11736060505 0023506 0 ustar 00guigui guigui id)){
$login_successful = "OK";
$user_group=$rowOp -> user_group;
$type_log='CONNEXION';
}else{
$login_successful = $l->g(180);
$type_log='BAD CONNEXION';
}
$value_log='USER:'.$login;
$cnx_origine="LOCAL";
addLog( $type_log,$value_log);
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/AUTH/methode/cas.php 0100644 0001750 0001750 00000001443 11736060505 0023171 0 ustar 00guigui guigui client(CAS_VERSION_2_0,$cas_host,$cas_port,$cas_uri);
$cas->forceAuthentication();
$login = $cas->getUser();
$mdp = "";
if ($login){
$login_successful = "OK";
$cnx_origine="CAS";
$user_group="CAS";
}
?>
OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/AUTH/auth.php 0100644 0001750 0001750 00000007032 11736060505 0021737 0 ustar 00guigui guigui Connexion LOGIN/PASSWD on OCS base
* => Connexion LOGIN/PASSWD on LDAP
* If you want add you method to connect to ocs
* add your page on /require and modify $list_methode
*
*/
require_once(BACKEND.'require/connexion.php');
//If you want a html form for the connexion
//put $affich_method='HTML'
$affich_method='HTML';
//If you use an SSO connexion
//use this configuration
//$affich_method='SSO';
//$list_methode=array(0=>"always_ok.php");
// Author: FranciX
// http://forums.ocsinventory-ng.org/viewtopic.php?pid=30974
//If you use an CAS connexion
//use this configuration
//$affich_method='CAS';
//$list_methode=array(0=>"always_ok.php");
//list of the identification method
//3 pages by default: ldap.php => LDAP Connexion
// local.php => Local connexion on ocs base
// always_ok.php => connexion always ok
$list_methode=array(0=>"local.php");
// $list_methode=array(0=>"ldap.php");
if ($affich_method == 'HTML' and isset($protectedPost['Valid_CNX']) and trim($protectedPost['LOGIN']) != ""){
$login=$protectedPost['LOGIN'];
$mdp=$protectedPost['PASSWD'];
}elseif ($affich_method == 'CAS'){
require_once('methode/cas.php');
}elseif ($affich_method != 'HTML' and isset($_SERVER['PHP_AUTH_USER'])){
$login=$_SERVER['PHP_AUTH_USER'];
$mdp=$_SERVER['PHP_AUTH_PW'];
}elseif($affich_method == 'SSO' and isset($_SERVER['HTTP_AUTH_USER'])){
$login=$_SERVER['HTTP_AUTH_USER'];
$mdp='NO_PASSWD';
}
if (isset($login) && isset($mdp)){
$i=0;
while ($list_methode[$i]){
require_once('methode/'.$list_methode[$i]);
if ($login_successful == "OK")
break;
$i++;
}
}
// login ok?
if($login_successful == "OK" and isset($login_successful)) {
$_SESSION['OCS']["loggeduser"]=$login;
$_SESSION['OCS']['cnx_origine']=$cnx_origine;
$_SESSION['OCS']['user_group']=$user_group;
unset($protectedGet);
}else{
//show HTML form
if ($affich_method == 'HTML'){
$icon_head='NO';
require_once (HEADER_HTML);
if (isset($protectedPost['Valid_CNX'])){
$login_successful = $l->g(180);
msg_error($login_successful);
flush();
//you can't send a new login/passwd before 2 seconds
sleep(2);
}
echo "
";
$name_field=array("LOGIN","PASSWD");
$tab_name=array($l->g(24).": ",$l->g(217).":");
$type_field= array(0,4);
$value_field=array($protectedPost['LOGIN'],'');
$tab_typ_champ=show_field($name_field,$type_field,$value_field);
foreach ($tab_typ_champ as $id=>$values){
$tab_typ_champ[$id]['CONFIG']['SIZE']=20;
}
if (DEMO) {
msg_info($l->g(24).": ".DEMO_LOGIN."
".$l->g(217).": ".DEMO_PASSWD);
}
if (isset($tab_typ_champ)){
$css='mlt_bordure';
tab_modif_values($tab_name,$tab_typ_champ,$tab_hidden,$title="",$comment="",$name_button="CNX",$showbutton='BUTTON',$form_name);
}
require_once(FOOTER_HTML);
die();
}else{
header('WWW-Authenticate: Basic realm="OcsinventoryNG"');
header('HTTP/1.0 401 Unauthorized');
die();
}
}
?>
OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/identity 0040755 0001750 0001750 00000000000 11736060520 0021274 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/identity/methode 0040755 0001750 0001750 00000000000 11736060520 0022721 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/identity/methode/ldap.php 0100755 0001750 0001750 00000015433 11736060505 0024442 0 ustar 00guigui guigui %%,'tag_show'=>array(%,%,%,%,%...))
*
* else, an error code is returned.
*
* CONEX_LDAP_CHECK_FIELD1_NAME="thisGuyIsAdmin"
* CONEX_LDAP_CHECK_FIELD1_VALUE="0"
* CONEX_LDAP_CHECK_FIELD1_ROLE="user"
* CONEX_LDAP_CHECK_FIELD2_NAME="thisGuyIsAdmin"
* CONEX_LDAP_CHECK_FIELD2_VALUE="1"
* CONEX_LDAP_CHECK_FIELD2_ROLE="sadmin"
* In logical terms:
* if thisGuyIsAdmin=0 then
* role=user
* else if thisGuyIsAdmin=1 then
* role=sadmin
*
* Note: the default user levels in OCS currently are "admin", "ladmin" and "sadmin". The above is just an example.
*
*/
require_once ('require/function_files.php');
// page name
$name="ldap.php";
connexion_local_read();
// select the main database
mysql_select_db($db_ocs,$link_ocs);
// retrieve LDAP-related config values into an array
$sql="select substr(NAME,7) as NAME,TVALUE from config where NAME like '%s'";
$arg=array("%CONEX%");
$res=mysql2_query_secure($sql, $link_ocs,$arg);
while($item = mysql_fetch_object($res)){
$config[$item->NAME]=$item->TVALUE;
// define ($item->NAME,$item->TVALUE);
}
// checks if the user already exists
$reqOp="SELECT new_accesslvl as accesslvl FROM operators WHERE id='%s'";
$argOp=array($_SESSION['OCS']["loggeduser"]);
$resOp=mysql2_query_secure($reqOp, $link_ocs,$argOp);
// defines the user level according to specific LDAP attributes
// default: normal user
$defaultRole=$config['LDAP_CHECK_DEFAULT_ROLE'];
// Checks if the custom fields are valid
$f1_name=$config['LDAP_CHECK_FIELD1_NAME'];
$f2_name=$config['LDAP_CHECK_FIELD2_NAME'];
$f1_value=$_SESSION['OCS']['details'][$f1_name];
$f2_value=$_SESSION['OCS']['details'][$f2_name];
if ($f1_value != '')
{
//NEW CODE BELOW
//FIXME: casing? -> 'memberOf'
if ($f1_name == "memberof")
{
//the idea here is to iterate through the groups array looking for a match
//if we find it, unset the array and store only the match, else leave as it is
foreach($f1_value as $group){
if ($group == $config['LDAP_CHECK_FIELD1_VALUE'])
{
$f1_value=array();
$f1_value=$group;
}
}
}
//the if below is now redundant since we already know that we have a match
//the coding can be improved, but the logic works.
//END NEW CODE
if ($f1_value == $config['LDAP_CHECK_FIELD1_VALUE'])
{
$defaultRole=$config['LDAP_CHECK_FIELD1_ROLE'];
}
}
if ($f2_value != '')
{
//NEW CODE BELOW
if ($f2_name == "memberof")
{
foreach($f2_value as $group){
if ($group == $config['LDAP_CHECK_FIELD2_VALUE'])
{
$f2_value=array();
$f2_value=$group;
}
}
}
//END NEW CODE
if ($f2_value == $config['LDAP_CHECK_FIELD2_VALUE'])
{
$defaultRole=$config['LDAP_CHECK_FIELD2_ROLE'];
}
}
// uncomment this section for DEBUG
// note: cannot use the global DEBUG variable because this happens before the toggle is available.
/*
echo ("field1: ".$f1_name." value=".$f1_value." condition: ".$config['LDAP_CHECK_FIELD1_VALUE']." role=".$config['LDAP_CHECK_FIELD1_ROLE']." level=".$config['LDAP_CHECK_FIELD1_USERLEVEL']."
");
echo ("field2: ".$item['CONEX_LDAP_CHECK_FIELD2_NAME']." value=".$f2_value." condition: ".$config['LDAP_CHECK_FIELD2_VALUE']." role=".$config['LDAP_CHECK_FIELD2_ROLE']." level=".$config['LDAP_CHECK_FIELD2_USERLEVEL']."
");
echo ("user: ".$_SESSION['OCS']["loggeduser"]." will have level=".$defaultLevel." and role=".$defaultRole."
");
*/
//if defaultRole is define
if (isset($defaultRole) and $defaultRole != ''){
// if it doesn't exist, create the user record
if (!mysql_fetch_object($resOp)) {
$reqInsert="INSERT INTO operators (
ID,
FIRSTNAME,
LASTNAME,
PASSWD,
COMMENTS,
NEW_ACCESSLVL,
EMAIL,
USER_GROUP
)
VALUES ('%s','%s', '%s', '%s','%s', '%s', '%s', '%s')";
$arg_insert=array($_SESSION['OCS']["loggeduser"],
$_SESSION['OCS']['details']['givenname'],
$_SESSION['OCS']['details']['sn'],
"",
"LDAP",
$defaultRole,
$_SESSION['OCS']['details']['mail'],
"NULL"
);
}
else
{
// else update it
$reqInsert="UPDATE operators SET
NEW_ACCESSLVL='%s',
EMAIL='%s'
WHERE ID='%s'";
$arg_insert=array($defaultRole,
$_SESSION['OCS']['details']['mail'],
$_SESSION['OCS']["loggeduser"]);
}
connexion_local_write();
// select the main database
mysql_select_db($db_ocs,$link_ocs);
// Execute the query to insert/update the user record
mysql2_query_secure($reqInsert,$link_ocs,$arg_insert);
// repeat the query and define the needed OCS variables
// note: original OCS code below
connexion_local_read();
// select the main database
mysql_select_db($db_ocs,$link_ocs);
$resOp=mysql2_query_secure($reqOp, $link_ocs,$argOp);
$rowOp=mysql_fetch_object($resOp);
if (isset($rowOp -> accesslvl)){
$lvluser=$rowOp -> accesslvl;
$ms_cfg_file=$_SESSION['OCS']['CONF_PROFILS_DIR'].$lvluser."_config.txt";
$search=array('RESTRICTION'=>'MULTI');
$res=read_configuration($ms_cfg_file,$search);
$restriction=$res['RESTRICTION']['GUI'];
//if this user has RESTRICTION
//search all tag for this user
if ($restriction == 'YES'){
$sql="select tag from tags where login='%s'";
$arg=array($_SESSION['OCS']["loggeduser"]);
$res=mysql2_query_secure($sql, $link_ocs,$arg);
while ($row=mysql_fetch_object($res)){
$list_tag[$row->tag]=$row->tag;
}
if (!isset($list_tag))
$ERROR=$l->g(893);
}elseif (($restriction != 'NO'))
$ERROR=$restriction;
}else
$ERROR=$l->g(894);
}else
$ERROR=$l->g(1278);
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/identity/methode/local.php 0100755 0001750 0001750 00000003725 11736060505 0024615 0 ustar 00guigui guigui %%,'tag_show'=>array(%,%,%,%,%...))
* si une erreur est rencontr�e, on retourne un code erreur
*
*/
require_once ('require/function_files.php');
//nom de la page
$name="local.php";
connexion_local_read();
mysql_select_db($db_ocs,$link_ocs);
//recherche du niveau de droit de l'utilisateur
$reqOp="SELECT new_accesslvl as accesslvl FROM operators WHERE id='%s'";
$argOp=array($_SESSION['OCS']["loggeduser"]);
$resOp=mysql2_query_secure($reqOp,$link_ocs,$argOp);
$rowOp=mysql_fetch_object($resOp);
if (isset($rowOp -> accesslvl)){
$lvluser=$rowOp -> accesslvl;
$ms_cfg_file=$_SESSION['OCS']['CONF_PROFILS_DIR'].$lvluser."_config.txt";
$search=array('RESTRICTION'=>'MULTI');
$res=read_configuration($ms_cfg_file,$search);
if (isset($res['RESTRICTION']['GUI']))
$restriction=$res['RESTRICTION']['GUI'];
else
$restriction=$res;
//Si l'utilisateur a des droits limit�s
//on va rechercher les tags sur lesquels il a des droits
if ($restriction == 'YES'){
$sql="select tag from tags where login='%s'";
$arg=array($_SESSION['OCS']["loggeduser"]);
$res=mysql2_query_secure($sql, $link_ocs,$arg);
while ($row=mysql_fetch_object($res)){
$list_tag[$row->tag]=$row->tag;
}
if (!isset($list_tag))
$ERROR=$l->g(893);
}elseif (($restriction != 'NO'))
$ERROR=$restriction;
}else
$ERROR=$l->g(894);
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/identity/identity.php 0100755 0001750 0001750 00000003422 11736060505 0023721 0 ustar 00guigui guigui "local.php");
//$list_methode=array(0=>"ldap.php");
if (!isset($_SESSION['OCS']["lvluser"])){
$i=0;
//methode pour le calcul des droits
while ($list_methode[$i]){
require_once('methode/'.$list_methode[$i]);
//on garde les erreurs pr�sentes
//entre chaque m�thode
if (isset($ERROR)){
$tab_error[$list_methode[$i]]=$ERROR;
unset($ERROR);
}
//on garde les tags qu'a le droit de voir l'utilisateur
if (isset($list_tag)){
$tab_tag[$list_methode[$i]]=$list_tag;
unset($list_tag);
}
$i++;
}
}
if (!isset($tab_tag) and $restriction != 'NO'){
$LIST_ERROR="";
foreach ($tab_error as $script=>$error){
$LIST_ERROR.=$error;
addLog('ERROR_IDENTITY',$error);
}
$_SESSION['OCS']["mesmachines"] = "NOTAG";
}elseif(isset($tab_tag)){
foreach ($list_methode as $prio=>$script){
if (isset($tab_tag[$script])){
foreach ($tab_tag[$script] as $tag=>$lbl){
$list_tag[$tag]=$tag;
$lbl_list_tag[$tag]=$lbl;
}
}
}
$mesMachines = "a.TAG IN ('".@implode("','",$list_tag)."') ";
$_SESSION['OCS']["mesmachines"] = $mesMachines;
$_SESSION['OCS']["mytag"]=$lbl_list_tag;
$_SESSION['OCS']['TAGS']=$list_tag;
}
if (isset($lvluser))
$_SESSION['OCS']["lvluser"]=$lvluser;
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/ipdiscover 0040755 0001750 0001750 00000000000 11736060520 0021612 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/ipdiscover/methode 0040755 0001750 0001750 00000000000 11736060520 0023237 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/ipdiscover/methode/local.php 0100755 0001750 0001750 00000005133 11736060505 0025126 0 ustar 00guigui guigui SUBNET]=$row->MASK;
}
$req="select distinct ipsubnet,s.name,s.id
from networks n left join subnet s on s.netid=n.ipsubnet
,accountinfo a
where a.hardware_id=n.HARDWARE_ID
and n.status='Up'";
if (isset($_SESSION['OCS']["mesmachines"])
and $_SESSION['OCS']["mesmachines"] != '' and $_SESSION['OCS']["mesmachines"] != 'NOTAG')
$req.=" and ".$_SESSION['OCS']["mesmachines"]." order by ipsubnet";
else
$req.=" union select netid,name,id from subnet";
$res=mysql2_query_secure($req, $link_ocs) or die(mysql_error($link_ocs));
while ($row=mysql_fetch_object($res)){
unset($id);
$list_subnet[]=$row -> ipsubnet;
/* foreach ($subnet_to_balcklist as $key=>$value){
if ($key == $row -> ipsubnet)
$id='--'.$l->g(703).'--';
}
*/
/*
applied again patch of revision 484 ( fix bug: https://bugs.launchpad.net/ocsinventory-ocsreports/+bug/637834 )
*/
if (is_array($subnet_to_balcklist)){
foreach ($subnet_to_balcklist as $key=>$value){
if ($key == $row -> ipsubnet)
$id='--'.$l->g(703).'--';
}
}
/*foreach ($subnet_to_balcklist as $key=>$value){
$black=explode('.',$value);
$nb=count($black);
$origine=explode('.',$row->ipsubnet);
$nb--;
unset($verif);
while ($black[$nb]){
if ($black[$nb] != $origine[$nb]){
$verif=true;
}
$nb--;
}
if (!isset($verif)){
$id='--'.$l->g(703).'--';
}
}*/
//this subnet was identify
if ($row->id != null and !isset($id)){
$list_ip[$row->id][$row->ipsubnet]=$row->name;
$list_ip['---'.$l->g(1138).'---'][$row->ipsubnet]=$row->name;
}elseif(!isset($id)){
$no_name='---'.$l->g(885).'---';
$list_ip[$no_name][$row->ipsubnet]=$no_name;
$list_ip['---'.$l->g(1138).'---'][$row->ipsubnet]=$no_name;
}else{
$list_ip[$id][$row->ipsubnet]=$id;
}
}
$id_subnet="ID";
/*if (!isset($list_ip))
$INFO="NO_IPDICOVER";*/
?>
OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/ipdiscover/ipdiscover.php 0100755 0001750 0001750 00000003174 11736060505 0024561 0 ustar 00guigui guigui "local.php");
if (!isset($_SESSION['OCS']["ipdiscover"])){
$i=0;
//methode pour le calcul des droits
while ($list_methode[$i]){
require_once('methode/'.$list_methode[$i]);
//on garde les erreurs pr�sentes
//entre chaque m�thode
/*if (isset($INFO)){
$tab_info[$list_methode[$i]]=$INFO;
unset($INFO);
}*/
//on garde les droits de l'utilisateur sur l'ipdiscover
if (isset($list_ip)){
$tab_ip[$list_methode[$i]]=$list_ip;
unset($list_ip);
}
$i++;
}
}
unset($list_ip);
if (isset($tab_ip)){
foreach ($list_methode as $prio=>$script){
if (isset($tab_ip[$script])){
foreach ($tab_ip[$script] as $ip=>$lbl){
$list_ip[$ip]=$lbl;
}
}
}
if (isset($list_ip)){
$_SESSION['OCS']["ipdiscover"]=$list_ip;
$_SESSION['OCS']["ipdiscover_methode"]=$base;
$_SESSION['OCS']["ipdiscover_id"]=$id_subnet;
$_SESSION['OCS']["subnet_ipdiscover"]=$list_subnet;
}
}
if (isset($tab_info) and !isset($_SESSION['OCS']["ipdiscover"])){
$_SESSION['OCS']["ipdiscover"]=$tab_info;
$_SESSION['OCS']["ipdiscover_methode"]=$base;
}
?>
OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require 0040755 0001750 0001750 00000000000 11736060520 0021117 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib 0040755 0001750 0001750 00000000000 11736060505 0021670 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas 0040755 0001750 0001750 00000000000 11736060520 0023143 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/PGTStorage 0040755 0001750 0001750 00000000000 11736060520 0025122 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/PGTStorage/pgt-main.php 0100644 0001750 0001750 00000010776 11736060505 0027441 0 ustar 00guigui guigui
*
* @ingroup internalPGTStorage
*/
class PGTStorage
{
/**
* @addtogroup internalPGTStorage
* @{
*/
// ########################################################################
// CONSTRUCTOR
// ########################################################################
/**
* The constructor of the class, should be called only by inherited classes.
*
* @param $cas_parent the CASclient instance that creates the current object.
*
* @protected
*/
function PGTStorage($cas_parent)
{
phpCAS::traceBegin();
if ( !$cas_parent->isProxy() ) {
phpCAS::error('defining PGT storage makes no sense when not using a CAS proxy');
}
phpCAS::traceEnd();
}
// ########################################################################
// DEBUGGING
// ########################################################################
/**
* This virtual method returns an informational string giving the type of storage
* used by the object (used for debugging purposes).
*
* @public
*/
function getStorageType()
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
/**
* This virtual method returns an informational string giving informations on the
* parameters of the storage.(used for debugging purposes).
*
* @public
*/
function getStorageInfo()
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
// ########################################################################
// ERROR HANDLING
// ########################################################################
/**
* string used to store an error message. Written by PGTStorage::setErrorMessage(),
* read by PGTStorage::getErrorMessage().
*
* @hideinitializer
* @private
* @deprecated not used.
*/
var $_error_message=FALSE;
/**
* This method sets en error message, which can be read later by
* PGTStorage::getErrorMessage().
*
* @param $error_message an error message
*
* @protected
* @deprecated not used.
*/
function setErrorMessage($error_message)
{
$this->_error_message = $error_message;
}
/**
* This method returns an error message set by PGTStorage::setErrorMessage().
*
* @return an error message when set by PGTStorage::setErrorMessage(), FALSE
* otherwise.
*
* @public
* @deprecated not used.
*/
function getErrorMessage()
{
return $this->_error_message;
}
// ########################################################################
// INITIALIZATION
// ########################################################################
/**
* a boolean telling if the storage has already been initialized. Written by
* PGTStorage::init(), read by PGTStorage::isInitialized().
*
* @hideinitializer
* @private
*/
var $_initialized = FALSE;
/**
* This method tells if the storage has already been intialized.
*
* @return a boolean
*
* @protected
*/
function isInitialized()
{
return $this->_initialized;
}
/**
* This virtual method initializes the object.
*
* @protected
*/
function init()
{
$this->_initialized = TRUE;
}
// ########################################################################
// PGT I/O
// ########################################################################
/**
* This virtual method stores a PGT and its corresponding PGT Iuo.
* @note Should never be called.
*
* @param $pgt the PGT
* @param $pgt_iou the PGT iou
*
* @protected
*/
function write($pgt,$pgt_iou)
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
/**
* This virtual method reads a PGT corresponding to a PGT Iou and deletes
* the corresponding storage entry.
* @note Should never be called.
*
* @param $pgt_iou the PGT iou
*
* @protected
*/
function read($pgt_iou)
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
/** @} */
}
// include specific PGT storage classes
include_once(dirname(__FILE__).'/pgt-file.php');
include_once(dirname(__FILE__).'/pgt-db.php');
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/PGTStorage/pgt-db.php 0100644 0001750 0001750 00000011561 11736060505 0027073 0 ustar 00guigui guigui
*
* @ingroup internalPGTStorageDB
*/
class PGTStorageDB extends PGTStorage
{
/**
* @addtogroup internalPGTStorageDB
* @{
*/
/**
* a string representing a PEAR DB URL to connect to the database. Written by
* PGTStorageDB::PGTStorageDB(), read by getURL().
*
* @hideinitializer
* @private
*/
var $_url='';
/**
* This method returns the PEAR DB URL to use to connect to the database.
*
* @return a PEAR DB URL
*
* @private
*/
function getURL()
{
return $this->_url;
}
/**
* The handle of the connection to the database where PGT's are stored. Written by
* PGTStorageDB::init(), read by getLink().
*
* @hideinitializer
* @private
*/
var $_link = null;
/**
* This method returns the handle of the connection to the database where PGT's are
* stored.
*
* @return a handle of connection.
*
* @private
*/
function getLink()
{
return $this->_link;
}
/**
* The name of the table where PGT's are stored. Written by
* PGTStorageDB::PGTStorageDB(), read by getTable().
*
* @hideinitializer
* @private
*/
var $_table = '';
/**
* This method returns the name of the table where PGT's are stored.
*
* @return the name of a table.
*
* @private
*/
function getTable()
{
return $this->_table;
}
// ########################################################################
// DEBUGGING
// ########################################################################
/**
* This method returns an informational string giving the type of storage
* used by the object (used for debugging purposes).
*
* @return an informational string.
* @public
*/
function getStorageType()
{
return "database";
}
/**
* This method returns an informational string giving informations on the
* parameters of the storage.(used for debugging purposes).
*
* @public
*/
function getStorageInfo()
{
return 'url=`'.$this->getURL().'\', table=`'.$this->getTable().'\'';
}
// ########################################################################
// CONSTRUCTOR
// ########################################################################
/**
* The class constructor, called by CASClient::SetPGTStorageDB().
*
* @param $cas_parent the CASClient instance that creates the object.
* @param $user the user to access the data with
* @param $password the user's password
* @param $database_type the type of the database hosting the data
* @param $hostname the server hosting the database
* @param $port the port the server is listening on
* @param $database the name of the database
* @param $table the name of the table storing the data
*
* @public
*/
function PGTStorageDB($cas_parent,$user,$password,$database_type,$hostname,$port,$database,$table)
{
phpCAS::traceBegin();
// call the ancestor's constructor
$this->PGTStorage($cas_parent);
if ( empty($database_type) ) $database_type = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE;
if ( empty($hostname) ) $hostname = CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME;
if ( $port==0 ) $port = CAS_PGT_STORAGE_DB_DEFAULT_PORT;
if ( empty($database) ) $database = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE;
if ( empty($table) ) $table = CAS_PGT_STORAGE_DB_DEFAULT_TABLE;
// build and store the PEAR DB URL
$this->_url = $database_type.':'.'//'.$user.':'.$password.'@'.$hostname.':'.$port.'/'.$database;
// XXX should use setURL and setTable
phpCAS::traceEnd();
}
// ########################################################################
// INITIALIZATION
// ########################################################################
/**
* This method is used to initialize the storage. Halts on error.
*
* @public
*/
function init()
{
phpCAS::traceBegin();
// if the storage has already been initialized, return immediatly
if ( $this->isInitialized() )
return;
// call the ancestor's method (mark as initialized)
parent::init();
// try to connect to the database
$this->_link = DB::connect($this->getURL());
if ( DB::isError($this->_link) ) {
phpCAS::error('could not connect to database ('.DB::errorMessage($this->_link).')');
}
var_dump($this->_link);
phpCAS::traceBEnd();
}
/** @} */
}
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/PGTStorage/pgt-file.php 0100644 0001750 0001750 00000013667 11736060505 0027436 0 ustar 00guigui guigui
*
* @ingroup internalPGTStorageFile
*/
class PGTStorageFile extends PGTStorage
{
/**
* @addtogroup internalPGTStorageFile
* @{
*/
/**
* a string telling where PGT's should be stored on the filesystem. Written by
* PGTStorageFile::PGTStorageFile(), read by getPath().
*
* @private
*/
var $_path;
/**
* This method returns the name of the directory where PGT's should be stored
* on the filesystem.
*
* @return the name of a directory (with leading and trailing '/')
*
* @private
*/
function getPath()
{
return $this->_path;
}
/**
* a string telling the format to use to store PGT's (plain or xml). Written by
* PGTStorageFile::PGTStorageFile(), read by getFormat().
*
* @private
*/
var $_format;
/**
* This method returns the format to use when storing PGT's on the filesystem.
*
* @return a string corresponding to the format used (plain or xml).
*
* @private
*/
function getFormat()
{
return $this->_format;
}
// ########################################################################
// DEBUGGING
// ########################################################################
/**
* This method returns an informational string giving the type of storage
* used by the object (used for debugging purposes).
*
* @return an informational string.
* @public
*/
function getStorageType()
{
return "file";
}
/**
* This method returns an informational string giving informations on the
* parameters of the storage.(used for debugging purposes).
*
* @return an informational string.
* @public
*/
function getStorageInfo()
{
return 'path=`'.$this->getPath().'\', format=`'.$this->getFormat().'\'';
}
// ########################################################################
// CONSTRUCTOR
// ########################################################################
/**
* The class constructor, called by CASClient::SetPGTStorageFile().
*
* @param $cas_parent the CASClient instance that creates the object.
* @param $format the format used to store the PGT's (`plain' and `xml' allowed).
* @param $path the path where the PGT's should be stored
*
* @public
*/
function PGTStorageFile($cas_parent,$format,$path)
{
phpCAS::traceBegin();
// call the ancestor's constructor
$this->PGTStorage($cas_parent);
if (empty($format) ) $format = CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT;
if (empty($path) ) $path = CAS_PGT_STORAGE_FILE_DEFAULT_PATH;
// check that the path is an absolute path
if ( $path[0] != '/' ) {
phpCAS::error('an absolute path is needed for PGT storage to file');
}
// store the path (with a leading and trailing '/')
$path = preg_replace('|[/]*$|','/',$path);
$path = preg_replace('|^[/]*|','/',$path);
$this->_path = $path;
// check the format and store it
switch ($format) {
case CAS_PGT_STORAGE_FILE_FORMAT_PLAIN:
case CAS_PGT_STORAGE_FILE_FORMAT_XML:
$this->_format = $format;
break;
default:
phpCAS::error('unknown PGT file storage format (`'.CAS_PGT_STORAGE_FILE_FORMAT_PLAIN.'\' and `'.CAS_PGT_STORAGE_FILE_FORMAT_XML.'\' allowed)');
}
phpCAS::traceEnd();
}
// ########################################################################
// INITIALIZATION
// ########################################################################
/**
* This method is used to initialize the storage. Halts on error.
*
* @public
*/
function init()
{
phpCAS::traceBegin();
// if the storage has already been initialized, return immediatly
if ( $this->isInitialized() )
return;
// call the ancestor's method (mark as initialized)
parent::init();
phpCAS::traceEnd();
}
// ########################################################################
// PGT I/O
// ########################################################################
/**
* This method returns the filename corresponding to a PGT Iou.
*
* @param $pgt_iou the PGT iou.
*
* @return a filename
* @private
*/
function getPGTIouFilename($pgt_iou)
{
phpCAS::traceBegin();
$filename = $this->getPath().$pgt_iou.'.'.$this->getFormat();
phpCAS::traceEnd($filename);
return $filename;
}
/**
* This method stores a PGT and its corresponding PGT Iou into a file. Echoes a
* warning on error.
*
* @param $pgt the PGT
* @param $pgt_iou the PGT iou
*
* @public
*/
function write($pgt,$pgt_iou)
{
phpCAS::traceBegin();
$fname = $this->getPGTIouFilename($pgt_iou);
if ( $f=fopen($fname,"w") ) {
if ( fputs($f,$pgt) === FALSE ) {
phpCAS::error('could not write PGT to `'.$fname.'\'');
}
fclose($f);
} else {
phpCAS::error('could not open `'.$fname.'\'');
}
phpCAS::traceEnd();
}
/**
* This method reads a PGT corresponding to a PGT Iou and deletes the
* corresponding file.
*
* @param $pgt_iou the PGT iou
*
* @return the corresponding PGT, or FALSE on error
*
* @public
*/
function read($pgt_iou)
{
phpCAS::traceBegin();
$pgt = FALSE;
$fname = $this->getPGTIouFilename($pgt_iou);
if ( !($f=fopen($fname,"r")) ) {
phpCAS::trace('could not open `'.$fname.'\'');
} else {
if ( ($pgt=fgets($f)) === FALSE ) {
phpCAS::trace('could not read PGT from `'.$fname.'\'');
}
fclose($f);
}
// delete the PGT file
@unlink($fname);
phpCAS::traceEnd($pgt);
return $pgt;
}
/** @} */
}
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/languages 0040755 0001750 0001750 00000000000 11736060520 0025111 5 ustar 00guigui guigui OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/languages/greek.php 0100644 0001750 0001750 00000001665 11736060505 0027006 0 ustar 00guigui guigui
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> ' ',
CAS_STR_AUTHENTICATION_WANTED
=> ' CAS!',
CAS_STR_LOGOUT
=> ' CAS!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> ' CAS. .',
CAS_STR_AUTHENTICATION_FAILED
=> ' CAS !',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> ' .
, .
, .
',
CAS_STR_SERVICE_UNAVAILABLE
=> ' `%s\' (%s).'
);
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/languages/japanese.php 0100644 0001750 0001750 00000001536 11736060505 0027474 0 ustar 00guigui guigui _strings = array(
CAS_STR_USING_SERVER
=> 'using server',
CAS_STR_AUTHENTICATION_WANTED
=> 'CASˤǧڤԤޤ',
CAS_STR_LOGOUT
=> 'CASȤޤ!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'CASФ˹ԤɬפޤưŪžʤ å³Ԥޤ',
CAS_STR_AUTHENTICATION_FAILED
=> 'CASˤǧڤ˼Ԥޤ',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> 'ǧڤǤޤǤ.
⤦٥ꥯȤå.
꤬褷ʤ ΥȤδ䤤碌Ƥ.
',
CAS_STR_SERVICE_UNAVAILABLE
=> 'ӥ `%s\' ѤǤޤ (%s).'
);
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/languages/english.php 0100644 0001750 0001750 00000001637 11736060505 0027341 0 ustar 00guigui guigui
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'using server',
CAS_STR_AUTHENTICATION_WANTED
=> 'CAS Authentication wanted!',
CAS_STR_LOGOUT
=> 'CAS logout wanted!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'You should already have been redirected to the CAS server. Click here to continue.',
CAS_STR_AUTHENTICATION_FAILED
=> 'CAS Authentication failed!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> 'You were not authenticated.
You may submit your request again by clicking here.
If the problem persists, you may contact the administrator of this site.
',
CAS_STR_SERVICE_UNAVAILABLE
=> 'The service `%s\' is not available (%s).'
);
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/languages/french.php 0100644 0001750 0001750 00000001735 11736060505 0027154 0 ustar 00guigui guigui
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'utilisant le serveur',
CAS_STR_AUTHENTICATION_WANTED
=> 'Authentication CAS ncessaire !',
CAS_STR_LOGOUT
=> 'Dconnexion demande !',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'Vous auriez du etre redirig(e) vers le serveur CAS. Cliquez ici pour continuer.',
CAS_STR_AUTHENTICATION_FAILED
=> 'Authentification CAS infructueuse !',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> 'Vous n\'avez pas t authentifi(e).
Vous pouvez soumettre votre requete nouveau en cliquant ici.
Si le problme persiste, vous pouvez contacter l\'administrateur de ce site.
',
CAS_STR_SERVICE_UNAVAILABLE
=> 'Le service `%s\' est indisponible (%s)'
);
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/languages/german.php 0100644 0001750 0001750 00000001701 11736060505 0027151 0 ustar 00guigui guigui
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'via Server',
CAS_STR_AUTHENTICATION_WANTED
=> 'CAS Authentifizierung erforderlich!',
CAS_STR_LOGOUT
=> 'CAS Abmeldung!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'eigentlich häten Sie zum CAS Server weitergeleitet werden sollen. Drücken Sie hier um fortzufahren.',
CAS_STR_AUTHENTICATION_FAILED
=> 'CAS Anmeldung fehlgeschlagen!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> 'Sie wurden nicht angemeldet.
Um es erneut zu versuchen klicken Sie hier.
Wenn das Problem bestehen bleibt, kontkatieren Sie den Administrator dieser Seite.
',
CAS_STR_SERVICE_UNAVAILABLE
=> 'Der Dienst `%s\' ist nicht verfügbar (%s).'
);
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/languages/languages.php 0100644 0001750 0001750 00000001152 11736060505 0027646 0 ustar 00guigui guigui
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
//@{
/**
* a phpCAS string index
*/
define("CAS_STR_USING_SERVER", 1);
define("CAS_STR_AUTHENTICATION_WANTED", 2);
define("CAS_STR_LOGOUT", 3);
define("CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED", 4);
define("CAS_STR_AUTHENTICATION_FAILED", 5);
define("CAS_STR_YOU_WERE_NOT_AUTHENTICATED", 6);
define("CAS_STR_SERVICE_UNAVAILABLE", 7);
//@}
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/COPYRIGHT 0100644 0001750 0001750 00000000500 11736060505 0024510 0 ustar 00guigui guigui phpCAS - Copyright (c) 2003-2004 ESUP-portail consortium
This program is free software; you can redistribute it and/or modify it under the
terms of the Lesser General Public License (LGPL) as published by the Free
Software Foundation.
See the license terms site for more details: http://www.esup-portail.org/license OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/client.php 0100644 0001750 0001750 00000177145 11736060505 0025230 0 ustar 00guigui guigui
*/
class CASClient
{
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// XX XX
// XX CONFIGURATION XX
// XX XX
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// ########################################################################
// HTML OUTPUT
// ########################################################################
/**
* @addtogroup internalOutput
* @{
*/
/**
* This method filters a string by replacing special tokens by appropriate values
* and prints it. The corresponding tokens are taken into account:
* - __CAS_VERSION__
* - __PHPCAS_VERSION__
* - __SERVER_BASE_URL__
*
* Used by CASClient::PrintHTMLHeader() and CASClient::printHTMLFooter().
*
* @param $str the string to filter and output
*
* @private
*/
function HTMLFilterOutput($str)
{
$str = str_replace('__CAS_VERSION__',$this->getServerVersion(),$str);
$str = str_replace('__PHPCAS_VERSION__',phpCAS::getVersion(),$str);
$str = str_replace('__SERVER_BASE_URL__',$this->getServerBaseURL(),$str);
echo $str;
}
/**
* A string used to print the header of HTML pages. Written by CASClient::setHTMLHeader(),
* read by CASClient::printHTMLHeader().
*
* @hideinitializer
* @private
* @see CASClient::setHTMLHeader, CASClient::printHTMLHeader()
*/
var $_output_header = '';
/**
* This method prints the header of the HTML output (after filtering). If
* CASClient::setHTMLHeader() was not used, a default header is output.
*
* @param $title the title of the page
*
* @see HTMLFilterOutput()
* @private
*/
function printHTMLHeader($title)
{
$this->HTMLFilterOutput(str_replace('__TITLE__',
$title,
(empty($this->_output_header)
? '__TITLE____TITLE__
'
: $this->_output_header)
)
);
}
/**
* A string used to print the footer of HTML pages. Written by CASClient::setHTMLFooter(),
* read by printHTMLFooter().
*
* @hideinitializer
* @private
* @see CASClient::setHTMLFooter, CASClient::printHTMLFooter()
*/
var $_output_footer = '';
/**
* This method prints the footer of the HTML output (after filtering). If
* CASClient::setHTMLFooter() was not used, a default footer is output.
*
* @see HTMLFilterOutput()
* @private
*/
function printHTMLFooter()
{
$this->HTMLFilterOutput(empty($this->_output_footer)
?('
phpCAS __PHPCAS_VERSION__ '.$this->getString(CAS_STR_USING_SERVER).' __SERVER_BASE_URL__ (CAS __CAS_VERSION__)')
:$this->_output_footer);
}
/**
* This method set the HTML header used for all outputs.
*
* @param $header the HTML header.
*
* @public
*/
function setHTMLHeader($header)
{
$this->_output_header = $header;
}
/**
* This method set the HTML footer used for all outputs.
*
* @param $footer the HTML footer.
*
* @public
*/
function setHTMLFooter($footer)
{
$this->_output_footer = $footer;
}
/** @} */
// ########################################################################
// INTERNATIONALIZATION
// ########################################################################
/**
* @addtogroup internalLang
* @{
*/
/**
* A string corresponding to the language used by phpCAS. Written by
* CASClient::setLang(), read by CASClient::getLang().
* @note debugging information is always in english (debug purposes only).
*
* @hideinitializer
* @private
* @sa CASClient::_strings, CASClient::getString()
*/
var $_lang = '';
/**
* This method returns the language used by phpCAS.
*
* @return a string representing the language
*
* @private
*/
function getLang()
{
if ( empty($this->_lang) )
$this->setLang(PHPCAS_LANG_DEFAULT);
return $this->_lang;
}
/**
* array containing the strings used by phpCAS. Written by CASClient::setLang(), read by
* CASClient::getString() and used by CASClient::setLang().
*
* @note This array is filled by instructions in CAS/languages/<$this->_lang>.php
*
* @private
* @see CASClient::_lang, CASClient::getString(), CASClient::setLang(), CASClient::getLang()
*/
var $_strings;
/**
* This method returns a string depending on the language.
*
* @param $str the index of the string in $_string.
*
* @return the string corresponding to $index in $string.
*
* @private
*/
function getString($str)
{
// call CASclient::getLang() to be sure the language is initialized
$this->getLang();
if ( !isset($this->_strings[$str]) ) {
trigger_error('string `'.$str.'\' not defined for language `'.$this->getLang().'\'',E_USER_ERROR);
}
return $this->_strings[$str];
}
/**
* This method is used to set the language used by phpCAS.
* @note Can be called only once.
*
* @param $lang a string representing the language.
*
* @public
* @sa CAS_LANG_FRENCH, CAS_LANG_ENGLISH
*/
function setLang($lang)
{
// include the corresponding language file
include_once(dirname(__FILE__).'/languages/'.$lang.'.php');
if ( !is_array($this->_strings) ) {
trigger_error('language `'.$lang.'\' is not implemented',E_USER_ERROR);
}
$this->_lang = $lang;
}
/** @} */
// ########################################################################
// CAS SERVER CONFIG
// ########################################################################
/**
* @addtogroup internalConfig
* @{
*/
/**
* a record to store information about the CAS server.
* - $_server["version"]: the version of the CAS server
* - $_server["hostname"]: the hostname of the CAS server
* - $_server["port"]: the port the CAS server is running on
* - $_server["uri"]: the base URI the CAS server is responding on
* - $_server["base_url"]: the base URL of the CAS server
* - $_server["login_url"]: the login URL of the CAS server
* - $_server["service_validate_url"]: the service validating URL of the CAS server
* - $_server["proxy_url"]: the proxy URL of the CAS server
* - $_server["proxy_validate_url"]: the proxy validating URL of the CAS server
* - $_server["logout_url"]: the logout URL of the CAS server
*
* $_server["version"], $_server["hostname"], $_server["port"] and $_server["uri"]
* are written by CASClient::CASClient(), read by CASClient::getServerVersion(),
* CASClient::getServerHostname(), CASClient::getServerPort() and CASClient::getServerURI().
*
* The other fields are written and read by CASClient::getServerBaseURL(),
* CASClient::getServerLoginURL(), CASClient::getServerServiceValidateURL(),
* CASClient::getServerProxyValidateURL() and CASClient::getServerLogoutURL().
*
* @hideinitializer
* @private
*/
var $_server = array(
'version' => -1,
'hostname' => 'none',
'port' => -1,
'uri' => 'none'
);
/**
* This method is used to retrieve the version of the CAS server.
* @return the version of the CAS server.
* @private
*/
function getServerVersion()
{
return $this->_server['version'];
}
/**
* This method is used to retrieve the hostname of the CAS server.
* @return the hostname of the CAS server.
* @private
*/
function getServerHostname()
{ return $this->_server['hostname']; }
/**
* This method is used to retrieve the port of the CAS server.
* @return the port of the CAS server.
* @private
*/
function getServerPort()
{ return $this->_server['port']; }
/**
* This method is used to retrieve the URI of the CAS server.
* @return a URI.
* @private
*/
function getServerURI()
{ return $this->_server['uri']; }
/**
* This method is used to retrieve the base URL of the CAS server.
* @return a URL.
* @private
*/
function getServerBaseURL()
{
// the URL is build only when needed
if ( empty($this->_server['base_url']) ) {
$this->_server['base_url'] = 'https://'
.$this->getServerHostname()
.':'
.$this->getServerPort()
.$this->getServerURI();
}
return $this->_server['base_url'];
}
/**
* This method is used to retrieve the login URL of the CAS server.
* @param $gateway true to check authentication, false to force it
* @return a URL.
* @private
*/
function getServerLoginURL($gateway=false)
{
$cas=new phpCAS();
$cas->traceBegin();
// the URL is build only when needed
if ( empty($this->_server['login_url']) ) {
$this->_server['login_url'] = $this->getServerBaseURL();
$this->_server['login_url'] .= 'login?service=';
// $this->_server['login_url'] .= preg_replace('/&/','%26',$this->getURL());
$this->_server['login_url'] .= urlencode($this->getURL());
if ($gateway) {
$this->_server['login_url'] .= '&gateway=true';
}
}
$cas->traceEnd($this->_server['login_url']);
return $this->_server['login_url'];
}
/**
* This method sets the login URL of the CAS server.
* @param $url the login URL
* @private
* @since 0.4.21 by Wyman Chan
*/
function setServerLoginURL($url)
{
return $this->_server['login_url'] = $url;
}
/**
* This method is used to retrieve the service validating URL of the CAS server.
* @return a URL.
* @private
*/
function getServerServiceValidateURL()
{
// the URL is build only when needed
if ( empty($this->_server['service_validate_url']) ) {
switch ($this->getServerVersion()) {
case CAS_VERSION_1_0:
$this->_server['service_validate_url'] = $this->getServerBaseURL().'validate';
break;
case CAS_VERSION_2_0:
$this->_server['service_validate_url'] = $this->getServerBaseURL().'serviceValidate';
break;
}
}
// return $this->_server['service_validate_url'].'?service='.preg_replace('/&/','%26',$this->getURL());
return $this->_server['service_validate_url'].'?service='.urlencode($this->getURL());
}
/**
* This method is used to retrieve the proxy validating URL of the CAS server.
* @return a URL.
* @private
*/
function getServerProxyValidateURL()
{
// the URL is build only when needed
if ( empty($this->_server['proxy_validate_url']) ) {
switch ($this->getServerVersion()) {
case CAS_VERSION_1_0:
$this->_server['proxy_validate_url'] = '';
break;
case CAS_VERSION_2_0:
$this->_server['proxy_validate_url'] = $this->getServerBaseURL().'proxyValidate';
break;
}
}
// return $this->_server['proxy_validate_url'].'?service='.preg_replace('/&/','%26',$this->getURL());
return $this->_server['proxy_validate_url'].'?service='.urlencode($this->getURL());
}
/**
* This method is used to retrieve the proxy URL of the CAS server.
* @return a URL.
* @private
*/
function getServerProxyURL()
{
// the URL is build only when needed
if ( empty($this->_server['proxy_url']) ) {
switch ($this->getServerVersion()) {
case CAS_VERSION_1_0:
$this->_server['proxy_url'] = '';
break;
case CAS_VERSION_2_0:
$this->_server['proxy_url'] = $this->getServerBaseURL().'proxy';
break;
}
}
return $this->_server['proxy_url'];
}
/**
* This method is used to retrieve the logout URL of the CAS server.
* @return a URL.
* @private
*/
function getServerLogoutURL()
{
// the URL is build only when needed
if ( empty($this->_server['logout_url']) ) {
$this->_server['logout_url'] = $this->getServerBaseURL().'logout';
}
return $this->_server['logout_url'];
}
/**
* This method sets the logout URL of the CAS server.
* @param $url the logout URL
* @private
* @since 0.4.21 by Wyman Chan
*/
function setServerLogoutURL($url)
{
return $this->_server['logout_url'] = $url;
}
/**
* This method checks to see if the request is secured via HTTPS
* @return true if https, false otherwise
* @private
*/
function isHttps() {
//if ( isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) ) {
//0.4.24 by Hinnack
if ( isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
return true;
} else {
return false;
}
}
// ########################################################################
// CONSTRUCTOR
// ########################################################################
/**
* CASClient constructor.
*
* @param $server_version the version of the CAS server
* @param $proxy TRUE if the CAS client is a CAS proxy, FALSE otherwise
* @param $server_hostname the hostname of the CAS server
* @param $server_port the port the CAS server is running on
* @param $server_uri the URI the CAS server is responding on
* @param $start_session Have phpCAS start PHP sessions (default true)
*
* @return a newly created CASClient object
*
* @public
*/
function CASClient(
$server_version,
$proxy,
$server_hostname,
$server_port,
$server_uri,
$start_session = true) {
$cas = new phpCAS;
$cas->traceBegin();
//activate session mechanism if desired
if (!session_id()) {
session_start();
}
$this->_proxy = $proxy;
//check version
switch ($server_version) {
case CAS_VERSION_1_0:
if ( $this->isProxy() )
$cas->error('CAS proxies are not supported in CAS '
.$server_version);
break;
case CAS_VERSION_2_0:
break;
default:
phpCAS::error('this version of CAS (`'
.$server_version
.'\') is not supported by phpCAS '
.$cas->getVersion());
}
$this->_server['version'] = $server_version;
//check hostname
if ( empty($server_hostname)
|| !preg_match('/[\.\d\-abcdefghijklmnopqrstuvwxyz]*/',$server_hostname) ) {
$cas->error('bad CAS server hostname (`'.$server_hostname.'\')');
}
$this->_server['hostname'] = $server_hostname;
//check port
if ( $server_port == 0
|| !is_int($server_port) ) {
$cas->error('bad CAS server port (`'.$server_hostname.'\')');
}
$this->_server['port'] = $server_port;
//check URI
if ( !preg_match('/[\.\d\-_abcdefghijklmnopqrstuvwxyz\/]*/',$server_uri) ) {
$cas->error('bad CAS server URI (`'.$server_uri.'\')');
}
//add leading and trailing `/' and remove doubles
$server_uri = preg_replace('/\/\//','/','/'.$server_uri.'/');
$this->_server['uri'] = $server_uri;
//set to callback mode if PgtIou and PgtId CGI GET parameters are provided
if ( $this->isProxy() ) {
$this->setCallbackMode(!empty($_GET['pgtIou'])&&!empty($_GET['pgtId']));
}
if ( $this->isCallbackMode() ) {
//callback mode: check that phpCAS is secured
if ( !$this->isHttps() ) {
$cas->error('CAS proxies must be secured to use phpCAS; PGT\'s will not be received from the CAS server');
}
} else {
//normal mode: get ticket and remove it from CGI parameters for developpers
$ticket = (isset($_GET['ticket']) ? $_GET['ticket'] : null);
switch ($this->getServerVersion()) {
case CAS_VERSION_1_0: // check for a Service Ticket
if( preg_match('/^ST-/',$ticket) ) {
$cas->trace('ST \''.$ticket.'\' found');
//ST present
$this->setST($ticket);
//ticket has been taken into account, unset it to hide it to applications
unset($_GET['ticket']);
} else if ( !empty($ticket) ) {
//ill-formed ticket, halt
$cas->error('ill-formed ticket found in the URL (ticket=`'.htmlentities($ticket,ENT_COMPAT | ENT_HTML401,"UTF-8").'\')');
}
break;
case CAS_VERSION_2_0: // check for a Service or Proxy Ticket
if( preg_match('/^[SP]T-/',$ticket) ) {
$cas->trace('ST or PT \''.$ticket.'\' found');
$this->setPT($ticket);
unset($_GET['ticket']);
} else if ( !empty($ticket) ) {
//ill-formed ticket, halt
$cas->error('ill-formed ticket found in the URL (ticket=`'.htmlentities($ticket,ENT_COMPAT | ENT_HTML401,"UTF-8").'\')');
}
break;
}
}
$cas->traceEnd();
}
/** @} */
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// XX XX
// XX AUTHENTICATION XX
// XX XX
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
* @addtogroup internalAuthentication
* @{
*/
/**
* The Authenticated user. Written by CASClient::setUser(), read by CASClient::getUser().
* @attention client applications should use phpCAS::getUser().
*
* @hideinitializer
* @private
*/
var $_user = '';
/**
* This method sets the CAS user's login name.
*
* @param $user the login name of the authenticated user.
*
* @private
*/
function setUser($user)
{
$this->_user = $user;
}
/**
* This method returns the CAS user's login name.
* @warning should be called only after CASClient::forceAuthentication() or
* CASClient::isAuthenticated(), otherwise halt with an error.
*
* @return the login name of the authenticated user
*/
function getUser()
{
if ( empty($this->_user) ) {
phpCAS::error('this method should be used only after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
}
return $this->_user;
}
/**
* This method is called to be sure that the user is authenticated. When not
* authenticated, halt by redirecting to the CAS server; otherwise return TRUE.
* @return TRUE when the user is authenticated; otherwise halt.
* @public
*/
function forceAuthentication()
{
$cas=new phpCas();
$cas->traceBegin();
if ( $this->isAuthenticated() ) {
// the user is authenticated, nothing to be done.
$cas->trace('no need to authenticate');
$res = TRUE;
} else {
// the user is not authenticated, redirect to the CAS server
unset($_SESSION['phpCAS']['auth_checked']);
$this->redirectToCas(FALSE/* no gateway */);
// never reached
$res = FALSE;
}
$cas->traceEnd($res);
return $res;
}
/**
* An integer that gives the number of times authentication will be cached before rechecked.
*
* @hideinitializer
* @private
*/
var $_cache_times_for_auth_recheck = 0;
/**
* Set the number of times authentication will be cached before rechecked.
*
* @param $n an integer.
*
* @public
*/
function setCacheTimesForAuthRequest($n)
{
$this->_cache_times_for_auth_recheck = n;
}
/**
* This method is called to check whether the user is authenticated or not.
* @return TRUE when the user is authenticated, FALSE otherwise.
* @public
*/
function checkAuthentication()
{
phpCAS::traceBegin();
if ( $this->isAuthenticated() ) {
phpCAS::trace('user is authenticated');
$res = TRUE;
} else if (isset($_SESSION['phpCAS']['auth_checked'])) {
// the previous request has redirected the client to the CAS server with gateway=true
unset($_SESSION['phpCAS']['auth_checked']);
$res = FALSE;
} else {
// $_SESSION['phpCAS']['auth_checked'] = true;
// $this->redirectToCas(TRUE/* gateway */);
// // never reached
// $res = FALSE;
// avoid a check against CAS on every request
if (! isset($_SESSION['phpCAS']['unauth_count']) )
$_SESSION['phpCAS']['unauth_count'] = -2; // uninitialized
if (($_SESSION['phpCAS']['unauth_count'] != -2 && $this->_cache_times_for_auth_recheck == -1)
|| ($_SESSION['phpCAS']['unauth_count'] >= 0 && $_SESSION['phpCAS']['unauth_count'] < $this->_cache_times_for_auth_recheck))
{
$res = FALSE;
if ($this->_cache_times_for_auth_recheck != -1)
{
$_SESSION['phpCAS']['unauth_count']++;
phpCAS::trace('user is not authenticated (cached for '.$_SESSION['phpCAS']['unauth_count'].' times of '.$this->_cache_times_for_auth_recheck.')');
}
else
{
phpCAS::trace('user is not authenticated (cached for until login pressed)');
}
}
else
{
$_SESSION['phpCAS']['unauth_count'] = 0;
$_SESSION['phpCAS']['auth_checked'] = true;
phpCAS::trace('user is not authenticated (cache reset)');
$this->redirectToCas(TRUE/* gateway */);
// never reached
$res = FALSE;
}
}
phpCAS::traceEnd($res);
return $res;
}
/**
* This method is called to check if the user is authenticated (previously or by
* tickets given in the URL).
*
* @return TRUE when the user is authenticated.
*
* @public
*/
function isAuthenticated()
{
$cas=new phpCas();
$cas->traceBegin();
$res = FALSE;
$validate_url = '';
if ( $this->wasPreviouslyAuthenticated() ) {
// the user has already (previously during the session) been
// authenticated, nothing to be done.
$cas->trace('user was already authenticated, no need to look for tickets');
$res = TRUE;
}
elseif ( $this->hasST() ) {
// if a Service Ticket was given, validate it
$cas->trace('ST `'.$this->getST().'\' is present');
$this->validateST($validate_url,$text_response,$tree_response); // if it fails, it halts
$cas->trace('ST `'.$this->getST().'\' was validated');
if ( $this->isProxy() ) {
$this->validatePGT($validate_url,$text_response,$tree_response); // idem
$cas->trace('PGT `'.$this->getPGT().'\' was validated');
$_SESSION['phpCAS']['pgt'] = $this->getPGT();
}
$_SESSION['phpCAS']['user'] = $this->getUser();
$res = TRUE;
}
elseif ( $this->hasPT() ) {
// if a Proxy Ticket was given, validate it
$cas->trace('PT `'.$this->getPT().'\' is present');
$this->validatePT($validate_url,$text_response,$tree_response); // note: if it fails, it halts
$cas->trace('PT `'.$this->getPT().'\' was validated');
if ( $this->isProxy() ) {
$this->validatePGT($validate_url,$text_response,$tree_response); // idem
$cas->trace('PGT `'.$this->getPGT().'\' was validated');
$_SESSION['phpCAS']['pgt'] = $this->getPGT();
}
$_SESSION['phpCAS']['user'] = $this->getUser();
$res = TRUE;
}
else {
// no ticket given, not authenticated
$cas->trace('no ticket found');
}
$cas->traceEnd($res);
return $res;
}
/**
* This method tells if the current session is authenticated.
* @return true if authenticated based soley on $_SESSION variable
* @since 0.4.22 by Brendan Arnold
*/
function isSessionAuthenticated ()
{
return !empty($_SESSION['phpCAS']['user']);
}
/**
* This method tells if the user has already been (previously) authenticated
* by looking into the session variables.
*
* @note This function switches to callback mode when needed.
*
* @return TRUE when the user has already been authenticated; FALSE otherwise.
*
* @private
*/
function wasPreviouslyAuthenticated()
{
$cas=new phpCas();
$cas->traceBegin();
if ( $this->isCallbackMode() ) {
$this->callback();
}
$auth = FALSE;
if ( $this->isProxy() ) {
// CAS proxy: username and PGT must be present
if ( $this->isSessionAuthenticated() && !empty($_SESSION['phpCAS']['pgt']) ) {
// authentication already done
$this->setUser($_SESSION['phpCAS']['user']);
$this->setPGT($_SESSION['phpCAS']['pgt']);
$cas->trace('user = `'.$_SESSION['phpCAS']['user'].'\', PGT = `'.$_SESSION['phpCAS']['pgt'].'\'');
$auth = TRUE;
} elseif ( $this->isSessionAuthenticated() && empty($_SESSION['phpCAS']['pgt']) ) {
// these two variables should be empty or not empty at the same time
$cas->trace('username found (`'.$_SESSION['phpCAS']['user'].'\') but PGT is empty');
// unset all tickets to enforce authentication
unset($_SESSION['phpCAS']);
$this->setST('');
$this->setPT('');
} elseif ( !$this->isSessionAuthenticated() && !empty($_SESSION['phpCAS']['pgt']) ) {
// these two variables should be empty or not empty at the same time
$cas->trace('PGT found (`'.$_SESSION['phpCAS']['pgt'].'\') but username is empty');
// unset all tickets to enforce authentication
unset($_SESSION['phpCAS']);
$this->setST('');
$this->setPT('');
} else {
$cas->trace('neither user not PGT found');
}
} else {
// `simple' CAS client (not a proxy): username must be present
if ( $this->isSessionAuthenticated() ) {
// authentication already done
$this->setUser($_SESSION['phpCAS']['user']);
$cas->trace('user = `'.$_SESSION['phpCAS']['user'].'\'');
$auth = TRUE;
} else {
$cas->trace('no user found');
}
}
$cas->traceEnd($auth);
return $auth;
}
/**
* This method is used to redirect the client to the CAS server.
* It is used by CASClient::forceAuthentication() and CASClient::checkAuthentication().
* @param $gateway true to check authentication, false to force it
* @public
*/
function redirectToCas($gateway=false)
{
$cas=new phpCas();
$cas->traceBegin();
$cas_url = $this->getServerLoginURL($gateway);
header('Location: '.$cas_url);
$this->printHTMLHeader($this->getString(CAS_STR_AUTHENTICATION_WANTED));
printf(''.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'
',$cas_url);
$this->printHTMLFooter();
$cas->traceExit();
exit();
}
/**
* This method is used to logout from CAS.
* @param $url a URL that will be transmitted to the CAS server (to come back to when logged out)
* @public
*/
function logout($url = "")
{
$cas=new phpCAS();
$cas->traceBegin();
$cas_url = $this->getServerLogoutURL();
// v0.4.14 sebastien.gougeon at univ-rennes1.fr
// header('Location: '.$cas_url);
if ( $url != "" ) {
$url = '?service=' . $url;
}
header('Location: '.$cas_url . $url);
session_unset();
session_destroy();
$this->printHTMLHeader($this->getString(CAS_STR_LOGOUT));
printf(''.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'
',$cas_url);
$this->printHTMLFooter();
$cas->traceExit();
exit();
}
/** @} */
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// XX XX
// XX BASIC CLIENT FEATURES (CAS 1.0) XX
// XX XX
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// ########################################################################
// ST
// ########################################################################
/**
* @addtogroup internalBasic
* @{
*/
/**
* the Service Ticket provided in the URL of the request if present
* (empty otherwise). Written by CASClient::CASClient(), read by
* CASClient::getST() and CASClient::hasPGT().
*
* @hideinitializer
* @private
*/
var $_st = '';
/**
* This method returns the Service Ticket provided in the URL of the request.
* @return The service ticket.
* @private
*/
function getST()
{ return $this->_st; }
/**
* This method stores the Service Ticket.
* @param $st The Service Ticket.
* @private
*/
function setST($st)
{ $this->_st = $st; }
/**
* This method tells if a Service Ticket was stored.
* @return TRUE if a Service Ticket has been stored.
* @private
*/
function hasST()
{ return !empty($this->_st); }
/** @} */
// ########################################################################
// ST VALIDATION
// ########################################################################
/**
* @addtogroup internalBasic
* @{
*/
/**
* This method is used to validate a ST; halt on failure, and sets $validate_url,
* $text_reponse and $tree_response on success. These parameters are used later
* by CASClient::validatePGT() for CAS proxies.
*
* @param $validate_url the URL of the request to the CAS server.
* @param $text_response the response of the CAS server, as is (XML text).
* @param $tree_response the response of the CAS server, as a DOM XML tree.
*
* @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
*
* @private
*/
function validateST($validate_url,&$text_response,&$tree_response)
{
phpCAS::traceBegin();
// build the URL to validate the ticket
$validate_url = $this->getServerServiceValidateURL().'&ticket='.$this->getST();
if ( $this->isProxy() ) {
// pass the callback url for CAS proxies
$validate_url .= '&pgtUrl='.$this->getCallbackURL();
}
// open and read the URL
if ( !$this->readURL($validate_url,''/*cookies*/,$headers,$text_response,$err_msg) ) {
phpCAS::trace('could not open URL \''.$validate_url.'\' to validate ('.$err_msg.')');
$this->authError('ST not validated',
$validate_url,
TRUE/*$no_response*/);
}
// analyze the result depending on the version
switch ($this->getServerVersion()) {
case CAS_VERSION_1_0:
if (preg_match('/^no\n/',$text_response)) {
phpCAS::trace('ST has not been validated');
$this->authError('ST not validated',
$validate_url,
FALSE/*$no_response*/,
FALSE/*$bad_response*/,
$text_response);
}
if (!preg_match('/^yes\n/',$text_response)) {
phpCAS::trace('ill-formed response');
$this->authError('ST not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
// ST has been validated, extract the user name
$arr = preg_split('/\n/',$text_response);
$this->setUser(trim($arr[1]));
break;
case CAS_VERSION_2_0:
// read the response of the CAS server into a DOM object
if ( !($dom = domxml_open_mem($text_response))) {
phpCAS::trace('domxml_open_mem() failed');
$this->authError('ST not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
// read the root node of the XML tree
if ( !($tree_response = $dom->document_element()) ) {
phpCAS::trace('document_element() failed');
$this->authError('ST not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
// insure that tag name is 'serviceResponse'
if ( $tree_response->node_name() != 'serviceResponse' ) {
phpCAS::trace('bad XML root node (should be `serviceResponse\' instead of `'.$tree_response->node_name().'\'');
$this->authError('ST not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
if ( sizeof($success_elements = $tree_response->get_elements_by_tagname("authenticationSuccess")) != 0) {
// authentication succeded, extract the user name
if ( sizeof($user_elements = $success_elements[0]->get_elements_by_tagname("user")) == 0) {
phpCAS::trace(' found, but no ');
$this->authError('ST not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
$user = trim($user_elements[0]->get_content());
phpCAS::trace('user = `'.$user);
$this->setUser($user);
} else if ( sizeof($failure_elements = $tree_response->get_elements_by_tagname("authenticationFailure")) != 0) {
phpCAS::trace(' found');
// authentication failed, extract the error code and message
$this->authError('ST not validated',
$validate_url,
FALSE/*$no_response*/,
FALSE/*$bad_response*/,
$text_response,
$failure_elements[0]->get_attribute('code')/*$err_code*/,
trim($failure_elements[0]->get_content())/*$err_msg*/);
} else {
phpCAS::trace('neither nor found');
$this->authError('ST not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
break;
}
// at this step, ST has been validated and $this->_user has been set,
phpCAS::traceEnd(TRUE);
return TRUE;
}
/** @} */
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// XX XX
// XX PROXY FEATURES (CAS 2.0) XX
// XX XX
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// ########################################################################
// PROXYING
// ########################################################################
/**
* @addtogroup internalProxy
* @{
*/
/**
* A boolean telling if the client is a CAS proxy or not. Written by CASClient::CASClient(),
* read by CASClient::isProxy().
*
* @private
*/
var $_proxy;
/**
* Tells if a CAS client is a CAS proxy or not
*
* @return TRUE when the CAS client is a CAs proxy, FALSE otherwise
*
* @private
*/
function isProxy()
{
return $this->_proxy;
}
/** @} */
// ########################################################################
// PGT
// ########################################################################
/**
* @addtogroup internalProxy
* @{
*/
/**
* the Proxy Grnting Ticket given by the CAS server (empty otherwise).
* Written by CASClient::setPGT(), read by CASClient::getPGT() and CASClient::hasPGT().
*
* @hideinitializer
* @private
*/
var $_pgt = '';
/**
* This method returns the Proxy Granting Ticket given by the CAS server.
* @return The Proxy Granting Ticket.
* @private
*/
function getPGT()
{ return $this->_pgt; }
/**
* This method stores the Proxy Granting Ticket.
* @param $pgt The Proxy Granting Ticket.
* @private
*/
function setPGT($pgt)
{ $this->_pgt = $pgt; }
/**
* This method tells if a Proxy Granting Ticket was stored.
* @return TRUE if a Proxy Granting Ticket has been stored.
* @private
*/
function hasPGT()
{ return !empty($this->_pgt); }
/** @} */
// ########################################################################
// CALLBACK MODE
// ########################################################################
/**
* @addtogroup internalCallback
* @{
*/
/**
* each PHP script using phpCAS in proxy mode is its own callback to get the
* PGT back from the CAS server. callback_mode is detected by the constructor
* thanks to the GET parameters.
*/
/**
* a boolean to know if the CAS client is running in callback mode. Written by
* CASClient::setCallBackMode(), read by CASClient::isCallbackMode().
*
* @hideinitializer
* @private
*/
var $_callback_mode = FALSE;
/**
* This method sets/unsets callback mode.
*
* @param $callback_mode TRUE to set callback mode, FALSE otherwise.
*
* @private
*/
function setCallbackMode($callback_mode)
{
$this->_callback_mode = $callback_mode;
}
/**
* This method returns TRUE when the CAs client is running i callback mode,
* FALSE otherwise.
*
* @return A boolean.
*
* @private
*/
function isCallbackMode()
{
return $this->_callback_mode;
}
/**
* the URL that should be used for the PGT callback (in fact the URL of the
* current request without any CGI parameter). Written and read by
* CASClient::getCallbackURL().
*
* @hideinitializer
* @private
*/
var $_callback_url = '';
/**
* This method returns the URL that should be used for the PGT callback (in
* fact the URL of the current request without any CGI parameter, except if
* phpCAS::setFixedCallbackURL() was used).
*
* @return The callback URL
*
* @private
*/
function getCallbackURL()
{
// the URL is built when needed only
if ( empty($this->_callback_url) ) {
$final_uri = '';
// remove the ticket if present in the URL
$final_uri = 'https://';
/* replaced by Julien Marchal - v0.4.6
* $this->uri .= $_SERVER['SERVER_NAME'];
*/
if(empty($_SERVER['HTTP_X_FORWARDED_SERVER'])){
/* replaced by teedog - v0.4.12
* $final_uri .= $_SERVER['SERVER_NAME'];
*/
if (empty($_SERVER['SERVER_NAME'])) {
$final_uri .= $_SERVER['HTTP_HOST'];
} else {
$final_uri .= $_SERVER['SERVER_NAME'];
}
} else {
$final_uri .= $_SERVER['HTTP_X_FORWARDED_SERVER'];
}
if ( ($this->isHttps() && $_SERVER['SERVER_PORT']!=443)
|| (!$this->isHttps() && $_SERVER['SERVER_PORT']!=80) ) {
$final_uri .= ':';
$final_uri .= $_SERVER['SERVER_PORT'];
}
$request_uri = $_SERVER['REQUEST_URI'];
$request_uri = preg_replace('/\?.*$/','',$request_uri);
$final_uri .= $request_uri;
$this->setCallbackURL($final_uri);
}
return $this->_callback_url;
}
/**
* This method sets the callback url.
*
* @param $callback_url url to set callback
*
* @private
*/
function setCallbackURL($url)
{
return $this->_callback_url = $url;
}
/**
* This method is called by CASClient::CASClient() when running in callback
* mode. It stores the PGT and its PGT Iou, prints its output and halts.
*
* @private
*/
function callback()
{
phpCAS::traceBegin();
$this->printHTMLHeader('phpCAS callback');
$pgt_iou = $_GET['pgtIou'];
$pgt = $_GET['pgtId'];
phpCAS::trace('Storing PGT `'.$pgt.'\' (id=`'.$pgt_iou.'\')');
echo 'Storing PGT `'.$pgt.'\' (id=`'.$pgt_iou.'\').
';
$this->storePGT($pgt,$pgt_iou);
$this->printHTMLFooter();
phpCAS::traceExit();
}
/** @} */
// ########################################################################
// PGT STORAGE
// ########################################################################
/**
* @addtogroup internalPGTStorage
* @{
*/
/**
* an instance of a class inheriting of PGTStorage, used to deal with PGT
* storage. Created by CASClient::setPGTStorageFile() or CASClient::setPGTStorageDB(), used
* by CASClient::setPGTStorageFile(), CASClient::setPGTStorageDB() and CASClient::initPGTStorage().
*
* @hideinitializer
* @private
*/
var $_pgt_storage = null;
/**
* This method is used to initialize the storage of PGT's.
* Halts on error.
*
* @private
*/
function initPGTStorage()
{
// if no SetPGTStorageXxx() has been used, default to file
if ( !is_object($this->_pgt_storage) ) {
$this->setPGTStorageFile();
}
// initializes the storage
$this->_pgt_storage->init();
}
/**
* This method stores a PGT. Halts on error.
*
* @param $pgt the PGT to store
* @param $pgt_iou its corresponding Iou
*
* @private
*/
function storePGT($pgt,$pgt_iou)
{
// ensure that storage is initialized
$this->initPGTStorage();
// writes the PGT
$this->_pgt_storage->write($pgt,$pgt_iou);
}
/**
* This method reads a PGT from its Iou and deletes the corresponding storage entry.
*
* @param $pgt_iou the PGT Iou
*
* @return The PGT corresponding to the Iou, FALSE when not found.
*
* @private
*/
function loadPGT($pgt_iou)
{
// ensure that storage is initialized
$this->initPGTStorage();
// read the PGT
return $this->_pgt_storage->read($pgt_iou);
}
/**
* This method is used to tell phpCAS to store the response of the
* CAS server to PGT requests onto the filesystem.
*
* @param $format the format used to store the PGT's (`plain' and `xml' allowed)
* @param $path the path where the PGT's should be stored
*
* @public
*/
function setPGTStorageFile($format='',
$path='')
{
// check that the storage has not already been set
if ( is_object($this->_pgt_storage) ) {
phpCAS::error('PGT storage already defined');
}
// create the storage object
$this->_pgt_storage = new PGTStorageFile($this,$format,$path);
}
/**
* This method is used to tell phpCAS to store the response of the
* CAS server to PGT requests into a database.
* @note The connection to the database is done only when needed.
* As a consequence, bad parameters are detected only when
* initializing PGT storage.
*
* @param $user the user to access the data with
* @param $password the user's password
* @param $database_type the type of the database hosting the data
* @param $hostname the server hosting the database
* @param $port the port the server is listening on
* @param $database the name of the database
* @param $table the name of the table storing the data
*
* @public
*/
function setPGTStorageDB($user,
$password,
$database_type,
$hostname,
$port,
$database,
$table)
{
// check that the storage has not already been set
if ( is_object($this->_pgt_storage) ) {
phpCAS::error('PGT storage already defined');
}
// warn the user that he should use file storage...
trigger_error('PGT storage into database is an experimental feature, use at your own risk',E_USER_WARNING);
// create the storage object
$this->_pgt_storage = new PGTStorageDB($this,$user,$password,$database_type,$hostname,$port,$database,$table);
}
// ########################################################################
// PGT VALIDATION
// ########################################################################
/**
* This method is used to validate a PGT; halt on failure.
*
* @param $validate_url the URL of the request to the CAS server.
* @param $text_response the response of the CAS server, as is (XML text); result
* of CASClient::validateST() or CASClient::validatePT().
* @param $tree_response the response of the CAS server, as a DOM XML tree; result
* of CASClient::validateST() or CASClient::validatePT().
*
* @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
*
* @private
*/
function validatePGT(&$validate_url,$text_response,$tree_response)
{
phpCAS::traceBegin();
if ( sizeof($arr = $tree_response->get_elements_by_tagname("proxyGrantingTicket")) == 0) {
phpCAS::trace(' not found');
// authentication succeded, but no PGT Iou was transmitted
$this->authError('Ticket validated but no PGT Iou transmitted',
$validate_url,
FALSE/*$no_response*/,
FALSE/*$bad_response*/,
$text_response);
} else {
// PGT Iou transmitted, extract it
$pgt_iou = trim($arr[0]->get_content());
$pgt = $this->loadPGT($pgt_iou);
if ( $pgt == FALSE ) {
phpCAS::trace('could not load PGT');
$this->authError('PGT Iou was transmitted but PGT could not be retrieved',
$validate_url,
FALSE/*$no_response*/,
FALSE/*$bad_response*/,
$text_response);
}
$this->setPGT($pgt);
}
phpCAS::traceEnd(TRUE);
return TRUE;
}
// ########################################################################
// PGT VALIDATION
// ########################################################################
/**
* This method is used to retrieve PT's from the CAS server thanks to a PGT.
*
* @param $target_service the service to ask for with the PT.
* @param $err_code an error code (PHPCAS_SERVICE_OK on success).
* @param $err_msg an error message (empty on success).
*
* @return a Proxy Ticket, or FALSE on error.
*
* @private
*/
function retrievePT($target_service,&$err_code,&$err_msg)
{
phpCAS::traceBegin();
// by default, $err_msg is set empty and $pt to TRUE. On error, $pt is
// set to false and $err_msg to an error message. At the end, if $pt is FALSE
// and $error_msg is still empty, it is set to 'invalid response' (the most
// commonly encountered error).
$err_msg = '';
// build the URL to retrieve the PT
// $cas_url = $this->getServerProxyURL().'?targetService='.preg_replace('/&/','%26',$target_service).'&pgt='.$this->getPGT();
$cas_url = $this->getServerProxyURL().'?targetService='.urlencode($target_service).'&pgt='.$this->getPGT();
// open and read the URL
if ( !$this->readURL($cas_url,''/*cookies*/,$headers,$cas_response,$err_msg) ) {
phpCAS::trace('could not open URL \''.$cas_url.'\' to validate ('.$err_msg.')');
$err_code = PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE;
$err_msg = 'could not retrieve PT (no response from the CAS server)';
phpCAS::traceEnd(FALSE);
return FALSE;
}
$bad_response = FALSE;
if ( !$bad_response ) {
// read the response of the CAS server into a DOM object
if ( !($dom = @domxml_open_mem($cas_response))) {
phpCAS::trace('domxml_open_mem() failed');
// read failed
$bad_response = TRUE;
}
}
if ( !$bad_response ) {
// read the root node of the XML tree
if ( !($root = $dom->document_element()) ) {
phpCAS::trace('document_element() failed');
// read failed
$bad_response = TRUE;
}
}
if ( !$bad_response ) {
// insure that tag name is 'serviceResponse'
if ( $root->node_name() != 'serviceResponse' ) {
phpCAS::trace('node_name() failed');
// bad root node
$bad_response = TRUE;
}
}
if ( !$bad_response ) {
// look for a proxySuccess tag
if ( sizeof($arr = $root->get_elements_by_tagname("proxySuccess")) != 0) {
// authentication succeded, look for a proxyTicket tag
if ( sizeof($arr = $root->get_elements_by_tagname("proxyTicket")) != 0) {
$err_code = PHPCAS_SERVICE_OK;
$err_msg = '';
phpCAS::trace('original PT: '.trim($arr[0]->get_content()));
$pt = trim($arr[0]->get_content());
phpCAS::traceEnd($pt);
return $pt;
} else {
phpCAS::trace(' was found, but not ');
}
}
// look for a proxyFailure tag
else if ( sizeof($arr = $root->get_elements_by_tagname("proxyFailure")) != 0) {
// authentication failed, extract the error
$err_code = PHPCAS_SERVICE_PT_FAILURE;
$err_msg = 'PT retrieving failed (code=`'
.$arr[0]->get_attribute('code')
.'\', message=`'
.trim($arr[0]->get_content())
.'\')';
phpCAS::traceEnd(FALSE);
return FALSE;
} else {
phpCAS::trace('neither nor found');
}
}
// at this step, we are sure that the response of the CAS server was ill-formed
$err_code = PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE;
$err_msg = 'Invalid response from the CAS server (response=`'.$cas_response.'\')';
phpCAS::traceEnd(FALSE);
return FALSE;
}
// ########################################################################
// ACCESS TO EXTERNAL SERVICES
// ########################################################################
/**
* This method is used to acces a remote URL.
*
* @param $url the URL to access.
* @param $cookies an array containing cookies strings such as 'name=val'
* @param $headers an array containing the HTTP header lines of the response
* (an empty array on failure).
* @param $body the body of the response, as a string (empty on failure).
* @param $err_msg an error message, filled on failure.
*
* @return TRUE on success, FALSE otherwise (in this later case, $err_msg
* contains an error message).
*
* @private
*/
function readURL($url,$cookies,&$headers,&$body,&$err_msg)
{
$cas=new phpCAS();
$cas->traceBegin();
$headers = '';
$body = '';
$err_msg = '';
$res = TRUE;
// initialize the CURL session
$ch = curl_init($url);
// verify the the server's certificate corresponds to its name
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
// but do not verify the certificate itself
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// return the CURL output into a variable
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// include the HTTP header with the body
curl_setopt($ch, CURLOPT_HEADER, 1);
// add cookies headers
if ( is_array($cookies) ) {
curl_setopt($ch,CURLOPT_COOKIE,implode(';',$cookies));
}
// perform the query
$buf = curl_exec ($ch);
if ( $buf === FALSE ) {
$cas->trace('cur_exec() failed');
$err_msg = 'CURL error #'.curl_errno($ch).': '.curl_error($ch);
// close the CURL session
curl_close ($ch);
$res = FALSE;
} else {
// close the CURL session
curl_close ($ch);
// find the end of the headers
// note: strpos($str,"\n\r\n\r") does not work (?)
$pos = FALSE;
for ($i=0; $itrace($err_msg);
$res = FALSE;
} else {
// extract headers into an array
$headers = preg_split ("/[\n\r]+/",substr($buf,0,$pos));
// extract body into a string
$body = substr($buf,$pos+4);
}
}
$cas->traceEnd($res);
return $res;
}
/**
* This method is used to access an HTTP[S] service.
*
* @param $url the service to access.
* @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
* success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
* PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
* @param $output the output of the service (also used to give an error
* message on failure).
*
* @return TRUE on success, FALSE otherwise (in this later case, $err_code
* gives the reason why it failed and $output contains an error message).
*
* @public
*/
function serviceWeb($url,&$err_code,&$output)
{
phpCAS::traceBegin();
// at first retrieve a PT
$pt = $this->retrievePT($url,$err_code,$output);
$res = TRUE;
// test if PT was retrieved correctly
if ( !$pt ) {
// note: $err_code and $err_msg are filled by CASClient::retrievePT()
phpCAS::trace('PT was not retrieved correctly');
$res = FALSE;
} else {
// add cookies if necessary
if ( is_array($_SESSION['phpCAS']['services'][$url]['cookies']) ) {
foreach ( $_SESSION['phpCAS']['services'][$url]['cookies'] as $name => $val ) {
$cookies[] = $name.'='.$val;
}
}
// build the URL including the PT
if ( strstr($url,'?') === FALSE ) {
$service_url = $url.'?ticket='.$pt;
} else {
$service_url = $url.'&ticket='.$pt;
}
phpCAS::trace('reading URL`'.$service_url.'\'');
if ( !$this->readURL($service_url,$cookies,$headers,$output,$err_msg) ) {
phpCAS::trace('could not read URL`'.$service_url.'\'');
$err_code = PHPCAS_SERVICE_NOT_AVAILABLE;
// give an error message
$output = sprintf($this->getString(CAS_STR_SERVICE_UNAVAILABLE),
$service_url,
$err_msg);
$res = FALSE;
} else {
// URL has been fetched, extract the cookies
phpCAS::trace('URL`'.$service_url.'\' has been read, storing cookies:');
foreach ( $headers as $header ) {
// test if the header is a cookie
if ( preg_match('/^Set-Cookie:/',$header) ) {
// the header is a cookie, remove the beginning
$header_val = preg_replace('/^Set-Cookie: */','',$header);
// extract interesting information
$name_val = strtok($header_val,'; ');
// extract the name and the value of the cookie
$cookie_name = strtok($name_val,'=');
$cookie_val = strtok('=');
// store the cookie
$_SESSION['phpCAS']['services'][$url]['cookies'][$cookie_name] = $cookie_val;
phpCAS::trace($cookie_name.' -> '.$cookie_val);
}
}
}
}
phpCAS::traceEnd($res);
return $res;
}
/**
* This method is used to access an IMAP/POP3/NNTP service.
*
* @param $url a string giving the URL of the service, including the mailing box
* for IMAP URLs, as accepted by imap_open().
* @param $flags options given to imap_open().
* @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
* success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
* PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
* @param $err_msg an error message on failure
* @param $pt the Proxy Ticket (PT) retrieved from the CAS server to access the URL
* on success, FALSE on error).
*
* @return an IMAP stream on success, FALSE otherwise (in this later case, $err_code
* gives the reason why it failed and $err_msg contains an error message).
*
* @public
*/
function serviceMail($url,$flags,&$err_code,&$err_msg,&$pt)
{
phpCAS::traceBegin();
// at first retrieve a PT
$pt = $this->retrievePT($target_service,$err_code,$output);
$stream = FALSE;
// test if PT was retrieved correctly
if ( !$pt ) {
// note: $err_code and $err_msg are filled by CASClient::retrievePT()
phpCAS::trace('PT was not retrieved correctly');
} else {
phpCAS::trace('opening IMAP URL `'.$url.'\'...');
$stream = @imap_open($url,$this->getUser(),$pt,$flags);
if ( !$stream ) {
phpCAS::trace('could not open URL');
$err_code = PHPCAS_SERVICE_NOT_AVAILABLE;
// give an error message
$err_msg = sprintf($this->getString(CAS_STR_SERVICE_UNAVAILABLE),
$service_url,
var_export(imap_errors(),TRUE));
$pt = FALSE;
$stream = FALSE;
} else {
phpCAS::trace('ok');
}
}
phpCAS::traceEnd($stream);
return $stream;
}
/** @} */
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// XX XX
// XX PROXIED CLIENT FEATURES (CAS 2.0) XX
// XX XX
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// ########################################################################
// PT
// ########################################################################
/**
* @addtogroup internalProxied
* @{
*/
/**
* the Proxy Ticket provided in the URL of the request if present
* (empty otherwise). Written by CASClient::CASClient(), read by
* CASClient::getPT() and CASClient::hasPGT().
*
* @hideinitializer
* @private
*/
var $_pt = '';
/**
* This method returns the Proxy Ticket provided in the URL of the request.
* @return The proxy ticket.
* @private
*/
function getPT()
{
return 'ST'.substr($this->_pt, 2);
}
/**
* This method stores the Proxy Ticket.
* @param $pt The Proxy Ticket.
* @private
*/
function setPT($pt)
{ $this->_pt = $pt; }
/**
* This method tells if a Proxy Ticket was stored.
* @return TRUE if a Proxy Ticket has been stored.
* @private
*/
function hasPT()
{ return !empty($this->_pt); }
/** @} */
// ########################################################################
// PT VALIDATION
// ########################################################################
/**
* @addtogroup internalProxied
* @{
*/
/**
* This method is used to validate a PT; halt on failure
*
* @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
*
* @private
*/
function validatePT(&$validate_url,&$text_response,&$tree_response)
{
$cas=new phpCAS();
$cas->traceBegin();
// build the URL to validate the ticket
$validate_url = $this->getServerProxyValidateURL().'&ticket='.$this->getPT();
if ( $this->isProxy() ) {
// pass the callback url for CAS proxies
$validate_url .= '&pgtUrl='.$this->getCallbackURL();
}
// open and read the URL
if ( !$this->readURL($validate_url,''/*cookies*/,$headers,$text_response,$err_msg) ) {
$cas->trace('could not open URL \''.$validate_url.'\' to validate ('.$err_msg.')');
$this->authError('PT not validated',
$validate_url,
TRUE/*$no_response*/);
}
// read the response of the CAS server into a DOM object
if ( !($dom = domxml_open_mem($text_response))) {
// read failed
$this->authError('PT not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
// read the root node of the XML tree
if ( !($tree_response = $dom->document_element()) ) {
// read failed
$this->authError('PT not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
// insure that tag name is 'serviceResponse'
if ( $tree_response->node_name() != 'serviceResponse' ) {
// bad root node
$this->authError('PT not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
if ( sizeof($arr = $tree_response->get_elements_by_tagname("authenticationSuccess")) != 0) {
// authentication succeded, extract the user name
if ( sizeof($arr = $tree_response->get_elements_by_tagname("user")) == 0) {
// no user specified => error
$this->authError('PT not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
$this->setUser(trim($arr[0]->get_content()));
} else if ( sizeof($arr = $tree_response->get_elements_by_tagname("authenticationFailure")) != 0) {
// authentication succeded, extract the error code and message
$this->authError('PT not validated',
$validate_url,
FALSE/*$no_response*/,
FALSE/*$bad_response*/,
$text_response,
$arr[0]->get_attribute('code')/*$err_code*/,
trim($arr[0]->get_content())/*$err_msg*/);
} else {
$this->authError('PT not validated',
$validate_url,
FALSE/*$no_response*/,
TRUE/*$bad_response*/,
$text_response);
}
// at this step, PT has been validated and $this->_user has been set,
$cas->traceEnd(TRUE);
return TRUE;
}
/** @} */
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// XX XX
// XX MISC XX
// XX XX
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
/**
* @addtogroup internalMisc
* @{
*/
// ########################################################################
// URL
// ########################################################################
/**
* the URL of the current request (without any ticket CGI parameter). Written
* and read by CASClient::getURL().
*
* @hideinitializer
* @private
*/
var $_url = '';
/**
* This method returns the URL of the current request (without any ticket
* CGI parameter).
*
* @return The URL
*
* @private
*/
function getURL()
{
$cas=new phpCAS();
$cas->traceBegin();
// the URL is built when needed only
if ( empty($this->_url) ) {
$final_uri = '';
// remove the ticket if present in the URL
$final_uri = ($this->isHttps()) ? 'https' : 'http';
$final_uri .= '://';
/* replaced by Julien Marchal - v0.4.6
* $this->_url .= $_SERVER['SERVER_NAME'];
*/
if(empty($_SERVER['HTTP_X_FORWARDED_SERVER'])){
/* replaced by teedog - v0.4.12
* $this->_url .= $_SERVER['SERVER_NAME'];
*/
if (empty($_SERVER['SERVER_NAME'])) {
$server_name = $_SERVER['HTTP_HOST'];
} else {
$server_name = $_SERVER['SERVER_NAME'];
}
} else {
$server_name = $_SERVER['HTTP_X_FORWARDED_SERVER'];
}
$final_uri .= $server_name;
if (!strpos($server_name, ':')) {
if ( ($this->isHttps() && $_SERVER['SERVER_PORT']!=443)
|| (!$this->isHttps() && $_SERVER['SERVER_PORT']!=80) ) {
$final_uri .= ':';
$final_uri .= $_SERVER['SERVER_PORT'];
}
}
$final_uri .= strtok($_SERVER['REQUEST_URI'],"?");
$cgi_params = '?'.strtok("?");
// remove the ticket if present in the CGI parameters
$cgi_params = preg_replace('/&ticket=[^&]*/','',$cgi_params);
$cgi_params = preg_replace('/\?ticket=[^&;]*/','?',$cgi_params);
$cgi_params = preg_replace('/\?%26/','?',$cgi_params);
$cgi_params = preg_replace('/\?&/','?',$cgi_params);
$cgi_params = preg_replace('/\?$/','',$cgi_params);
$final_uri .= $cgi_params;
$this->setURL($final_uri);
}
$cas->traceEnd($this->_url);
return $this->_url;
}
/**
* This method sets the URL of the current request
*
* @param $url url to set for service
*
* @private
*/
function setURL($url)
{
$this->_url = $url;
}
// ########################################################################
// AUTHENTICATION ERROR HANDLING
// ########################################################################
/**
* This method is used to print the HTML output when the user was not authenticated.
*
* @param $failure the failure that occured
* @param $cas_url the URL the CAS server was asked for
* @param $no_response the response from the CAS server (other
* parameters are ignored if TRUE)
* @param $bad_response bad response from the CAS server ($err_code
* and $err_msg ignored if TRUE)
* @param $cas_response the response of the CAS server
* @param $err_code the error code given by the CAS server
* @param $err_msg the error message given by the CAS server
*
* @private
*/
function authError($failure,$cas_url,$no_response,$bad_response='',$cas_response='',$err_code='',$err_msg='')
{
phpCAS::traceBegin();
$this->printHTMLHeader($this->getString(CAS_STR_AUTHENTICATION_FAILED));
printf($this->getString(CAS_STR_YOU_WERE_NOT_AUTHENTICATED),$this->getURL(),$_SERVER['SERVER_ADMIN']);
phpCAS::trace('CAS URL: '.$cas_url);
phpCAS::trace('Authentication failure: '.$failure);
if ( $no_response ) {
phpCAS::trace('Reason: no response from the CAS server');
} else {
if ( $bad_response ) {
phpCAS::trace('Reason: bad response from the CAS server');
} else {
switch ($this->getServerVersion()) {
case CAS_VERSION_1_0:
phpCAS::trace('Reason: CAS error');
break;
case CAS_VERSION_2_0:
if ( empty($err_code) )
phpCAS::trace('Reason: no CAS error');
else
phpCAS::trace('Reason: ['.$err_code.'] CAS error: '.$err_msg);
break;
}
}
phpCAS::trace('CAS response: '.$cas_response);
}
$this->printHTMLFooter();
phpCAS::traceExit();
exit();
}
/** @} */
}
?> OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/domxml-php4-php5.php 0100644 0001750 0001750 00000054375 11736060505 0026774 0 ustar 00guigui guigui =5.1 for XPath evaluation functions, and PHP>=5.1/libxml for DOMXML error reports)
Typical use:
{
if (PHP_VERSION>='5')
require_once('domxml-php4-to-php5.php');
}
Version 1.20a, 2008-11-06, http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
------------------------------------------------------------------
Written by Alexandre Alapetite, http://alexandre.alapetite.net/cv/
Copyright 2004-2008, GNU Lesser General Public License,
http://www.gnu.org/licenses/lgpl.html
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see
== Rights and obligations ==
- Attribution: You must give the original author credit.
- Share Alike: If you alter or transform this library,
you may distribute the resulting library only under the same license GNU/LGPL.
- In case of jurisdiction dispute, the French law is authoritative.
- Any of these conditions can be waived if you get permission from Alexandre Alapetite.
- Not required, but please send to Alexandre Alapetite the modifications you make,
in order to improve this file for the benefit of everybody.
If you want to distribute this code, please do it as a link to:
http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
*/
define('DOMXML_LOAD_PARSING',0);
define('DOMXML_LOAD_VALIDATING',1);
define('DOMXML_LOAD_RECOVERING',2);
define('DOMXML_LOAD_SUBSTITUTE_ENTITIES',4);
//define('DOMXML_LOAD_COMPLETE_ATTRS',8);
define('DOMXML_LOAD_DONT_KEEP_BLANKS',16);
function domxml_new_doc($version) {return new php4DOMDocument();}
function domxml_new_xmldoc($version) {return new php4DOMDocument();}
function domxml_open_file($filename,$mode=DOMXML_LOAD_PARSING,&$error=null)
{
$dom=new php4DOMDocument($mode);
$errorMode=(func_num_args()>2)&&defined('LIBXML_VERSION');
if ($errorMode) libxml_use_internal_errors(true);
if (!$dom->myDOMNode->load($filename)) $dom=null;
if ($errorMode)
{
$error=array_map('_error_report',libxml_get_errors());
libxml_clear_errors();
}
return $dom;
}
function domxml_open_mem($str,$mode=DOMXML_LOAD_PARSING,&$error=null)
{
$dom=new php4DOMDocument($mode);
$errorMode=(func_num_args()>2)&&defined('LIBXML_VERSION');
if ($errorMode) libxml_use_internal_errors(true);
if (!$dom->myDOMNode->loadXML($str)) $dom=null;
if ($errorMode)
{
$error=array_map('_error_report',libxml_get_errors());
libxml_clear_errors();
}
return $dom;
}
function html_doc($html_doc,$from_file=false)
{
$dom=new php4DOMDocument();
if ($from_file) $result=$dom->myDOMNode->loadHTMLFile($html_doc);
else $result=$dom->myDOMNode->loadHTML($html_doc);
return $result ? $dom : null;
}
function html_doc_file($filename) {return html_doc($filename,true);}
function xmldoc($str) {return domxml_open_mem($str);}
function xmldocfile($filename) {return domxml_open_file($filename);}
function xpath_eval($xpath_context,$eval_str,$contextnode=null) {return $xpath_context->xpath_eval($eval_str,$contextnode);}
function xpath_new_context($dom_document) {return new php4DOMXPath($dom_document);}
function xpath_register_ns($xpath_context,$prefix,$namespaceURI) {return $xpath_context->myDOMXPath->registerNamespace($prefix,$namespaceURI);}
function _entityDecode($text) {return html_entity_decode(strtr($text,array('''=>'\'')),ENT_QUOTES,'UTF-8');}
function _error_report($error) {return array('errormessage'=>$error->message,'nodename'=>'','line'=>$error->line,'col'=>$error->column)+($error->file==''?array():array('directory'=>dirname($error->file),'file'=>basename($error->file)));}
class php4DOMAttr extends php4DOMNode
{
function __get($name)
{
if ($name==='name') return $this->myDOMNode->name;
else return parent::__get($name);
}
function name() {return $this->myDOMNode->name;}
function set_content($text) {}
//function set_value($content) {return $this->myDOMNode->value=htmlspecialchars($content,ENT_QUOTES);}
function specified() {return $this->myDOMNode->specified;}
function value() {return $this->myDOMNode->value;}
}
class php4DOMDocument extends php4DOMNode
{
function php4DOMDocument($mode=DOMXML_LOAD_PARSING)
{
$this->myDOMNode=new DOMDocument();
$this->myOwnerDocument=$this;
if ($mode & DOMXML_LOAD_VALIDATING) $this->myDOMNode->validateOnParse=true;
if ($mode & DOMXML_LOAD_RECOVERING) $this->myDOMNode->recover=true;
if ($mode & DOMXML_LOAD_SUBSTITUTE_ENTITIES) $this->myDOMNode->substituteEntities=true;
if ($mode & DOMXML_LOAD_DONT_KEEP_BLANKS) $this->myDOMNode->preserveWhiteSpace=false;
}
function add_root($name)
{
if ($this->myDOMNode->hasChildNodes()) $this->myDOMNode->removeChild($this->myDOMNode->firstChild);
return new php4DOMElement($this->myDOMNode->appendChild($this->myDOMNode->createElement($name)),$this->myOwnerDocument);
}
function create_attribute($name,$value)
{
$myAttr=$this->myDOMNode->createAttribute($name);
$myAttr->value=htmlspecialchars($value,ENT_QUOTES);
return new php4DOMAttr($myAttr,$this);
}
function create_cdata_section($content) {return new php4DOMNode($this->myDOMNode->createCDATASection($content),$this);}
function create_comment($data) {return new php4DOMNode($this->myDOMNode->createComment($data),$this);}
function create_element($name) {return new php4DOMElement($this->myDOMNode->createElement($name),$this);}
function create_element_ns($uri,$name,$prefix=null)
{
if ($prefix==null) $prefix=$this->myDOMNode->lookupPrefix($uri);
if (($prefix==null)&&(($this->myDOMNode->documentElement==null)||(!$this->myDOMNode->documentElement->isDefaultNamespace($uri)))) $prefix='a'.sprintf('%u',crc32($uri));
return new php4DOMElement($this->myDOMNode->createElementNS($uri,$prefix==null ? $name : $prefix.':'.$name),$this);
}
function create_entity_reference($content) {return new php4DOMNode($this->myDOMNode->createEntityReference($content),$this);} //By Walter Ebert 2007-01-22
function create_processing_instruction($target,$data=''){return new php4DomProcessingInstruction($this->myDOMNode->createProcessingInstruction($target,$data),$this);}
function create_text_node($content) {return new php4DOMText($this->myDOMNode->createTextNode($content),$this);}
function document_element() {return parent::_newDOMElement($this->myDOMNode->documentElement,$this);}
function dump_file($filename,$compressionmode=false,$format=false)
{
$format0=$this->myDOMNode->formatOutput;
$this->myDOMNode->formatOutput=$format;
$res=$this->myDOMNode->save($filename);
$this->myDOMNode->formatOutput=$format0;
return $res;
}
function dump_mem($format=false,$encoding=false)
{
$format0=$this->myDOMNode->formatOutput;
$this->myDOMNode->formatOutput=$format;
$encoding0=$this->myDOMNode->encoding;
if ($encoding) $this->myDOMNode->encoding=$encoding;
$dump=$this->myDOMNode->saveXML();
$this->myDOMNode->formatOutput=$format0;
if ($encoding) $this->myDOMNode->encoding= $encoding0=='' ? 'UTF-8' : $encoding0; //UTF-8 is XML default encoding
return $dump;
}
function free()
{
if ($this->myDOMNode->hasChildNodes()) $this->myDOMNode->removeChild($this->myDOMNode->firstChild);
$this->myDOMNode=null;
$this->myOwnerDocument=null;
}
function get_element_by_id($id) {return parent::_newDOMElement($this->myDOMNode->getElementById($id),$this);}
function get_elements_by_tagname($name)
{
$myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
$nodeSet=array();
$i=0;
if (isset($myDOMNodeList))
while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=new php4DOMElement($node,$this);
return $nodeSet;
}
function html_dump_mem() {return $this->myDOMNode->saveHTML();}
function root() {return parent::_newDOMElement($this->myDOMNode->documentElement,$this);}
function xpath_new_context() {return new php4DOMXPath($this);}
}
class php4DOMElement extends php4DOMNode
{
function add_namespace($uri,$prefix)
{
if ($this->myDOMNode->hasAttributeNS('http://www.w3.org/2000/xmlns/',$prefix)) return false;
else
{
$this->myDOMNode->setAttributeNS('http://www.w3.org/2000/xmlns/','xmlns:'.$prefix,$uri); //By Daniel Walker 2006-09-08
return true;
}
}
function get_attribute($name) {return $this->myDOMNode->getAttribute($name);}
function get_attribute_node($name) {return parent::_newDOMElement($this->myDOMNode->getAttributeNode($name),$this->myOwnerDocument);}
function get_elements_by_tagname($name)
{
$myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
$nodeSet=array();
$i=0;
if (isset($myDOMNodeList))
while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=new php4DOMElement($node,$this->myOwnerDocument);
return $nodeSet;
}
function has_attribute($name) {return $this->myDOMNode->hasAttribute($name);}
function remove_attribute($name) {return $this->myDOMNode->removeAttribute($name);}
function set_attribute($name,$value)
{
//return $this->myDOMNode->setAttribute($name,$value); //Does not return a DomAttr
$myAttr=$this->myDOMNode->ownerDocument->createAttribute($name);
$myAttr->value=htmlspecialchars($value,ENT_QUOTES); //Entity problem reported by AL-DesignWorks 2007-09-07
$this->myDOMNode->setAttributeNode($myAttr);
return new php4DOMAttr($myAttr,$this->myOwnerDocument);
}
/*function set_attribute_node($attr)
{
$this->myDOMNode->setAttributeNode($this->_importNode($attr));
return $attr;
}*/
function set_name($name)
{
if ($this->myDOMNode->prefix=='') $newNode=$this->myDOMNode->ownerDocument->createElement($name);
else $newNode=$this->myDOMNode->ownerDocument->createElementNS($this->myDOMNode->namespaceURI,$this->myDOMNode->prefix.':'.$name);
$myDOMNodeList=$this->myDOMNode->attributes;
$i=0;
if (isset($myDOMNodeList))
while ($node=$myDOMNodeList->item($i++))
if ($node->namespaceURI=='') $newNode->setAttribute($node->name,$node->value);
else $newNode->setAttributeNS($node->namespaceURI,$node->nodeName,$node->value);
$myDOMNodeList=$this->myDOMNode->childNodes;
if (isset($myDOMNodeList))
while ($node=$myDOMNodeList->item(0)) $newNode->appendChild($node);
$this->myDOMNode->parentNode->replaceChild($newNode,$this->myDOMNode);
$this->myDOMNode=$newNode;
return true;
}
function tagname() {return $this->tagname;}
}
class php4DOMNode
{
public $myDOMNode;
public $myOwnerDocument;
function php4DOMNode($aDomNode,$aOwnerDocument)
{
$this->myDOMNode=$aDomNode;
$this->myOwnerDocument=$aOwnerDocument;
}
function __get($name)
{
switch ($name)
{
case 'type': return $this->myDOMNode->nodeType;
case 'tagname': return ($this->myDOMNode->nodeType===XML_ELEMENT_NODE) ? $this->myDOMNode->localName : $this->myDOMNode->tagName; //Avoid namespace prefix for DOMElement
case 'content': return $this->myDOMNode->textContent;
case 'value': return $this->myDOMNode->value;
default:
$myErrors=debug_backtrace();
trigger_error('Undefined property: '.get_class($this).'::$'.$name.' ['.$myErrors[0]['file'].':'.$myErrors[0]['line'].']',E_USER_NOTICE);
return false;
}
}
function add_child($newnode) {return append_child($newnode);}
function add_namespace($uri,$prefix) {return false;}
function append_child($newnode) {return self::_newDOMElement($this->myDOMNode->appendChild($this->_importNode($newnode)),$this->myOwnerDocument);}
function append_sibling($newnode) {return self::_newDOMElement($this->myDOMNode->parentNode->appendChild($this->_importNode($newnode)),$this->myOwnerDocument);}
function attributes()
{
$myDOMNodeList=$this->myDOMNode->attributes;
if (!(isset($myDOMNodeList)&&$this->myDOMNode->hasAttributes())) return null;
$nodeSet=array();
$i=0;
while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=new php4DOMAttr($node,$this->myOwnerDocument);
return $nodeSet;
}
function child_nodes()
{
$myDOMNodeList=$this->myDOMNode->childNodes;
$nodeSet=array();
$i=0;
if (isset($myDOMNodeList))
while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=self::_newDOMElement($node,$this->myOwnerDocument);
return $nodeSet;
}
function children() {return $this->child_nodes();}
function clone_node($deep=false) {return self::_newDOMElement($this->myDOMNode->cloneNode($deep),$this->myOwnerDocument);}
//dump_node($node) should only be called on php4DOMDocument
function dump_node($node=null) {return $node==null ? $this->myOwnerDocument->myDOMNode->saveXML($this->myDOMNode) : $this->myOwnerDocument->myDOMNode->saveXML($node->myDOMNode);}
function first_child() {return self::_newDOMElement($this->myDOMNode->firstChild,$this->myOwnerDocument);}
function get_content() {return $this->myDOMNode->textContent;}
function has_attributes() {return $this->myDOMNode->hasAttributes();}
function has_child_nodes() {return $this->myDOMNode->hasChildNodes();}
function insert_before($newnode,$refnode) {return self::_newDOMElement($this->myDOMNode->insertBefore($this->_importNode($newnode),$refnode==null?null:$refnode->myDOMNode),$this->myOwnerDocument);}
function is_blank_node() {return ($this->myDOMNode->nodeType===XML_TEXT_NODE)&&preg_match('%^\s*$%',$this->myDOMNode->nodeValue);}
function last_child() {return self::_newDOMElement($this->myDOMNode->lastChild,$this->myOwnerDocument);}
function new_child($name,$content)
{
$mySubNode=$this->myDOMNode->ownerDocument->createElement($name);
$mySubNode->appendChild($this->myDOMNode->ownerDocument->createTextNode(_entityDecode($content)));
$this->myDOMNode->appendChild($mySubNode);
return new php4DOMElement($mySubNode,$this->myOwnerDocument);
}
function next_sibling() {return self::_newDOMElement($this->myDOMNode->nextSibling,$this->myOwnerDocument);}
function node_name() {return ($this->myDOMNode->nodeType===XML_ELEMENT_NODE) ? $this->myDOMNode->localName : $this->myDOMNode->nodeName;} //Avoid namespace prefix for DOMElement
function node_type() {return $this->myDOMNode->nodeType;}
function node_value() {return $this->myDOMNode->nodeValue;}
function owner_document() {return $this->myOwnerDocument;}
function parent_node() {return self::_newDOMElement($this->myDOMNode->parentNode,$this->myOwnerDocument);}
function prefix() {return $this->myDOMNode->prefix;}
function previous_sibling() {return self::_newDOMElement($this->myDOMNode->previousSibling,$this->myOwnerDocument);}
function remove_child($oldchild) {return self::_newDOMElement($this->myDOMNode->removeChild($oldchild->myDOMNode),$this->myOwnerDocument);}
function replace_child($newnode,$oldnode) {return self::_newDOMElement($this->myDOMNode->replaceChild($this->_importNode($newnode),$oldnode->myDOMNode),$this->myOwnerDocument);}
function replace_node($newnode) {return self::_newDOMElement($this->myDOMNode->parentNode->replaceChild($this->_importNode($newnode),$this->myDOMNode),$this->myOwnerDocument);}
function set_content($text) {return $this->myDOMNode->appendChild($this->myDOMNode->ownerDocument->createTextNode(_entityDecode($text)));} //Entity problem reported by AL-DesignWorks 2007-09-07
//function set_name($name) {return $this->myOwnerDocument->renameNode($this->myDOMNode,$this->myDOMNode->namespaceURI,$name);}
function set_namespace($uri,$prefix=null)
{//Contributions by Daniel Walker 2006-09-08
$nsprefix=$this->myDOMNode->lookupPrefix($uri);
if ($nsprefix==null)
{
$nsprefix= $prefix==null ? $nsprefix='a'.sprintf('%u',crc32($uri)) : $prefix;
if ($this->myDOMNode->nodeType===XML_ATTRIBUTE_NODE)
{
if (($prefix!=null)&&$this->myDOMNode->ownerElement->hasAttributeNS('http://www.w3.org/2000/xmlns/',$nsprefix)&&
($this->myDOMNode->ownerElement->getAttributeNS('http://www.w3.org/2000/xmlns/',$nsprefix)!=$uri))
{//Remove namespace
$parent=$this->myDOMNode->ownerElement;
$parent->removeAttributeNode($this->myDOMNode);
$parent->setAttribute($this->myDOMNode->localName,$this->myDOMNode->nodeValue);
$this->myDOMNode=$parent->getAttributeNode($this->myDOMNode->localName);
return;
}
$this->myDOMNode->ownerElement->setAttributeNS('http://www.w3.org/2000/xmlns/','xmlns:'.$nsprefix,$uri);
}
}
if ($this->myDOMNode->nodeType===XML_ATTRIBUTE_NODE)
{
$parent=$this->myDOMNode->ownerElement;
$parent->removeAttributeNode($this->myDOMNode);
$parent->setAttributeNS($uri,$nsprefix.':'.$this->myDOMNode->localName,$this->myDOMNode->nodeValue);
$this->myDOMNode=$parent->getAttributeNodeNS($uri,$this->myDOMNode->localName);
}
elseif ($this->myDOMNode->nodeType===XML_ELEMENT_NODE)
{
$NewNode=$this->myDOMNode->ownerDocument->createElementNS($uri,$nsprefix.':'.$this->myDOMNode->localName);
foreach ($this->myDOMNode->attributes as $n) $NewNode->appendChild($n->cloneNode(true));
foreach ($this->myDOMNode->childNodes as $n) $NewNode->appendChild($n->cloneNode(true));
$xpath=new DOMXPath($this->myDOMNode->ownerDocument);
$myDOMNodeList=$xpath->query('namespace::*[name()!="xml"]',$this->myDOMNode); //Add old namespaces
foreach ($myDOMNodeList as $n) $NewNode->setAttributeNS('http://www.w3.org/2000/xmlns/',$n->nodeName,$n->nodeValue);
$this->myDOMNode->parentNode->replaceChild($NewNode,$this->myDOMNode);
$this->myDOMNode=$NewNode;
}
}
function unlink_node()
{
if ($this->myDOMNode->parentNode!=null)
{
if ($this->myDOMNode->nodeType===XML_ATTRIBUTE_NODE) $this->myDOMNode->parentNode->removeAttributeNode($this->myDOMNode);
else $this->myDOMNode->parentNode->removeChild($this->myDOMNode);
}
}
protected function _importNode($newnode) {return $this->myOwnerDocument===$newnode->myOwnerDocument ? $newnode->myDOMNode : $this->myOwnerDocument->myDOMNode->importNode($newnode->myDOMNode,true);} //To import DOMNode from another DOMDocument
static function _newDOMElement($aDOMNode,$aOwnerDocument)
{//Check the PHP5 DOMNode before creating a new associated PHP4 DOMNode wrapper
if ($aDOMNode==null) return null;
switch ($aDOMNode->nodeType)
{
case XML_ELEMENT_NODE: return new php4DOMElement($aDOMNode,$aOwnerDocument);
case XML_TEXT_NODE: return new php4DOMText($aDOMNode,$aOwnerDocument);
case XML_ATTRIBUTE_NODE: return new php4DOMAttr($aDOMNode,$aOwnerDocument);
case XML_PI_NODE: return new php4DomProcessingInstruction($aDOMNode,$aOwnerDocument);
default: return new php4DOMNode($aDOMNode,$aOwnerDocument);
}
}
}
class php4DomProcessingInstruction extends php4DOMNode
{
function data() {return $this->myDOMNode->data;}
function target() {return $this->myDOMNode->target;}
}
class php4DOMText extends php4DOMNode
{
function __get($name)
{
if ($name==='tagname') return '#text';
else return parent::__get($name);
}
function tagname() {return '#text';}
function set_content($text) {$this->myDOMNode->nodeValue=$text; return true;}
}
if (!defined('XPATH_NODESET'))
{
define('XPATH_UNDEFINED',0);
define('XPATH_NODESET',1);
define('XPATH_BOOLEAN',2);
define('XPATH_NUMBER',3);
define('XPATH_STRING',4);
/*define('XPATH_POINT',5);
define('XPATH_RANGE',6);
define('XPATH_LOCATIONSET',7);
define('XPATH_USERS',8);
define('XPATH_XSLT_TREE',9);*/
}
class php4DOMNodelist
{
private $myDOMNodelist;
public $nodeset;
public $type=XPATH_UNDEFINED;
public $value;
function php4DOMNodelist($aDOMNodelist,$aOwnerDocument)
{
if (!isset($aDOMNodelist)) return;
elseif (is_object($aDOMNodelist)||is_array($aDOMNodelist))
{
if ($aDOMNodelist->length>0)
{
$this->myDOMNodelist=$aDOMNodelist;
$this->nodeset=array();
$this->type=XPATH_NODESET;
$i=0;
while ($node=$this->myDOMNodelist->item($i++)) $this->nodeset[]=php4DOMNode::_newDOMElement($node,$aOwnerDocument);
}
}
elseif (is_int($aDOMNodelist)||is_float($aDOMNodelist))
{
$this->type=XPATH_NUMBER;
$this->value=$aDOMNodelist;
}
elseif (is_bool($aDOMNodelist))
{
$this->type=XPATH_BOOLEAN;
$this->value=$aDOMNodelist;
}
elseif (is_string($aDOMNodelist))
{
$this->type=XPATH_STRING;
$this->value=$aDOMNodelist;
}
}
}
class php4DOMXPath
{
public $myDOMXPath;
private $myOwnerDocument;
function php4DOMXPath($dom_document)
{
//TODO: If $dom_document is a DomElement, make that default $contextnode and modify XPath. Ex: '/test'
$this->myOwnerDocument=$dom_document->myOwnerDocument;
$this->myDOMXPath=new DOMXPath($this->myOwnerDocument->myDOMNode);
}
function xpath_eval($eval_str,$contextnode=null)
{
if (method_exists($this->myDOMXPath,'evaluate')) $xp=isset($contextnode) ? $this->myDOMXPath->evaluate($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->evaluate($eval_str);
else $xp=isset($contextnode) ? $this->myDOMXPath->query($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->query($eval_str);
$xp=new php4DOMNodelist($xp,$this->myOwnerDocument);
return ($xp->type===XPATH_UNDEFINED) ? false : $xp;
}
function xpath_register_ns($prefix,$namespaceURI) {return $this->myDOMXPath->registerNamespace($prefix,$namespaceURI);}
}
if (extension_loaded('xsl'))
{//See also: http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/
function domxml_xslt_stylesheet($xslstring) {return new php4DomXsltStylesheet(DOMDocument::loadXML($xslstring));}
function domxml_xslt_stylesheet_doc($dom_document) {return new php4DomXsltStylesheet($dom_document);}
function domxml_xslt_stylesheet_file($xslfile) {return new php4DomXsltStylesheet(DOMDocument::load($xslfile));}
class php4DomXsltStylesheet
{
private $myxsltProcessor;
function php4DomXsltStylesheet($dom_document)
{
$this->myxsltProcessor=new xsltProcessor();
$this->myxsltProcessor->importStyleSheet($dom_document);
}
function process($dom_document,$xslt_parameters=array(),$param_is_xpath=false)
{
foreach ($xslt_parameters as $param=>$value) $this->myxsltProcessor->setParameter('',$param,$value);
$myphp4DOMDocument=new php4DOMDocument();
$myphp4DOMDocument->myDOMNode=$this->myxsltProcessor->transformToDoc($dom_document->myDOMNode);
return $myphp4DOMDocument;
}
function result_dump_file($dom_document,$filename)
{
$html=$dom_document->myDOMNode->saveHTML();
file_put_contents($filename,$html);
return $html;
}
function result_dump_mem($dom_document) {return $dom_document->myDOMNode->saveHTML();}
}
}
?>
OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/CAS.php 0100644 0001750 0001750 00000115040 11736060505 0024342 0 ustar 00guigui guigui =')&&!function_exists("domxml_new_doc")) {
require_once(dirname(__FILE__).'/domxml-php4-php5.php');
}
/**
* @file CAS/CAS.php
* Interface class of the phpCAS library
*
* @ingroup public
*/
// ########################################################################
// CONSTANTS
// ########################################################################
// ------------------------------------------------------------------------
// CAS VERSIONS
// ------------------------------------------------------------------------
/**
* phpCAS version. accessible for the user by $this->getVersion().
*/
define('PHPCAS_VERSION','0.5.1-1');
// ------------------------------------------------------------------------
// CAS VERSIONS
// ------------------------------------------------------------------------
/**
* @addtogroup public
* @{
*/
/**
* CAS version 1.0
*/
define("CAS_VERSION_1_0",'1.0');
/*!
* CAS version 2.0
*/
define("CAS_VERSION_2_0",'2.0');
/** @} */
/**
* @addtogroup publicPGTStorage
* @{
*/
// ------------------------------------------------------------------------
// FILE PGT STORAGE
// ------------------------------------------------------------------------
/**
* Default path used when storing PGT's to file
*/
define("CAS_PGT_STORAGE_FILE_DEFAULT_PATH",'/tmp');
/**
* $this->setPGTStorageFile()'s 2nd parameter to write plain text files
*/
define("CAS_PGT_STORAGE_FILE_FORMAT_PLAIN",'plain');
/**
* $this->setPGTStorageFile()'s 2nd parameter to write xml files
*/
define("CAS_PGT_STORAGE_FILE_FORMAT_XML",'xml');
/**
* Default format used when storing PGT's to file
*/
define("CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT",CAS_PGT_STORAGE_FILE_FORMAT_PLAIN);
// ------------------------------------------------------------------------
// DATABASE PGT STORAGE
// ------------------------------------------------------------------------
/**
* default database type when storing PGT's to database
*/
define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE",'mysql');
/**
* default host when storing PGT's to database
*/
define("CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME",'localhost');
/**
* default port when storing PGT's to database
*/
define("CAS_PGT_STORAGE_DB_DEFAULT_PORT",'');
/**
* default database when storing PGT's to database
*/
define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE",'phpCAS');
/**
* default table when storing PGT's to database
*/
define("CAS_PGT_STORAGE_DB_DEFAULT_TABLE",'pgt');
/** @} */
// ------------------------------------------------------------------------
// SERVICE ACCESS ERRORS
// ------------------------------------------------------------------------
/**
* @addtogroup publicServices
* @{
*/
/**
* $this->service() error code on success
*/
define("PHPCAS_SERVICE_OK",0);
/**
* $this->service() error code when the PT could not retrieve because
* the CAS server did not respond.
*/
define("PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE",1);
/**
* $this->service() error code when the PT could not retrieve because
* the response of the CAS server was ill-formed.
*/
define("PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE",2);
/**
* $this->service() error code when the PT could not retrieve because
* the CAS server did not want to.
*/
define("PHPCAS_SERVICE_PT_FAILURE",3);
/**
* $this->service() error code when the service was not available.
*/
define("PHPCAS_SERVICE_NOT AVAILABLE",4);
/** @} */
// ------------------------------------------------------------------------
// LANGUAGES
// ------------------------------------------------------------------------
/**
* @addtogroup publicLang
* @{
*/
define("PHPCAS_LANG_ENGLISH", 'english');
define("PHPCAS_LANG_FRENCH", 'french');
define("PHPCAS_LANG_GREEK", 'greek');
define("PHPCAS_LANG_GERMAN", 'german');
define("PHPCAS_LANG_JAPANESE", 'japanese');
/** @} */
/**
* @addtogroup internalLang
* @{
*/
/**
* phpCAS default language (when $this->setLang() is not used)
*/
define("PHPCAS_LANG_DEFAULT", PHPCAS_LANG_ENGLISH);
/** @} */
// ------------------------------------------------------------------------
// MISC
// ------------------------------------------------------------------------
/**
* @addtogroup internalMisc
* @{
*/
/**
* This global variable is used by the interface class phpCAS.
*
* @hideinitializer
*/
$PHPCAS_CLIENT = null;
/**
* This global variable is used to store where the initializer is called from
* (to print a comprehensive error in case of multiple calls).
*
* @hideinitializer
*/
$PHPCAS_INIT_CALL = array('done' => FALSE,
'file' => '?',
'line' => -1,
'method' => '?');
/**
* This global variable is used to store where the method checking
* the authentication is called from (to print comprehensive errors)
*
* @hideinitializer
*/
$PHPCAS_AUTH_CHECK_CALL = array('done' => FALSE,
'file' => '?',
'line' => -1,
'method' => '?',
'result' => FALSE);
/**
* This global variable is used to store phpCAS debug mode.
*
* @hideinitializer
*/
$PHPCAS_DEBUG = array('filename' => FALSE,
'indent' => 0,
'unique_id' => '');
/** @} */
// ########################################################################
// CLIENT CLASS
// ########################################################################
// include client class
include_once(dirname(__FILE__).'/client.php');
// ########################################################################
// INTERFACE CLASS
// ########################################################################
/**
* @class phpCAS
* The phpCAS class is a simple container for the phpCAS library. It provides CAS
* authentication for web applications written in PHP.
*
* @ingroup public
* @author Pascal Aubry
*
* \internal All its methods access the same object ($PHPCAS_CLIENT, declared
* at the end of CAS/client.php).
*/
class phpCAS
{
// ########################################################################
// INITIALIZATION
// ########################################################################
/**
* @addtogroup publicInit
* @{
*/
/**
* phpCAS client initializer.
* @note Only one of the $this->client() and $this->proxy functions should be
* called, only once, and before all other methods (except $this->getVersion()
* and $this->setDebug()).
*
* @param $server_version the version of the CAS server
* @param $server_hostname the hostname of the CAS server
* @param $server_port the port the CAS server is running on
* @param $server_uri the URI the CAS server is responding on
* @param $start_session Have phpCAS start PHP sessions (default true)
*
* @return a newly created CASClient object
*/
function client($server_version,
$server_hostname,
$server_port,
$server_uri,
$start_session = true)
{
global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
$this->traceBegin();
if ( is_object($PHPCAS_CLIENT) ) {
$this->error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
}
if ( gettype($server_version) != 'string' ) {
$this->error('type mismatched for parameter $server_version (should be `string\')');
}
if ( gettype($server_hostname) != 'string' ) {
$this->error('type mismatched for parameter $server_hostname (should be `string\')');
}
if ( gettype($server_port) != 'integer' ) {
$this->error('type mismatched for parameter $server_port (should be `integer\')');
}
if ( gettype($server_uri) != 'string' ) {
$this->error('type mismatched for parameter $server_uri (should be `string\')');
}
// store where the initialzer is called from
$dbg = $this->backtrace();
$PHPCAS_INIT_CALL = array('done' => TRUE,
'file' => $dbg[0]['file'],
'line' => $dbg[0]['line'],
'method' => __CLASS__.'::'.__FUNCTION__);
// initialize the global object $PHPCAS_CLIENT
$PHPCAS_CLIENT = new CASClient($server_version,FALSE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
$this->traceEnd();
}
/**
* phpCAS proxy initializer.
* @note Only one of the $this->client() and $this->proxy functions should be
* called, only once, and before all other methods (except $this->getVersion()
* and $this->setDebug()).
*
* @param $server_version the version of the CAS server
* @param $server_hostname the hostname of the CAS server
* @param $server_port the port the CAS server is running on
* @param $server_uri the URI the CAS server is responding on
* @param $start_session Have phpCAS start PHP sessions (default true)
*
* @return a newly created CASClient object
*/
function proxy($server_version,
$server_hostname,
$server_port,
$server_uri,
$start_session = true)
{
global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
$this->traceBegin();
if ( is_object($PHPCAS_CLIENT) ) {
$this->error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
}
if ( gettype($server_version) != 'string' ) {
$this->error('type mismatched for parameter $server_version (should be `string\')');
}
if ( gettype($server_hostname) != 'string' ) {
$this->error('type mismatched for parameter $server_hostname (should be `string\')');
}
if ( gettype($server_port) != 'integer' ) {
$this->error('type mismatched for parameter $server_port (should be `integer\')');
}
if ( gettype($server_uri) != 'string' ) {
$this->error('type mismatched for parameter $server_uri (should be `string\')');
}
// store where the initialzer is called from
$dbg = $this->backtrace();
$PHPCAS_INIT_CALL = array('done' => TRUE,
'file' => $dbg[0]['file'],
'line' => $dbg[0]['line'],
'method' => __CLASS__.'::'.__FUNCTION__);
// initialize the global object $PHPCAS_CLIENT
$PHPCAS_CLIENT = new CASClient($server_version,TRUE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
$this->traceEnd();
}
/** @} */
// ########################################################################
// DEBUGGING
// ########################################################################
/**
* @addtogroup publicDebug
* @{
*/
/**
* Set/unset debug mode
*
* @param $filename the name of the file used for logging, or FALSE to stop debugging.
*/
function setDebug($filename='')
{
global $PHPCAS_DEBUG;
if ( $filename != FALSE && gettype($filename) != 'string' ) {
$this->error('type mismatched for parameter $dbg (should be FALSE or the name of the log file)');
}
if ( empty($filename) ) {
if ( preg_match('/^Win.*/',getenv('OS')) ) {
if ( isset($_ENV['TMP']) ) {
$debugDir = $_ENV['TMP'].'/';
} else if ( isset($_ENV['TEMP']) ) {
$debugDir = $_ENV['TEMP'].'/';
} else {
$debugDir = '';
}
} else {
$debugDir = '/tmp/';
}
$filename = $debugDir . 'phpCAS.log';
}
if ( empty($PHPCAS_DEBUG['unique_id']) ) {
$PHPCAS_DEBUG['unique_id'] = substr(mb_strtoupper(md5(uniqid(''))),0,4);
}
$PHPCAS_DEBUG['filename'] = $filename;
$this->trace('START ******************');
}
/** @} */
/**
* @addtogroup internalDebug
* @{
*/
/**
* This method is a wrapper for debug_backtrace() that is not available
* in all PHP versions (>= 4.3.0 only)
*/
function backtrace()
{
if ( function_exists('debug_backtrace') ) {
return debug_backtrace();
} else {
// poor man's hack ... but it does work ...
return array();
}
}
/**
* Logs a string in debug mode.
*
* @param $str the string to write
*
* @private
*/
function log($str)
{
$indent_str = ".";
global $PHPCAS_DEBUG;
if ( $PHPCAS_DEBUG['filename'] ) {
for ($i=0;$i<$PHPCAS_DEBUG['indent'];$i++) {
$indent_str .= '| ';
}
error_log($PHPCAS_DEBUG['unique_id'].' '.$indent_str.$str."\n",3,$PHPCAS_DEBUG['filename']);
}
}
/**
* This method is used by interface methods to print an error and where the function
* was originally called from.
*
* @param $msg the message to print
*
* @private
*/
function error($msg)
{
$dbg = $this->backtrace();
$function = '?';
$file = '?';
$line = '?';
if ( is_array($dbg) ) {
for ( $i=1; $i\nphpCAS error: ".__CLASS__."::".$function.'(): '.htmlentities($msg,ENT_COMPAT | ENT_HTML401,"UTF-8")." in ".$file." on line ".$line."
\n";
$this->trace($msg);
$this->traceExit();
exit();
}
/**
* This method is used to log something in debug mode.
*/
function trace($str)
{
$dbg = $this->backtrace();
$this->log($str.' ['.basename($dbg[1]['file']).':'.$dbg[1]['line'].']');
}
/**
* This method is used to indicate the start of the execution of a function in debug mode.
*/
function traceBegin()
{
global $PHPCAS_DEBUG;
$dbg = $this->backtrace();
$str = '=> ';
if ( !empty($dbg[2]['class']) ) {
$str .= $dbg[2]['class'].'::';
}
$str .= $dbg[2]['function'].'(';
if ( is_array($dbg[2]['args']) ) {
foreach ($dbg[2]['args'] as $index => $arg) {
if ( $index != 0 ) {
$str .= ', ';
}
$str .= str_replace("\n","",var_export($arg,TRUE));
}
}
$str .= ') ['.basename($dbg[2]['file']).':'.$dbg[2]['line'].']';
$this->log($str);
$PHPCAS_DEBUG['indent'] ++;
}
/**
* This method is used to indicate the end of the execution of a function in debug mode.
*
* @param $res the result of the function
*/
function traceEnd($res='')
{
global $PHPCAS_DEBUG;
$PHPCAS_DEBUG['indent'] --;
$dbg = $this->backtrace();
$str = '';
$str .= '<= '.str_replace("\n","",var_export($res,TRUE));
$this->log($str);
}
/**
* This method is used to indicate the end of the execution of the program
*/
function traceExit()
{
global $PHPCAS_DEBUG;
$this->log('exit()');
while ( $PHPCAS_DEBUG['indent'] > 0 ) {
$this->log('-');
$PHPCAS_DEBUG['indent'] --;
}
}
/** @} */
// ########################################################################
// INTERNATIONALIZATION
// ########################################################################
/**
* @addtogroup publicLang
* @{
*/
/**
* This method is used to set the language used by phpCAS.
* @note Can be called only once.
*
* @param $lang a string representing the language.
*
* @sa PHPCAS_LANG_FRENCH, PHPCAS_LANG_ENGLISH
*/
function setLang($lang)
{
global $PHPCAS_CLIENT;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
if ( gettype($lang) != 'string' ) {
$this->error('type mismatched for parameter $lang (should be `string\')');
}
$PHPCAS_CLIENT->setLang($lang);
}
/** @} */
// ########################################################################
// VERSION
// ########################################################################
/**
* @addtogroup public
* @{
*/
/**
* This method returns the phpCAS version.
*
* @return the phpCAS version.
*/
function getVersion()
{
return PHPCAS_VERSION;
}
/** @} */
// ########################################################################
// HTML OUTPUT
// ########################################################################
/**
* @addtogroup publicOutput
* @{
*/
/**
* This method sets the HTML header used for all outputs.
*
* @param $header the HTML header.
*/
function setHTMLHeader($header)
{
global $PHPCAS_CLIENT;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
if ( gettype($header) != 'string' ) {
$this->error('type mismatched for parameter $header (should be `string\')');
}
$PHPCAS_CLIENT->setHTMLHeader($header);
}
/**
* This method sets the HTML footer used for all outputs.
*
* @param $footer the HTML footer.
*/
function setHTMLFooter($footer)
{
global $PHPCAS_CLIENT;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
if ( gettype($footer) != 'string' ) {
$this->error('type mismatched for parameter $footer (should be `string\')');
}
$PHPCAS_CLIENT->setHTMLFooter($footer);
}
/** @} */
// ########################################################################
// PGT STORAGE
// ########################################################################
/**
* @addtogroup publicPGTStorage
* @{
*/
/**
* This method is used to tell phpCAS to store the response of the
* CAS server to PGT requests onto the filesystem.
*
* @param $format the format used to store the PGT's (`plain' and `xml' allowed)
* @param $path the path where the PGT's should be stored
*/
function setPGTStorageFile($format='',
$path='')
{
global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( !$PHPCAS_CLIENT->isProxy() ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
$this->error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
}
if ( gettype($format) != 'string' ) {
$this->error('type mismatched for parameter $format (should be `string\')');
}
if ( gettype($path) != 'string' ) {
$this->error('type mismatched for parameter $format (should be `string\')');
}
$PHPCAS_CLIENT->setPGTStorageFile($format,$path);
$this->traceEnd();
}
/**
* This method is used to tell phpCAS to store the response of the
* CAS server to PGT requests into a database.
* @note The connection to the database is done only when needed.
* As a consequence, bad parameters are detected only when
* initializing PGT storage, except in debug mode.
*
* @param $user the user to access the data with
* @param $password the user's password
* @param $database_type the type of the database hosting the data
* @param $hostname the server hosting the database
* @param $port the port the server is listening on
* @param $database the name of the database
* @param $table the name of the table storing the data
*/
function setPGTStorageDB($user,
$password,
$database_type='',
$hostname='',
$port=0,
$database='',
$table='')
{
global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( !$PHPCAS_CLIENT->isProxy() ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
$this->error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
}
if ( gettype($user) != 'string' ) {
$this->error('type mismatched for parameter $user (should be `string\')');
}
if ( gettype($password) != 'string' ) {
$this->error('type mismatched for parameter $password (should be `string\')');
}
if ( gettype($database_type) != 'string' ) {
$this->error('type mismatched for parameter $database_type (should be `string\')');
}
if ( gettype($hostname) != 'string' ) {
$this->error('type mismatched for parameter $hostname (should be `string\')');
}
if ( gettype($port) != 'integer' ) {
$this->error('type mismatched for parameter $port (should be `integer\')');
}
if ( gettype($database) != 'string' ) {
$this->error('type mismatched for parameter $database (should be `string\')');
}
if ( gettype($table) != 'string' ) {
$this->error('type mismatched for parameter $table (should be `string\')');
}
$PHPCAS_CLIENT->setPGTStorageDB($this,$user,$password,$hostname,$port,$database,$table);
$this->traceEnd();
}
/** @} */
// ########################################################################
// ACCESS TO EXTERNAL SERVICES
// ########################################################################
/**
* @addtogroup publicServices
* @{
*/
/**
* This method is used to access an HTTP[S] service.
*
* @param $url the service to access.
* @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
* success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
* PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
* @param $output the output of the service (also used to give an error
* message on failure).
*
* @return TRUE on success, FALSE otherwise (in this later case, $err_code
* gives the reason why it failed and $output contains an error message).
*/
function serviceWeb($url,&$err_code,&$output)
{
global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( !$PHPCAS_CLIENT->isProxy() ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
$this->error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
}
if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
$this->error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
}
if ( gettype($url) != 'string' ) {
$this->error('type mismatched for parameter $url (should be `string\')');
}
$res = $PHPCAS_CLIENT->serviceWeb($url,$err_code,$output);
$this->traceEnd($res);
return $res;
}
/**
* This method is used to access an IMAP/POP3/NNTP service.
*
* @param $url a string giving the URL of the service, including the mailing box
* for IMAP URLs, as accepted by imap_open().
* @param $flags options given to imap_open().
* @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
* success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
* PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
* @param $err_msg an error message on failure
* @param $pt the Proxy Ticket (PT) retrieved from the CAS server to access the URL
* on success, FALSE on error).
*
* @return an IMAP stream on success, FALSE otherwise (in this later case, $err_code
* gives the reason why it failed and $err_msg contains an error message).
*/
function serviceMail($url,$flags,&$err_code,&$err_msg,&$pt)
{
global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( !$PHPCAS_CLIENT->isProxy() ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
$this->error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
}
if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
$this->error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
}
if ( gettype($url) != 'string' ) {
$this->error('type mismatched for parameter $url (should be `string\')');
}
if ( gettype($flags) != 'integer' ) {
$this->error('type mismatched for parameter $flags (should be `integer\')');
}
$res = $PHPCAS_CLIENT->serviceMail($url,$flags,$err_code,$err_msg,$pt);
$this->traceEnd($res);
return $res;
}
/** @} */
// ########################################################################
// AUTHENTICATION
// ########################################################################
/**
* @addtogroup publicAuth
* @{
*/
/**
* Set the times authentication will be cached before really accessing the CAS server in gateway mode:
* - -1: check only once, and then never again (until you pree login)
* - 0: always check
* - n: check every "n" time
*
* @param $n an integer.
*/
function setCacheTimesForAuthRecheck($n)
{
global $PHPCAS_CLIENT;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
if ( gettype($header) != 'integer' ) {
$this->error('type mismatched for parameter $header (should be `string\')');
}
$PHPCAS_CLIENT->setCacheTimesForAuthRecheck($n);
}
/**
* This method is called to check if the user is authenticated (use the gateway feature).
* @return TRUE when the user is authenticated; otherwise FALSE.
*/
function checkAuthentication()
{
global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
$auth = $PHPCAS_CLIENT->checkAuthentication();
// store where the authentication has been checked and the result
$dbg = $this->backtrace();
$PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
'file' => $dbg[0]['file'],
'line' => $dbg[0]['line'],
'method' => __CLASS__.'::'.__FUNCTION__,
'result' => $auth );
$this->traceEnd($auth);
return $auth;
}
/**
* This method is called to force authentication if the user was not already
* authenticated. If the user is not authenticated, halt by redirecting to
* the CAS server.
*/
function forceAuthentication()
{
global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
$auth = $PHPCAS_CLIENT->forceAuthentication();
// store where the authentication has been checked and the result
$dbg = $this->backtrace();
$PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
'file' => $dbg[0]['file'],
'line' => $dbg[0]['line'],
'method' => __CLASS__.'::'.__FUNCTION__,
'result' => $auth );
if ( !$auth ) {
$this->trace('user is not authenticated, redirecting to the CAS server');
$PHPCAS_CLIENT->forceAuthentication();
} else {
$this->trace('no need to authenticate (user `'.$this->getUser().'\' is already authenticated)');
}
$this->traceEnd();
return $auth;
}
/**
* This method has been left from version 0.4.1 for compatibility reasons.
*/
function authenticate()
{
$this->error('this method is deprecated. You should use '.__CLASS__.'::forceAuthentication() instead');
}
/**
* This method is called to check if the user is authenticated (previously or by
* tickets given in the URL).
*
* @return TRUE when the user is authenticated.
*/
function isAuthenticated()
{
global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
// call the isAuthenticated method of the global $PHPCAS_CLIENT object
$auth = $PHPCAS_CLIENT->isAuthenticated();
// store where the authentication has been checked and the result
$dbg = $this->backtrace();
$PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
'file' => $dbg[0]['file'],
'line' => $dbg[0]['line'],
'method' => __CLASS__.'::'.__FUNCTION__,
'result' => $auth );
$this->traceEnd($auth);
return $auth;
}
/**
* Checks whether authenticated based on $_SESSION. Useful to avoid
* server calls.
* @return true if authenticated, false otherwise.
* @since 0.4.22 by Brendan Arnold
*/
function isSessionAuthenticated ()
{
global $PHPCAS_CLIENT;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
return($PHPCAS_CLIENT->isSessionAuthenticated());
}
/**
* This method returns the CAS user's login name.
* @warning should not be called only after $this->forceAuthentication()
* or $this->checkAuthentication().
*
* @return the login name of the authenticated user
*/
function getUser()
{
global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
$this->error('this method should only be called after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
}
if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
$this->error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
}
return $PHPCAS_CLIENT->getUser();
}
/**
* This method returns the URL to be used to login.
* or $this->isAuthenticated().
*
* @return the login name of the authenticated user
*/
function getServerLoginURL()
{
global $PHPCAS_CLIENT;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
return $PHPCAS_CLIENT->getServerLoginURL();
}
/**
* Set the login URL of the CAS server.
* @param $url the login URL
* @since 0.4.21 by Wyman Chan
*/
function setServerLoginURL($url='')
{
global $PHPCAS_CLIENT;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after
'.__CLASS__.'::client()');
}
if ( gettype($url) != 'string' ) {
$this->error('type mismatched for parameter $url (should be
`string\')');
}
$PHPCAS_CLIENT->setServerLoginURL($url);
$this->traceEnd();
}
/**
* This method returns the URL to be used to login.
* or $this->isAuthenticated().
*
* @return the login name of the authenticated user
*/
function getServerLogoutURL()
{
global $PHPCAS_CLIENT;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
}
return $PHPCAS_CLIENT->getServerLogoutURL();
}
/**
* Set the logout URL of the CAS server.
* @param $url the logout URL
* @since 0.4.21 by Wyman Chan
*/
function setServerLogoutURL($url='')
{
global $PHPCAS_CLIENT;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after
'.__CLASS__.'::client()');
}
if ( gettype($url) != 'string' ) {
$this->error('type mismatched for parameter $url (should be
`string\')');
}
$PHPCAS_CLIENT->setServerLogoutURL($url);
$this->traceEnd();
}
/**
* This method is used to logout from CAS. Halts by redirecting to the CAS server.
* @param $url a URL that will be transmitted to the CAS server (to come back to when logged out)
*/
function logout($url = "")
{
global $PHPCAS_CLIENT;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
}
$PHPCAS_CLIENT->logout($url);
// never reached
$this->traceEnd();
}
/**
* Set the fixed URL that will be used by the CAS server to transmit the PGT.
* When this method is not called, a phpCAS script uses its own URL for the callback.
*
* @param $url the URL
*/
function setFixedCallbackURL($url='')
{
global $PHPCAS_CLIENT;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( !$PHPCAS_CLIENT->isProxy() ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( gettype($url) != 'string' ) {
$this->error('type mismatched for parameter $url (should be `string\')');
}
$PHPCAS_CLIENT->setCallbackURL($url);
$this->traceEnd();
}
/**
* Set the fixed URL that will be set as the CAS service parameter. When this
* method is not called, a phpCAS script uses its own URL.
*
* @param $url the URL
*/
function setFixedServiceURL($url)
{
global $PHPCAS_CLIENT;
$this->traceBegin();
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( gettype($url) != 'string' ) {
$this->error('type mismatched for parameter $url (should be `string\')');
}
$PHPCAS_CLIENT->setURL($url);
$this->traceEnd();
}
/**
* Get the URL that is set as the CAS service parameter.
*/
function getServiceURL()
{
global $PHPCAS_CLIENT;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
return($PHPCAS_CLIENT->getURL());
}
/**
* Retrieve a Proxy Ticket from the CAS server.
*/
function retrievePT($target_service,&$err_code,&$err_msg)
{
global $PHPCAS_CLIENT;
if ( !is_object($PHPCAS_CLIENT) ) {
$this->error('this method should only be called after '.__CLASS__.'::proxy()');
}
if ( gettype($target_service) != 'string' ) {
$this->error('type mismatched for parameter $target_service(should be `string\')');
}
return($PHPCAS_CLIENT->retrievePT($target_service,$err_code,$err_msg));
}
/** @} */
}
// ########################################################################
// DOCUMENTATION
// ########################################################################
// ########################################################################
// MAIN PAGE
/**
* @mainpage
*
* The following pages only show the source documentation.
*
* For more information on phpCAS, please refer to http://esup-phpcas.sourceforge.net
*
*/
// ########################################################################
// MODULES DEFINITION
/** @defgroup public User interface */
/** @defgroup publicInit Initialization
* @ingroup public */
/** @defgroup publicAuth Authentication
* @ingroup public */
/** @defgroup publicServices Access to external services
* @ingroup public */
/** @defgroup publicConfig Configuration
* @ingroup public */
/** @defgroup publicLang Internationalization
* @ingroup publicConfig */
/** @defgroup publicOutput HTML output
* @ingroup publicConfig */
/** @defgroup publicPGTStorage PGT storage
* @ingroup publicConfig */
/** @defgroup publicDebug Debugging
* @ingroup public */
/** @defgroup internal Implementation */
/** @defgroup internalAuthentication Authentication
* @ingroup internal */
/** @defgroup internalBasic CAS Basic client features (CAS 1.0, Service Tickets)
* @ingroup internal */
/** @defgroup internalProxy CAS Proxy features (CAS 2.0, Proxy Granting Tickets)
* @ingroup internal */
/** @defgroup internalPGTStorage PGT storage
* @ingroup internalProxy */
/** @defgroup internalPGTStorageDB PGT storage in a database
* @ingroup internalPGTStorage */
/** @defgroup internalPGTStorageFile PGT storage on the filesystem
* @ingroup internalPGTStorage */
/** @defgroup internalCallback Callback from the CAS server
* @ingroup internalProxy */
/** @defgroup internalProxied CAS proxied client features (CAS 2.0, Proxy Tickets)
* @ingroup internal */
/** @defgroup internalConfig Configuration
* @ingroup internal */
/** @defgroup internalOutput HTML output
* @ingroup internalConfig */
/** @defgroup internalLang Internationalization
* @ingroup internalConfig
*
* To add a new language:
* - 1. define a new constant PHPCAS_LANG_XXXXXX in CAS/CAS.php
* - 2. copy any file from CAS/languages to CAS/languages/XXXXXX.php
* - 3. Make the translations
*/
/** @defgroup internalDebug Debugging
* @ingroup internal */
/** @defgroup internalMisc Miscellaneous
* @ingroup internal */
// ########################################################################
// EXAMPLES
/**
* @example example_simple.php
*/
/**
* @example example_proxy.php
*/
/**
* @example example_proxy2.php
*/
/**
* @example example_lang.php
*/
/**
* @example example_html.php
*/
/**
* @example example_file.php
*/
/**
* @example example_db.php
*/
/**
* @example example_service.php
*/
/**
* @example example_session_proxy.php
*/
/**
* @example example_session_service.php
*/
/**
* @example example_gateway.php
*/
?>
OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/lib/phpcas/README 0100644 0001750 0001750 00000000160 11736060505 0024077 0 ustar 00guigui guigui phpCAS - README
phpCAS documentation can be found in the docs/ folder or at http://esup-phpcas.sourceforge.net
OCSNG_UNIX_SERVER-2.0.5/ocsreports/backend/require/cas.config.php 0100644 0001750 0001750 00000000171 11736060505 0023720 0 ustar 00guigui guigui