* * @version $Id: acceso.php,v 1.11 2006-10-20 09:57:25 ahuezo Exp $ * * @copywright GPL * * $Log: acceso.php,v $ * Revision 1.11 2006-10-20 09:57:25 ahuezo * Se elimina una condici髇 en la linea 102 que impide logearse cuando no hay galleta * * Revision 1.10 2006-10-13 19:12:15 ahuezo * Se corrige error de l骻ica en l韓ea para conservar sesion * * Revision 1.9 2006-10-12 18:11:44 ahuezo * Limpieza de c骴igo. Se elimina mucho c骴igo innecesario y se agrega manejo de excepciones. Falta todav韆 limpiar la mugre de la librer韆 de usuarios. * * */ // TODO: incluir esta referencia correctamente // include_once('/home/pmorales/src/checkCountryAccess.php'); header("Content-Type: text/html; charset=UTF-8"); session_start(); /* * Control de Cache de p谩ginas */ header('Expires: ' . gmdate("D, d M Y H:i:s", time()+1000) . ' GMT'); header('Cache-Control: Private'); include_once("app.conf.php"); if(!defined('_SYSTEM_PATH')) define('_SYSTEM_PATH', "../"); include_once(_SYSTEM_PATH."lib/dbconnector.lib.class.php"); include_once(_SYSTEM_PATH."lib/LogActions.lib.class.php"); include_once(_SYSTEM_PATH."lib/usuario.lib.php"); include_once(_SYSTEM_PATH."lib/common.lib.php"); /* * Inicializaci贸n de variables globales */ $match=array(); $xslParams = $_XSL; $xslt = 'acceso.xsl'; $err = ''; $xml = ''; $xmlJS = ''; $xmlMenu = ''; $rootTag = array(); $contentTag = array(); /* * Antes de iniciar un m贸dulo se redirigen los errores de php al control de excepciones */ function exceptions_error_handler($severity, $message, $filename, $lineno) { throw new ErrorException($message, 0, $severity, $filename, $lineno); } set_error_handler('exceptions_error_handler'); $xmlErr = new XMLError(); setlocale(LC_TIME, "es_MX"); date_default_timezone_set('America/Mexico_City'); $_SESSION['~run'] = rand(1,999999); $mes = array( "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ); $diaSemana = array( "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo" ); // FECHA POR DEFAULT $ltime = localtime(time(),1); $yy=substr($ltime['tm_year']+1900, 0,4); $y=substr($yy, 2,2); $m=$ltime['tm_mon']+1; $d = $ltime['tm_mday']; $contentTag[] = xmlTag('fechaHoy',$d." de ".$mes[intval($m)-1]." del ".$yy); $contentTag[] = xmlTag('mensaje','Bienvenido'); $rq = htmlspecialchars($_SERVER['REQUEST_URI']); if(!isset($_REQUEST['t'])) $_REQUEST['t']=''; try { // OJO: Arreglar esto para que los errores por conexi贸n se vean bonitos $db = new dbconnector(USR_DBHOST, TRUE, USR_DBUSER, USR_DBPASS, USR_DBNAME); if(isset($_SESSION['~claveAcceso'])) { $log = new LogActions($_SESSION['~claveAcceso'], USR_DBNAME, 'log'); $contentTag[] = xmlTag('clave_acceso',$_SESSION['~claveAcceso']); } $ds=ldap_connect($ldap_server); ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3); ldap_set_option($ds,LDAP_OPT_REFERRALS,0); if (!$ds) raiseError(_E_FATAL,$err++,"Error de conexi贸n LDAP"); $loop=TRUE; while ($loop) { $loop=FALSE; switch($_REQUEST['t']) { case 'iS': $trials=1; if(isset($_SESSION['~login-trials'])) $trials=$_SESSION['~login-trials']; // Como el appserver mantiene su espacio de usuarios todav铆a independiente de la base LDAP // se debe preguntar si existe primero para el appserver // El usuario debe existir en ambas bases, como 'uid' en LDAP y como 'usuario' en Mysql // este if se debe eliminar en cuanto el LDAP se haga cargo por completo $usuario = $db->query(sprintf(_SELECT_USR2,$_REQUEST['cA'])); if(is_array($usuario)) { switch(ldapBindUser($ds, $usuario[0]['usuario'], $_REQUEST['cS'])) { case -1: $xmlErr->raise(XMLError::E_FATAL,"Conexi贸n LDAP fallida. Reintente mas tarde o avise a soporte t茅cnico"); break; case -2: $xmlErr->raise(XMLError::E_FATAL,"Usuario no encontrado en base LDAP, Incongruencia de datos".__FILE__.__METHOD__.__LINE__); break; case -4: $xmlErr->raise(XMLError::E_FATAL,"Contrase帽a Incorrecta, Intente nuevamente."); break; default: // Acceso concedido $_SESSION['~logged-in'] = 1; $_SESSION['~login-trials'] = 1; $_SESSION['~claveAcceso'] = $_REQUEST['cA']; if(isset($_REQUEST['cva'])) $_SESSION['~claveAplicacion'] = $_REQUEST['cva']; if(isset($_REQUEST['cvp'])) $_SESSION['~clavePerfil'] = $_REQUEST['cvp']; $xslt = "accesoMenu.xsl"; $rootTag[] = xmlTag('app_context_menu', xmlTag('item','Salir', array('cgi_params'=>'t=salir')). xmlTag('item','Ayuda')); if(intval($contentTag[] = xmlUser($db, $usuario[0]))<0) $xmlErr->raise(XMLError::E_FATAL,"Usuario inhabilitado, favor de contactar a soporte t茅cnico."); if(isset($_REQUEST['rq'])) { header("Location: http://".$_SERVER['SERVER_NAME'].$_REQUEST['rq'],true); exit; } } } else { // Usuario no existe en base de datos mysql $_SESSION['~login-trials'] = ++$trials; $xmlErr->raise(XMLError::E_FATAL,"Su usuario no esta registrado en la Intranet"); } break; case 'reinicio': $_SESSION['~logged-in'] = 0; $contentTag[] = xmlTag('mensajeExtra','FAVOR DE INICIAR SESI脫N NUEVAMENTE'); break; case 'salir': $_SESSION['~logged-in'] = 0; break; // NOS PASAMOS OLIMPICAMENTE AL DEFAULT: default: if(isset($_SESSION['~logged-in'])) { if($_SESSION['~logged-in']==1 && $_REQUEST['t'] != "salir") { $usuario = $db->query(sprintf(_SELECT_USR2,$_SESSION['~claveAcceso'])); if(is_array($usuario)) { $xslt = "accesoMenu.xsl"; $rootTag[] = xmlTag('app_context_menu', xmlTag('item','Salir', array('cgi_params'=>'t=salir')). xmlTag('item','Ayuda')); $contentTag[] = xmlUser($db, $usuario[0]); } } else { $contentTag[] = xmlTag('mensajeExtra','Por inactividad prolongada debe reiniciar su sesi贸n'); } } } } } catch (XMLError $e) { /// do nothing, just pop the exception stack } catch (Exception $e) { $xmlErr->raise(XMLError::E_SYSTEM, $e->getMessage().' File:'.$e->getFile().' Line:'.$e->getLine()); } if(isset($_REQUEST['dbg'])) echo xmlTag('root',join($rootTag).xmlTag('content',join($contentTag)).xmlTag('error',$xmlErr->getXmlErr())); echo ""; echo xsltTransform( xmlTag('root',join($rootTag). xmlTag('content',join($contentTag)). xmlTag('error',$xmlErr->getXmlErr())), _SYSTEM_PATH."xslt/".$xslt, $xslParams); exit; ?>