Author: jfthomps
Date: Thu May 10 16:50:22 2012
New Revision: 1336790
URL: http://svn.apache.org/viewvc?rev=1336790&view=rev
Log:
VCL-576
Finalizing for 2.3 release
authmethods/shibauth.php: modified updateShibUser - cleaned up how names are
determined
conf-default.php:
-added ALLOWADDSHIBUSERS - this provides a way to add users to parts of the VCL
site without being to actually verify them via LDAP first
-removed $userlookupUsers - replaced by user group permission
-removed $affilValFunc, $addUserFunc, and $updateUserFunc examples for
shibboleth - moved to utils.php
privileges.php: modified userLookup - added section to display login history
utils.php:
-modified initGlobals - changed how $affilValFunc, $addUserFunc, and
$updateUserFunc get set based on ALLOWADDSHIBUSERS
-modified checkAccess and getNavMenu - removed global include for
$userlookupUsers
-modified getAffiliationTheme - added () around $row = mysql_fetch_assoc...
because the whole statement was always evaluating to false
shibauth/index.php:
-cleaned up a problem where a user could be passed through as authenticated
even though the IdP did not provide the eppn for the user
-added example for how to have all users for a specific affiliation added to a
user group
Modified:
incubator/vcl/trunk/web/.ht-inc/authmethods/shibauth.php
incubator/vcl/trunk/web/.ht-inc/conf-default.php
incubator/vcl/trunk/web/.ht-inc/privileges.php
incubator/vcl/trunk/web/.ht-inc/utils.php
incubator/vcl/trunk/web/shibauth/index.php
Modified: incubator/vcl/trunk/web/.ht-inc/authmethods/shibauth.php
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/authmethods/shibauth.php?rev=1336790&r1=1336789&r2=1336790&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/authmethods/shibauth.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/authmethods/shibauth.php Thu May 10
16:50:22 2012
@@ -44,6 +44,7 @@ function updateShibUser($userid) {
if($rc == -1)
return NULL;
+ $displast = '';
if(array_key_exists('displayName', $_SERVER) &&
! empty($_SERVER['displayName'])) {
# split displayName into first and last names
@@ -60,9 +61,14 @@ function updateShibUser($userid) {
$user['firstname'] = array_shift($names);
}
}
- else
+ elseif(array_key_exists('givenName', $_SERVER) &&
+ ! empty($_SERVER['givenName']))
$user['firstname'] = $_SERVER['givenName'];
- if(array_key_exists('sn', $_SERVER))
+ else
+ $user['firstname'] = '';
+
+ if(array_key_exists('sn', $_SERVER) &&
+ ! empty($_SERVER['sn']))
$user["lastname"] = $_SERVER['sn'];
else
$user['lastname'] = $displast;
Modified: incubator/vcl/trunk/web/.ht-inc/conf-default.php
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/conf-default.php?rev=1336790&r1=1336789&r2=1336790&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/conf-default.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/conf-default.php Thu May 10 16:50:22 2012
@@ -88,10 +88,15 @@ define("FILTERINGSELECTTHRESHOLD", 1000)
define("DEFAULTTHEME", 'default'); // this is the theme that will be used when
the site is placed in maintenance if $_COOKIE['VCLSKIN'] is not set
define("HELPFAQURL", "http://vcl.example.org/help-faq/");
-$ENABLE_ITECSAUTH = 0; // use ITECS accounts (also called "Non-NCSU"
accounts)
+define("ALLOWADDSHIBUSERS", 0); // this is only related to using Shibboleth
authentication for an affiliation that does not
+ // also have LDAP set up (i.e.
affiliation.shibonly = 1)
+ // set this to 1 to allow users be manually
added to VCL before they have ever logged in
+ // through things such as adding a user to a
user group or directly granting a user a
+ // privilege somewhere in the privilege tree.
Note that if you enable this and typo
+ // a userid, there is no way to verify that it
was entered incorrectly so the user
+ // will be added to the database with the
typoed userid
-$userlookupUsers = array(1, # admin
-);
+$ENABLE_ITECSAUTH = 0; // use ITECS accounts (also called "Non-NCSU"
accounts)
$xmlrpcBlockAPIUsers = array(3, # 3 = vclsystem
);
@@ -104,7 +109,7 @@ $authMechs = array(
"help" => "Only use Local Account if there
are no other options"),
/*"Shibboleth (UNC Federation)" => array("type" => "redirect",
"URL" =>
"https://federation.northcarolina.edu/wayf/wayf_framed.php?fed=FED_SHIB_UNC_DEV&version=dropdown&entityID=https%3A%2F%2Fvcl.ncsu.edu%2Fsp%2Fshibboleth&return=http%3A%2F%2Fvcl.ncsu.edu%2FShibboleth.sso%2FDS%3FSAMLDS%3D1%26target%3Dhttp%3A%2F%2Fvcl.ncsu.edu%2Fscheduling%2Fshibauth%2F",
- "affiliationid" => 0,
+ "affiliationid" => 0, // this should always be 0
for Shibboleth authentication
"help" => "Use Shibboleth (UNC Federation) if you
are from a University in the UNC system and do not see another method
specifically for your university"),*/
/*"EXAMPLE1 LDAP" => array("type" => "ldap",
"server" => "ldap.example.com", # hostname
of the ldap server
@@ -153,16 +158,6 @@ foreach($authMechs as $key => $item) {
$updateUserFunc[$item['affiliationid']] = create_function('',
'return NULL;');
}
}
-# if adding a Shibboleth option, uncomment the following 4 lines and change
'4' to match the affiliation id, create additional entries for further
shibboleth affiliations
-#$affilValFunc[4] = create_function('', 'return 1;');
-#$addUserFunc[4] = 'addShibUserStub';
-#$addUserFuncArgs[4] = 4;
-#$updateUserFunc[4] = create_function('', 'return NULL;');
-
-# any affiliation that is shibboleth authenticated without a corresponding
-# LDAP server needs an entry in addUserFunc
-# $addUserFunc[affiliationid goes here] = create_function('', 'return 0;');
-
$findAffilFuncs = array("testGeneralAffiliation");
Modified: incubator/vcl/trunk/web/.ht-inc/privileges.php
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/privileges.php?rev=1336790&r1=1336789&r2=1336790&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/privileges.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/privileges.php Thu May 10 16:50:22 2012
@@ -1395,6 +1395,61 @@ function userLookup() {
print " </tr>\n";
print "</table>\n";
+ # login history
+ $query = "SELECT authmech, "
+ . "timestamp, "
+ . "passfail, "
+ . "remoteIP, "
+ . "code "
+ . "FROM loginlog "
+ . "WHERE user = '{$userdata['unityid']}' AND "
+ . "affiliationid = {$userdata['affiliationid']} "
+ . "ORDER BY timestamp DESC "
+ . "LIMIT 8";
+ $logins = array();
+ $qh = doQuery($query);
+ while($row = mysql_fetch_assoc($qh))
+ $logins[] = $row;
+ if(count($logins)) {
+ $logins = array_reverse($logins);
+ print "<h3>Login History (last 8 attempts)</h3>\n";
+ print "<table summary=\"login attempts\">\n";
+ print "<colgroup>\n";
+ print "<col class=\"logincol\" />\n";
+ print "<col class=\"logincol\" />\n";
+ print "<col class=\"logincol\" />\n";
+ print "<col class=\"logincol\" />\n";
+ print "<col />\n";
+ print "</colgroup>\n";
+ print " <tr>\n";
+ print " <th>Authentication Method</th>\n";
+ print " <th>Timestamp</th>\n";
+ print " <th>Result</th>\n";
+ print " <th>Remote IP</th>\n";
+ print " <th>Extra Info</th>\n";
+ print " </tr>\n";
+ foreach($logins as $login) {
+ print " <tr>\n";
+ print " <td
class=\"logincell\">{$login['authmech']}</td>\n";
+ $ts = prettyDatetime($login['timestamp'], 1);
+ print " <td class=\"logincell\">$ts</td>\n";
+ if($login['passfail'])
+ print " <td
class=\"logincell\"><font color=\"#008000\">Pass</font></td>\n";
+ else
+ print " <td
class=\"logincell\"><font color=\"red\">Fail</font></td>\n";
+ print " <td
class=\"logincell\">{$login['remoteIP']}</td>\n";
+ print " <td
class=\"logincell\">{$login['code']}</td>\n";
+ print " </tr>\n";
+ }
+ print "</table>\n";
+ }
+ else {
+ print "<h3>Login History</h3>\n";
+ print "There are no login attempts by this user.<br>\n";
+ }
+
+
+ # reservation history
$requests = array();
$query = "SELECT DATE_FORMAT(l.start, '%W, %b %D, %Y, %h:%i
%p') AS start, "
. "DATE_FORMAT(l.finalend, '%W, %b %D, %Y, %h:%i
%p') AS end, "
Modified: incubator/vcl/trunk/web/.ht-inc/utils.php
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/utils.php?rev=1336790&r1=1336789&r2=1336790&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/utils.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/utils.php Thu May 10 16:50:22 2012
@@ -239,10 +239,20 @@ function initGlobals() {
$qh = doQuery($query);
while($row = mysql_fetch_assoc($qh)) {
$id = $row['id'];
- if(! array_key_exists($id, $affilValFunc))
- $affilValFunc[$id] = create_function('', 'return 0;');
- if(! array_key_exists($id, $addUserFunc))
- $addUserFunc[$id] = create_function('', 'return 0;');
+ if(! array_key_exists($id, $affilValFunc)) {
+ if(ALLOWADDSHIBUSERS)
+ $affilValFunc[$id] = create_function('',
'return 1;');
+ else
+ $affilValFunc[$id] = create_function('',
'return 0;');
+ }
+ if(! array_key_exists($id, $addUserFunc)) {
+ if(ALLOWADDSHIBUSERS) {
+ $addUserFunc[$id] = 'addShibUserStub';
+ $addUserFuncArgs[$id] = $id;
+ }
+ else
+ $addUserFunc[$id] = create_function('', 'return
0;');
+ }
if(! array_key_exists($id, $updateUserFunc))
$updateUserFunc[$id] = create_function('', 'return
NULL;');
}
@@ -315,7 +325,7 @@ function initGlobals() {
function checkAccess() {
global $mode, $user, $actionFunction, $authMechs;
global $itecsauthkey, $ENABLE_ITECSAUTH, $actions, $noHTMLwrappers;
- global $inContinuation, $docreaders, $userlookupUsers;
+ global $inContinuation, $docreaders;
if($mode == 'xmlrpccall') {
// double check for SSL
if(! isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") {
@@ -3042,7 +3052,7 @@ function getAffiliationDataUpdateText($a
function getAffiliationTheme($affilid) {
$query = "SELECT theme FROM affiliation WHERE id = $affilid";
$qh = doQuery($query);
- if($row = mysql_fetch_assoc($qh) && ! empty($row['theme']))
+ if(($row = mysql_fetch_assoc($qh)) && ! empty($row['theme']))
return $row['theme'];
else
return 'default';
@@ -10327,7 +10337,7 @@ function printHTMLHeader() {
///
////////////////////////////////////////////////////////////////////////////////
function getNavMenu($inclogout, $inchome, $homeurl=HOMEURL) {
- global $user, $docreaders, $authed, $userlookupUsers;
+ global $user, $docreaders, $authed;
global $mode;
if($authed && $mode != 'expiredemouser') {
$computermetadata = getUserComputerMetaData();
Modified: incubator/vcl/trunk/web/shibauth/index.php
URL:
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/shibauth/index.php?rev=1336790&r1=1336789&r2=1336790&view=diff
==============================================================================
--- incubator/vcl/trunk/web/shibauth/index.php (original)
+++ incubator/vcl/trunk/web/shibauth/index.php Thu May 10 16:50:22 2012
@@ -29,13 +29,10 @@ dbConnect();
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 1 Jan 2000 00:00:00 GMT");
-if(! array_key_exists('eppn', $_SERVER) ||
- (! (array_key_exists('sn', $_SERVER) &&
- array_key_exists('givenName', $_SERVER)) &&
- ! array_key_exists('displayName', $_SERVER))) {
-
+/*
# check for eppn; if there, see if it is a user we already have
if(array_key_exists('eppn', $_SERVER)) {
+ #$tmp = explode('@', $_SERVER['eppn']);
$tmp = explode(';', $_SERVER['eppn']);
$tmp = explode('@', $tmp[0]);
$query = "SELECT u.firstname, "
@@ -51,42 +48,41 @@ if(! array_key_exists('eppn', $_SERVER)
$_SERVER['givenName'] = $row['firstname'];
}
else {
- # check to see if any shib stuff in $_SERVER, if not
redirect
- $keys = array_keys($_SERVER);
- $allkeys = '{' . implode('{', $keys);
- if(! preg_match('/\{Shib-/', $allkeys)) {
- # no shib data, clear _shibsession cookie
- foreach(array_keys($_COOKIE) as $key) {
-
if(preg_match('/^_shibsession[_0-9a-fA-F]+$/', $key))
- setcookie($key, "", time() -
10, "/", $_SERVER['SERVER_NAME']);
- }
- # redirect to main select auth page
- header("Location: " . BASEURL . SCRIPT .
"?mode=selectauth");
- dbDisconnect();
- exit;
- }
- print "<h2>Error with Shibboleth authentication</h2>\n";
- print "You have attempted to log in using Shibboleth
from an<br>\n";
- print "institution that does not allow VCL to see all
of these<br>\n";
- print "attributes:<br>\n";
- print "<ul>\n";
- print "<li>eduPersonPrincipalName</li>\n";
- print "</ul>\n";
- print "and either:\n";
- print "<ul>\n";
- print "<li>sn and givenName</li>\n";
- print "</ul>\n";
- print "or:\n";
- print "<ul>\n";
- print "<li>displayName</li>\n";
- print "</ul>\n";
- print "You need to contact the administrator of your
institution's<br>\n";
- print "IdP to have all of those attributes be available
to VCL in<br>\n";
- print "order to log in using Shibboleth.\n";
- dbDisconnect();
- exit;
+*/
+
+if(! array_key_exists('eppn', $_SERVER)) {
+ # check to see if any shib stuff in $_SERVER, if not redirect
+ $keys = array_keys($_SERVER);
+ $allkeys = '{' . implode('{', $keys);
+ if(! preg_match('/\{Shib-/', $allkeys)) {
+ # no shib data, clear _shibsession cookie
+ #print "$allkeys<br>\n";
+ foreach(array_keys($_COOKIE) as $key) {
+ if(preg_match('/^_shibsession[_0-9a-fA-F]+$/', $key))
+ setcookie($key, "", time() - 10, "/",
$_SERVER['SERVER_NAME']);
}
+ # redirect to main select auth page
+ header("Location: " . BASEURL . SCRIPT . "?mode=selectauth");
+ dbDisconnect();
+ exit;
}
+ print "<h2>Error with Shibboleth authentication</h2>\n";
+ print "You have attempted to log in using Shibboleth from an<br>\n";
+ print "institution that does not allow VCL to see your<br><br>\n";
+ print "eduPersonPrincipalName.<br><br>\n";
+ print "You need to contact the administrator of your
institution's<br>\n";
+ print "IdP to have eduPersonPrincipalName made available to VCL
in<br>\n";
+ print "order to log in using Shibboleth.\n";
+
+ $msg = "Someone tried to log in to VCL using Shibboleth from an IdP "
+ . "that does not release eppn to us.\n\n"
+ . "The following data was in \$_SERVER:\n\n";
+ foreach($_SERVER as $key => $val)
+ $msg .= "$key => $val\n";
+ $mailParams = "-f" . ENVELOPESENDER;
+ mail(ERROREMAIL, "Error with VCL pages (eppn not provided)", $msg, '',
$mailParams);
+ dbDisconnect();
+ exit;
}
// open keys
@@ -134,7 +130,7 @@ if(! ($row = mysql_fetch_assoc($qh))) {
$newaffilname = $affilname;
}
else {
- $msg = "Someone tried to log in to VCL using Shibboleth
from an idp "
+ $msg = "Someone tried to log in to VCL using Shibboleth
from an IdP "
. "affiliation that could not be automatically
added.\n\n"
. "eppn: {$_SERVER['eppn']}\n"
. "givenName: {$_SERVER['givenName']}\n"
@@ -190,11 +186,26 @@ else {
$affilid = getAffiliationID($affil);
addLoginLog($userid, 'shibboleth', $affilid, 1);
+# uncomment the following and change EXAMPLE1 to match your needs to add all
+# users from a specific affiliation to a particular user group
+/*if($affil == 'EXAMPLE1') {
+ $gid = getUserGroupID('All EXAMPLE1 Users', $affilid);
+ $query = "INSERT IGNORE INTO usergroupmembers "
+ . "(userid, usergroupid) "
+ . "VALUES ($usernid, $gid)";
+ doQuery($query, 307);
+}*/
+
+if(array_key_exists('Shib-logouturl', $_SERVER))
+ $logouturl = $_SERVER['Shib-logouturl'];
+else
+ $logouturl = '';
+
# save data to shibauth table
$shibdata = array('Shib-Application-ID' => $_SERVER['Shib-Application-ID'],
'Shib-Identity-Provider' =>
$_SERVER['Shib-Identity-Provider'],
- 'Shib-AuthnContext-Dec' =>
$_SERVER['Shib-AuthnContext-Decl'],
- 'Shib-logouturl' => $_SERVER['Shib-logouturl'],
+ #'Shib-AuthnContext-Dec' =>
$_SERVER['Shib-AuthnContext-Decl'],
+ 'Shib-logouturl' => $logouturl,
'eppn' => $_SERVER['eppn'],
'unscoped-affiliation' => $_SERVER['unscoped-affiliation'],
'affiliation' => $_SERVER['affiliation'],