Author: jfthomps
Date: Tue Jun 16 14:55:02 2009
New Revision: 785242

URL: http://svn.apache.org/viewvc?rev=785242&view=rev
Log:
VCL-139

both files:
removed requirement of user's email address being passed in

shibauth/index.php:
-added a check for passed in eppn already existing in database; if so, no other 
fields are required
-removed all NCSU specific cases when setting the skin cookie

Modified:
    incubator/vcl/trunk/web/.ht-inc/authmethods/shibauth.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=785242&r1=785241&r2=785242&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/authmethods/shibauth.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/authmethods/shibauth.php Tue Jun 16 
14:55:02 2009
@@ -47,7 +47,8 @@
                $user["lastname"] = $_SERVER['sn'];
        else
                $user['lastname'] = $displast;
-       $user["email"] = $_SERVER['mail'];
+       if(array_key_exists('mail', $_SERVER))
+               $user["email"] = $_SERVER['mail'];
        $user['unityid'] = $userid;
        $user['affilid'] = $affilid;
 
@@ -65,9 +66,10 @@
        $user['id'] = $row['id'];
        $query = "UPDATE user "
               . "SET firstname = '{$user['firstname']}', "
-              .     "lastname = '{$user['lastname']}', "
-              .     "email = '{$user['email']}', " 
-              .     "emailnotices = 0, " 
+              .     "lastname = '{$user['lastname']}', ";
+       if(array_key_exists('email', $user))
+               $query .= "email = '{$user['email']}', ";
+       $query .=    "emailnotices = 0, " 
               .     "lastupdated = NOW() " 
               . "WHERE uid = {$user['id']}";
        doQuery($query, 101, 'vcl', 1);
@@ -97,17 +99,19 @@
               .        "(unityid, "
               .        "affiliationid, "
               .        "firstname, "
-              .        "lastname, "
-              .        "email, "
-              .        "emailnotices, "
+              .        "lastname, ";
+       if(array_key_exists('email', $user))
+               $query .=    "email, ";
+       $query .=       "emailnotices, "
               .        "lastupdated) "
               . "VALUES ("
               .        "'{$user['unityid']}', "
               .        "{$user['affilid']}, "
               .        "'{$user['firstname']}', "
-              .        "'{$user['lastname']}', "
-              .        "'{$user['email']}', "
-              .        "0, "
+              .        "'{$user['lastname']}', ";
+       if(array_key_exists('email', $user))
+               $query .=    "'{$user['email']}', ";
+       $query .=       "0, "
               .        "NOW())";
        doQuery($query, 101, 'vcl', 1);
        if(mysql_affected_rows($mysql_link_vcl)) {

Modified: incubator/vcl/trunk/web/shibauth/index.php
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/shibauth/index.php?rev=785242&r1=785241&r2=785242&view=diff
==============================================================================
--- incubator/vcl/trunk/web/shibauth/index.php (original)
+++ incubator/vcl/trunk/web/shibauth/index.php Tue Jun 16 14:55:02 2009
@@ -2,57 +2,75 @@
 chdir("..");
 require_once('.ht-inc/conf.php');
 
+require_once('.ht-inc/utils.php');
+require_once('.ht-inc/errors.php');
+function getFooter() {}
+$noHTMLwrappers = array();
+
+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('mail', $_SERVER) ||
    (! (array_key_exists('sn', $_SERVER) &&
    array_key_exists('givenName', $_SERVER)) &&
    ! array_key_exists('displayName', $_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
-               foreach(array_keys($_COOKIE) as $key) {
-                       if(preg_match('/^_shibsession[_0-9a-fA-F]+$/', $key))
-                               setcookie($key, "", time() - 10, "/", 
$_SERVER['SERVER_NAME']);
+       # check for eppn; if there, see if it is a user we already have
+       if(array_key_exists('eppn', $_SERVER)) {
+               $tmp = explode('@', $_SERVER['eppn']);
+               $query = "SELECT u.firstname, "
+                                .        "u.lastname "
+                                . "FROM user u, "
+                                .      "affiliation a "
+                                . "WHERE u.unityid = '{$tmp[0]}' AND "
+                                .       "a.shibname = '{$tmp[1]}' AND "
+                                .       "u.affiliationid = a.id";
+               $qh = doQuery($query, 101);
+               if($row = mysql_fetch_assoc($qh)) {
+                       $_SERVER['sn'] = $row['lastname'];
+                       $_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;
                }
-               # redirect to main select auth page
-               header("Location: " . BASEURL . SCRIPT . "?mode=selectauth");
-               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 "<li>mail</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";
-       exit;
 }
 
-require_once('.ht-inc/utils.php');
-require_once('.ht-inc/errors.php');
-function getFooter() {}
-$noHTMLwrappers = array();
-
-dbConnect();
-
 // open keys
 $fp = fopen(".ht-inc/keys.pem", "r");
 $key = fread($fp, 8192);
@@ -80,7 +98,8 @@
        array_pop($tmp);
        $affilname = strtoupper(implode('', $tmp));
        $affilname = preg_replace('/[^A-Z0-9]/', '', $affilname);
-       $query = "SELECT name "
+       $query = "SELECT name, "
+              .        "shibname "
               . "FROM affiliation "
               . "WHERE name LIKE '$affilname%' "
               . "ORDER BY name DESC "
@@ -92,14 +111,18 @@
                        $cnt++;
                        $newaffilname = $affilname . $cnt;
                }
+               elseif($affilname != $row['name'] && $affil != 
$row['shibname']) {
+                       $newaffilname = $affilname;
+               }
                else {
                        $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"
-                            . "sn: {$_SERVER['sn']}\n"
-                            . "mail: {$_SERVER['mail']}\n\n"
-                            . "tried to add VCL affiliation name 
\"$affilname\" with "
+                            . "sn: {$_SERVER['sn']}\n";
+                       if(array_key_exists('mail', $_SERVER))
+                               $msg .= "mail: {$_SERVER['mail']}\n\n";
+                       $msg .="tried to add VCL affiliation name 
\"$affilname\" with "
                             . "shibname \"$affil\"";
                        $mailParams = "-f" . ENVELOPESENDER;
                        mail(ERROREMAIL, "Error with VCL pages (problem adding 
shib affil)", $msg, '', $mailParams);
@@ -189,13 +212,9 @@
        setcookie("VCLAUTH", "{$cookie['data']}", 0, "/", COOKIEDOMAIN);
 # set skin cookie based on affiliation
 switch($affil) {
-       case 'WakeTech':
-       case 'JohnstonCC':
+       case 'Example1':
+       case 'EXAMPLE2':
                $skin = strtoupper($affil);
-       case 'NCCU':
-       case 'ECU':
-       case 'UNCG':
-       case 'WCU':
                setcookie("VCLSKIN", $skin, (time() + (SECINDAY * 31)), "/", 
COOKIEDOMAIN);
                break;
        default:


Reply via email to