/** * Initialize the backend systems, the log handler and the restrictor. A subclass can tune this * step by overriding {@link #createRestrictor(String)} and {@link * #createLogHandler(ServletConfig, boolean)} * * @param pServletConfig servlet configuration */ @Override public void init(ServletConfig pServletConfig) throws ServletException { super.init(pServletConfig); Configuration config = initConfig(pServletConfig); // Create a log handler early in the lifecycle, but not too early String logHandlerClass = config.get(ConfigKey.LOGHANDLER_CLASS); logHandler = logHandlerClass != null ? (LogHandler) ClassUtil.newInstance(logHandlerClass) : createLogHandler(pServletConfig, Boolean.valueOf(config.get(ConfigKey.DEBUG))); // Different HTTP request handlers httpGetHandler = newGetHttpRequestHandler(); httpPostHandler = newPostHttpRequestHandler(); if (restrictor == null) { restrictor = createRestrictor(NetworkUtil.replaceExpression(config.get(ConfigKey.POLICY_LOCATION))); } else { logHandler.info("Using custom access restriction provided by " + restrictor); } configMimeType = config.get(ConfigKey.MIME_TYPE); backendManager = new BackendManager(config, logHandler, restrictor); requestHandler = new HttpRequestHandler(config, backendManager, logHandler); initDiscoveryMulticast(config); }
/** * Gets the value of the given parameter from the request converted to a {@code boolean}. If * the parameter is not set or not parseable, the default value is returned. * * @param pReq the servlet request * @param pName the parameter name * @param pDefault the default value * @return the value of the parameter converted to a {@code boolean}, or the default value, if the * parameter is not set. */ public static boolean getBooleanParameter( final ServletRequest pReq, final String pName, final boolean pDefault) { String str = pReq.getParameter(pName); try { return str != null ? Boolean.valueOf(str) : pDefault; } catch (NumberFormatException nfe) { return pDefault; } }
/** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException { assert emf != null; // Make sure injection went through correctly. EntityManager em = null; try { // begin a transaction utx.begin(); // create an em. // Since the em is created inside a transaction, it is associsated with // the transaction em = emf.createEntityManager(); // Get the data from user's form String titre = (String) request.getParameter("titre"); Boolean peutEtreReemprunter = Boolean.valueOf(request.getParameter("peutEtreReemprunter")); String typeString = (String) request.getParameter("type"); ProduitType type = null; for (ProduitType t : ProduitType.values()) { if (t.toString().equals(typeString)) { type = t; } } Date datePublication = new Date(); String auteur1Txt = (String) request.getParameter("auteur1"); String auteur2Txt = (String) request.getParameter("auteur2"); String auteur3Txt = (String) request.getParameter("auteur3"); Auteur auteur1 = null; try { auteur1 = (Auteur) em.createNamedQuery("findAuteur", Auteur.class) .setParameter("nom", auteur1Txt) .getSingleResult(); } catch (NoResultException e) { } Auteur auteur2 = null; try { auteur2 = (Auteur) em.createNamedQuery("findAuteur", Auteur.class) .setParameter("nom", auteur2Txt) .getSingleResult(); } catch (NoResultException e) { } Auteur auteur3 = null; try { auteur3 = (Auteur) em.createNamedQuery("findAuteur", Auteur.class) .setParameter("nom", auteur3Txt) .getSingleResult(); } catch (NoResultException e) { } List<Auteur> auteurs = new ArrayList<Auteur>(); if (auteur1 != null) auteurs.add(auteur1); if (auteur2 != null) auteurs.add(auteur2); if (auteur3 != null) auteurs.add(auteur3); String genre1Txt = (String) request.getParameter("genre1"); String genre2Txt = (String) request.getParameter("genre2"); String genre3Txt = (String) request.getParameter("genre3"); Genre genre1 = null; try { genre1 = (Genre) em.createNamedQuery("findGenre", Genre.class) .setParameter("nom", genre1Txt) .getSingleResult(); } catch (NoResultException e) { } Genre genre2 = null; try { genre2 = (Genre) em.createNamedQuery("findGenre", Genre.class) .setParameter("nom", genre2Txt) .getSingleResult(); } catch (NoResultException e) { } Genre genre3 = null; try { genre3 = (Genre) em.createNamedQuery("findGenre", Genre.class) .setParameter("nom", genre3Txt) .getSingleResult(); } catch (NoResultException e) { } List<Genre> genres = new ArrayList<Genre>(); if (genre1 != null) genres.add(genre1); if (genre2 != null) genres.add(genre2); if (genre3 != null) genres.add(genre3); // Create a person instance out of it Produit produit = new Produit(titre, peutEtreReemprunter, datePublication, auteurs, genres, type); // persist the person entity em.persist(produit); // commit transaction which will trigger the em to // commit newly created entity into database utx.commit(); // Forward to ListPerson servlet to list persons along with the newly // created person above request.getRequestDispatcher("ListProduit").forward(request, response); } catch (Exception ex) { throw new ServletException(ex); } finally { // close the em to release any resources held up by the persistebce provider if (em != null) { em.close(); } } }
/** * The <code>CDCClientServlet</code> is the heart of the Cross Domain Single Signon mechanism of * OpenAM in the DMZ along with the distributed auth. <br> * The following is the algorithm used by the program: * * <ol> * <li>If request does not contain SSO related cookie or policy has generated some advices then * redirect request to the distributed auth service. * <li>If request contains SSO related cookie and no advices. * <ul> * <li>Tunnel the Request to OpenAM. * <li>Send the received AuthNResponse as Form POST to the original request requested using * the goto parameter in the query string. * </ul> * </ol> */ public class CDCClientServlet extends HttpServlet { private static final ArrayList adviceParams = new ArrayList(); private static final Set<String> INVALID_SET = new HashSet<String>(); private static final Set<String> VALID_LOGIN_URIS = new HashSet<String>(); private static final String LEFT_ANGLE = "<"; private static final String RIGHT_ANGLE = ">"; private static final String URLENC_RIGHT_ANGLE = "%3e"; private static final String URLENC_LEFT_ANGLE = "%3c"; private static final String URLENC_JAVASCRIPT = "javascript%3a"; private static final String JAVASCRIPT = "javascript:"; private static final String DELIM = ","; private static final String DEBUG_FILE_NAME = "amCDC"; private static final char QUESTION_MARK = '?'; private static final char AMPERSAND = '&'; private static final char EQUAL_TO = '='; private static final char SEMI_COLON = ';'; private static final char SPACE = ' '; private static final String GOTO_PARAMETER = "goto"; private static final String TARGET_PARAMETER = "TARGET"; private static final String CDCURI = "/cdcservlet"; private static final String LOGIN_URI = "loginURI"; private static String cdcAuthURI; private static final String AUTHURI = "/UI/Login"; private static final String RESPONSE_HEADER_ALERT = "X-DSAME-Assertion-Form"; private static final String RESPONSE_HEADER_ALERT_VALUE = "true"; private static final String FORBIDDEN_STR_MATCH = "#403x"; private static final String SERVER_ERROR_STR_MATCH = "#500x"; static Debug debug = Debug.getInstance(DEBUG_FILE_NAME); static { initConfig(); } private static SSOTokenManager tokenManager; private static String sessionServiceName = "iPlanetAMSessionService"; private static String authURLCookieName; private static String authURLCookieDomain; private static String deployDescriptor; boolean serverMode = Boolean.valueOf( System.getProperty( Constants.SERVER_MODE, SystemProperties.get(Constants.SERVER_MODE, "false"))) .booleanValue(); private static boolean cookieEncoding = SystemProperties.getAsBoolean(Constants.AM_COOKIE_ENCODE); /** * @param config the ServletConfig object that contains configutation information for this * servlet. * @exception ServletException if an exception occurs that interrupts the servlet's normal * operation. */ public void init(ServletConfig config) throws ServletException { super.init(config); if (debug.messageEnabled()) { debug.message("CDCClientServlet.init:CDCClientServlet " + "Initializing..."); } try { tokenManager = SSOTokenManager.getInstance(); } catch (SSOException ssoe) { debug.error("CDCClientServlet.init:unable to get SSOTokenManager", ssoe); } authURLCookieName = SystemProperties.get(Constants.AUTH_UNIQUE_COOKIE_NAME, "sunIdentityServerAuthNServer"); authURLCookieDomain = SystemProperties.get(Constants.AUTH_UNIQUE_COOKIE_DOMAIN, ""); deployDescriptor = SystemProperties.get(Constants.AM_DISTAUTH_DEPLOYMENT_DESCRIPTOR, "/distauth"); } /** * Handles the HTTP GET request. * * @param request an HttpServletRequest object that contains the request the client has made of * the servlet. * @param response an HttpServletResponse object that contains the response the servlet sends to * the client. * @exception ServletException if an input or output error is detected when the servlet handles * the GET request * @exception IOException if the request for the GET could not be handled */ @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGetPost(request, response); } /** * Handles the HTTP POST request. * * @param request an HttpServletRequest object that contains the request the client has made of * the servlet. * @param response an HttpServletResponse object that contains the response the servlet sends to * the client. * @exception ServletException if an input or output error is detected when the servlet handles * the GET request * @exception IOException if the request for the GET could not be handled */ @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGetPost(request, response); } /** * The method redirects the user to the authentication module if he is not authenticated; else * redirects him back to the original referrer. * * @param request an HttpServletRequest object that contains the request the client has made of * the servlet. * @param response an HttpServletResponse object that contains the response the servlet sends to * the client. * @exception ServletException if an input or output error is detected when the servlet handles * the GET request * @exception IOException if the request for the GET could not be handled */ private void doGetPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (debug.messageEnabled()) { debug.message( "CDCClientServlet.doGetPost:Query String received= " + request.getQueryString()); } String gotoParameter = request.getParameter(GOTO_PARAMETER); String targetParameter = request.getParameter(TARGET_PARAMETER); if (targetParameter == null) { targetParameter = request.getParameter(TARGET_PARAMETER.toLowerCase()); } // if check if goto ot target have invalid strings, to avoid // accepting invalid injected javascript. if ((gotoParameter != null) || (targetParameter != null)) { if (debug.messageEnabled()) { debug.message( "CDCClientServlet:doGetPost():validating goto: " + gotoParameter + " and target: " + targetParameter); } for (String invalidStr : INVALID_SET) { if (gotoParameter != null && gotoParameter.toLowerCase().contains(invalidStr)) { showError(response, SERVER_ERROR_STR_MATCH + "GOTO parameter has invalid characters"); return; } if (targetParameter != null && targetParameter.toLowerCase().contains(invalidStr)) { showError(response, SERVER_ERROR_STR_MATCH + "TARGET parameter has invalid characters"); return; } } } /* Steps to be done * 1. If no SSOToken or policy advice present , forward to * authentication. * 2. If SSOToken is valid tunnel request to the backend AM's * CDCServlet and Form POST the received response to the agent. */ // Check for a valid SSOToken in the request. If SSOToken is not found // or if the token is invalid, redirect the user for authentication. // Also re-direct if there are policy advices in the query string SSOToken token = getSSOToken(request, response); // collect advices in parsedRequestParams[0] String and rest of params // other than original goto url in parsedRequestParams[1] String. String[] parsedRequestParams = parseRequestParams(request); if ((token == null) || (parsedRequestParams[0] != null)) { // Redirect to authentication redirectForAuthentication(request, response, parsedRequestParams[0], parsedRequestParams[1]); } else { // tunnel request to AM // send the request to the CDCServlet of AM where the session // was created. sendAuthnRequest(request, response, token); } } /** * This the main method of this servlet which takes in the request opens a URLConnection to the * CDCServlet endpoint in the OpenAM, and tunnels the request content to it. It parses the * Response received and if the HTTP_STATUS is "HTTP_OK" or "HTTP_MOVED_TEMP" POSTs the received * Liberty Authn Response to the goto URL specified in the original request. */ private void sendAuthnRequest( HttpServletRequest request, HttpServletResponse response, SSOToken token) throws ServletException, IOException { SessionID sessid = new SessionID(request); URL CDCServletURL = null; URL sessionServiceURL = null; try { sessionServiceURL = Session.getSessionServiceURL(sessid); } catch (SessionException se) { debug.error( "CDCClientServlet.sendAuthnRequest: Cannot locate" + " OpenAM instance to forward to.", se); showError(response, "Cannot locate OpenAM instance to forward to"); } if (sessionServiceURL == null) { showError(response, "Cannot locate OpenAM instance to forward to"); } // replace "sessionservice" by cdcservlet in obtained URL // we use naming so that we get the URL of the exact server // where the session is located and get the right deployment // descriptor. String sessionServiceURLString = sessionServiceURL.toString(); int serviceNameIndex = sessionServiceURLString.lastIndexOf( "/", sessionServiceURLString.length() - 2); // avoiding trailing "/" // if any StringBuilder buffer = new StringBuilder(150); buffer .append(sessionServiceURLString.substring(0, serviceNameIndex)) .append(CDCURI) .append(QUESTION_MARK) .append(request.getQueryString()); // add query string to // CDCServletURL CDCServletURL = new URL(buffer.toString()); // save the go to URL of the agent side to ultimately // POST to. try { HttpURLConnection connection = HttpURLConnectionManager.getConnection(CDCServletURL); connection.setRequestMethod("GET"); connection.setRequestProperty("Content-Type", "text/html;charset=UTF-8"); connection.setDoOutput(true); connection.setUseCaches(false); // replay cookies String strCookies = getCookiesFromRequest(request); if (strCookies != null) { if (debug.messageEnabled()) { debug.message("CDCClientServlet.sendAuthnRequest:Setting " + "cookies = " + strCookies); } connection.setRequestProperty("Cookie", strCookies); } // dont wish to follow redirect to agent, since // the response needs to go via the CDCClientServlet. HttpURLConnection.setFollowRedirects(false); // Receiving input from CDCServlet on the AM server instance if (debug.messageEnabled()) { debug.message( "CDCClientServlet.sendAuthnRequest:Getting " + "response back from " + CDCServletURL); debug.message( "CDCClientServlet.sendAuthnRequest:Response " + "Code " + connection.getResponseCode()); debug.message( "CDCClientServlet.sendAuthnRequest:Response " + "Message= " + connection.getResponseMessage()); } // Check response code if ((connection.getResponseCode() == HttpURLConnection.HTTP_OK) || (connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP)) { /** * Read the response back from CDCServlet, got a redirect since this response contains the * "LARES" ( Liberty authn response, which needs to be posted back to the dest url (agent). */ StringBuilder inBuf = new StringBuilder(); BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); int len; char[] buf = new char[1024]; while ((len = in.read(buf, 0, buf.length)) != -1) { inBuf.append(buf, 0, len); } String inString = inBuf.toString(); if (debug.messageEnabled()) { debug.message( "CDCClientServlet.sendAuthnRequest:" + "Received response data = " + inString); } // put the received Liberty Auth Response // in the servlet's response. sendAuthnResponse(request, response, inString); } else { debug.error("CDCClientServlet.sendAuthnRequest: Response " + "code NOT OK/MOVED_TEMP "); showError( response, "ERROR: Received HTTP error code " + connection.getResponseCode() + " from " + CDCServletURL); } } catch (ConnectException ce) { // Debug the exception if (debug.warningEnabled()) { debug.warning( "CDCClientServlet.sendAuthnRequest: " + "Connection Exception to " + CDCServletURL, ce); } showError( response, "Could not connect to CDCServlet at " + CDCServletURL + ":" + ce.getMessage()); } } // Get cookies string from HTTP request object private String getCookiesFromRequest(HttpServletRequest request) { Cookie cookies[] = CookieUtils.getCookieArrayFromReq(request); // above call would return pure sid in iPlanetDirectoryPro cookie // independent of container encoding StringBuilder cookieStr = null; String strCookies = null; if (cookies != null) { for (int nCookie = 0; nCookie < cookies.length; nCookie++) { String cookieName = cookies[nCookie].getName(); String cookieVal = cookies[nCookie].getValue(); if (cookieName.equals(CookieUtils.getAmCookieName()) && cookieEncoding) { cookieVal = URLEncDec.encode(cookieVal); } if (debug.messageEnabled()) { debug.message("CDCClientServlet.getCookiesFromRequest:" + "Cookie name = " + cookieName); debug.message("CDCClientServlet.getCookiesFromRequest:" + "Cookie val= " + cookieVal); } if (cookieStr == null) { cookieStr = new StringBuilder(); } else { cookieStr.append(SEMI_COLON).append(SPACE); } cookieStr.append(cookieName).append(EQUAL_TO).append(cookieVal); } } if (cookieStr != null) { strCookies = cookieStr.toString(); } return strCookies; } /** * Gathers the parameters in the request as a HTTP URL string. to form request parameters and * policy advice String array. It collects all the parameters from the original request except the * original goto url and any advice parameters. Note: All the paramters will be url decoded by * default., we should make sure that these values are encoded again * * @param request an HttpServletRequest object that contains the request the client has made of * the servlet. * @return An String array, index 0 is policy advice, index 1 is rest of the request parameters */ private String[] parseRequestParams(HttpServletRequest request) { StringBuilder adviceList = null; StringBuilder parameterString = new StringBuilder(100); for (Enumeration e = request.getParameterNames(); e.hasMoreElements(); ) { String paramName = (String) e.nextElement(); if (adviceParams.contains(paramName.toLowerCase())) { if (adviceList == null) { adviceList = new StringBuilder(); } else { adviceList.append(AMPERSAND); } String[] values = request.getParameterValues(paramName); for (int i = 0; values != null && i < values.length; i++) { adviceList.append(paramName).append(EQUAL_TO).append(values[i]); } } else { if (!paramName.equals(GOTO_PARAMETER)) { String[] values = request.getParameterValues(paramName); for (int i = 0; values != null && i < values.length; i++) { parameterString .append(AMPERSAND) .append(paramName) .append(EQUAL_TO) .append(URLEncDec.encode(values[i])); } } } } if (debug.messageEnabled()) { debug.message("CDCClientServlet.parseRequestParams:" + "Advice List is = " + adviceList); debug.message( "CDCClientServlet.parseRequestParams:" + "Parameter String is = " + parameterString.toString()); } String policyAdviceList; String requestParams; if (adviceList == null) { policyAdviceList = null; } else { policyAdviceList = adviceList.toString(); } if (parameterString.length() > 0) { requestParams = (parameterString.deleteCharAt(0).toString()); } else { requestParams = parameterString.toString(); } return new String[] {policyAdviceList, requestParams}; } /** * Redirects the HTTP request to the Authentication module. It gets the authentication url from * <code>SystemProperties</code>. * * @param request an HttpServletRequest object that contains the request the client has made of * the servlet. * @param response an HttpServletResponse object that contains the response the servlet sends to * the client. * @exception IOException If an input or output exception occurs */ private void redirectForAuthentication( HttpServletRequest request, HttpServletResponse response, String policyAdviceList, String requestParams) throws IOException { if (debug.messageEnabled()) { debug.message( "CDCClientServlet.redirectForAuthentication: " + "requestURL=" + request.getRequestURL()); } StringBuilder redirectURL = new StringBuilder(100); StringBuilder gotoURL = new StringBuilder(100); // Check if user has authenticated to another OpenAM // instance String authURL = null; Cookie authCookie = CookieUtils.getCookieFromReq(request, authURLCookieName); if (authCookie != null) { authURL = CookieUtils.getCookieValue(authCookie); if (debug.messageEnabled()) { debug.message( "CDCClientServlet.redirectForAuthentication: " + "got an authenticated URL= " + authURL); } } try { if (authURL == null || authURL.length() == 0 || !authURL.toLowerCase().startsWith("http") || policyAdviceList != null) { String finalURL = request.getParameter(GOTO_PARAMETER); if (finalURL == null || finalURL.equals("")) { finalURL = request.getParameter(TARGET_PARAMETER); } if (finalURL == null || finalURL.equals("")) { if (debug.messageEnabled()) { debug.message( "CDCClientServlet.redirectForAuthentication: " + "goto or target parameter is missing in the request."); } showError(response, SERVER_ERROR_STR_MATCH); return; } gotoURL .append(deployDescriptor) .append(CDCURI) .append(QUESTION_MARK) .append(TARGET_PARAMETER) .append(EQUAL_TO) .append(URLEncDec.encode(finalURL)) .append(AMPERSAND) .append(requestParams); // Construct the login URL String loginURI = request.getParameter(LOGIN_URI); String cdcUri; if (loginURI != null && !loginURI.isEmpty() && isValidCDCURI(loginURI)) { if (debug.messageEnabled()) { debug.message( "CDCClientServlet.redirectForAuthentication:found " + LOGIN_URI + "=" + loginURI); } cdcUri = loginURI; } else { cdcUri = cdcAuthURI; } if (debug.messageEnabled()) { debug.message( "CDCClientServlet.redirectForAuthentication: Login URI is set to = " + cdcUri); } if (cdcUri.indexOf(QUESTION_MARK) == -1) { redirectURL.append(cdcUri).append(QUESTION_MARK); } else { redirectURL.append(cdcUri).append(AMPERSAND); } if (policyAdviceList != null) { redirectURL.append(policyAdviceList).append(AMPERSAND); } redirectURL .append(GOTO_PARAMETER) .append(EQUAL_TO) .append(URLEncDec.encode(gotoURL.toString())); if (debug.messageEnabled()) { debug.message( "CDCClientServlet.redirectForAuthentication" + ":redirectURL before dispatching is=" + redirectURL); } RequestDispatcher dispatcher = request.getRequestDispatcher(redirectURL.toString()); dispatcher.forward(request, response); } else { // Redirect the user to the authenticated URL redirectURL .append(authURL) .append(deployDescriptor) .append(CDCURI) .append(QUESTION_MARK) .append(request.getQueryString()); // Reset the cookie value to null, to avoid continuous loop // when a load balancer is used if (authCookie != null) { authCookie.setValue(""); response.addCookie(authCookie); } response.sendRedirect(redirectURL.toString()); } if (debug.messageEnabled()) { debug.message( "CDCClientServlet.redirectForAuthentication:" + "Forwarding for authentication to= " + redirectURL); } } catch (IOException ex) { debug.error( "CDCClientServlet.redirectForAuthentication: Failed " + "in forwarding to Authentication service. IOException", ex); showError(response, "Could for forward to authentication service:" + ex.getMessage()); } catch (ServletException se) { debug.error( "CDCClientServlet.redirectForAuthentication : Failed " + "in forwarding to Authentication service. ServletException", se); showError(response, "Could for forward to authentication service:" + se.getMessage()); } catch (IllegalStateException ie) { debug.error( "CDCClientServlet.redirectForAuthentication : Failed " + "in forwarding to Authentication service. Illegal state", ie); showError(response, "Could for forward to authentication service:" + ie.getMessage()); } } /** * Shows Application Error message to the user. * * @param response an HttpServletResponse object that contains the response the servlet sends to * the client. * @param msg Message to be displayed. */ private void showError(HttpServletResponse response, String msg) throws IOException { ServletOutputStream out = null; if (msg == null || msg.equals("") || msg.contains(SERVER_ERROR_STR_MATCH)) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } try { out = response.getOutputStream(); out.println(msg); out.flush(); } catch (IOException e) { debug.error("CDCClientServlet.showError::Could not show error " + "message to the user " + e); } finally { try { out.close(); } catch (IOException ignore) { } } } /** * Returns the SSOToken of the user. If user has not authenticated re-directs the user to login * page */ private SSOToken getSSOToken(HttpServletRequest request, HttpServletResponse response) throws IOException { SSOToken token = null; try { /* SSOTokenManager.createSSOToken() throws an SSOException if the * token is not valid, so for a invalid token manager.isValidToken() * will never get executed for an invalid token. */ if (((token = tokenManager.createSSOToken(request)) == null) || !tokenManager.isValidToken(token)) { if (debug.messageEnabled()) { debug.message( "CDCClientServlet.getSSOToken:SSOToken is " + "either null or not valid: " + token + "\nRedirecting for authentication"); } token = null; } } catch (com.iplanet.sso.SSOException e) { if (debug.messageEnabled()) { debug.message("CDCClientServlet.getSSOToken:SSOException " + "caught= " + e); } token = null; } return (token); } private void sendAuthnResponse( HttpServletRequest request, HttpServletResponse response, String authnResponse) { if (debug.messageEnabled()) { debug.message("CDCClientServlet.sendAuthnResponse: Called"); } try { if (debug.messageEnabled()) { debug.message("CDCClientServlet.sendAuthnResponse: " + "AuthnResponse= " + authnResponse); } response.setContentType("text/html"); response.setHeader("Pragma", "no-cache"); response.setHeader(RESPONSE_HEADER_ALERT, RESPONSE_HEADER_ALERT_VALUE); if (authnResponse.contains(FORBIDDEN_STR_MATCH)) { if (debug.messageEnabled()) { debug.message( "CDCClientServlet.sendAuthnResponse: " + "AuthnResponse showing 403 error page"); } response.sendError(HttpServletResponse.SC_FORBIDDEN); return; } if (authnResponse.contains(SERVER_ERROR_STR_MATCH)) { if (debug.messageEnabled()) { debug.error( "CDCClientServlet.sendAuthnResponse: " + "ERROR: An application error has occured."); } response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } PrintWriter out = response.getWriter(); out.println(authnResponse); out.close(); if (debug.messageEnabled()) { debug.message("CDCClientServlet.sendAuthnResponse: " + "AuthnResponse sent successfully"); } return; } catch (IOException ioe) { debug.error("CDCClientServlet.sendAuthnResponse:" + ioe.getMessage()); } } /** * Return <code>true</code> if the passed URI is valid compared to the valid set loaded during * initialization. * * @param cdcUri The URI to test. * @return <code>true</code> if the URI is considered valid, <code>false</code> otherwise. */ private boolean isValidCDCURI(String cdcUri) { int questionMark = cdcUri.indexOf(QUESTION_MARK); // We are only interested in the URI part up to any parameters that may be included. if (questionMark != -1) { cdcUri = cdcUri.substring(0, questionMark); } // If there is not an exact match for the passed value then it cannot be considered valid boolean result = VALID_LOGIN_URIS.contains(cdcUri); if (debug.messageEnabled()) { debug.message( "CDCClientServlet.isValidCDCURI: checking if " + cdcUri + " is in validLoginURISet: " + VALID_LOGIN_URIS + " result:" + result); } return result; } private static void initConfig() { adviceParams.add("module"); adviceParams.add("authlevel"); adviceParams.add("role"); adviceParams.add("service"); adviceParams.add("user"); adviceParams.add("realm"); adviceParams.add("org"); adviceParams.add("resource"); adviceParams.add("sunamcompositeadvice"); String invalidStrings = SystemPropertiesManager.get(Constants.INVALID_GOTO_STRINGS); if (INVALID_SET.isEmpty()) { debug.message("CDCClientServlet.initConfig: creating invalidSet"); if (invalidStrings == null) { debug.message("CDCClientServlet.initConfig: invalidStrings is null"); INVALID_SET.add(LEFT_ANGLE); INVALID_SET.add(RIGHT_ANGLE); INVALID_SET.add(URLENC_LEFT_ANGLE); INVALID_SET.add(URLENC_RIGHT_ANGLE); INVALID_SET.add(JAVASCRIPT); INVALID_SET.add(URLENC_JAVASCRIPT); } else { if (debug.messageEnabled()) { debug.message("CDCClientServlet.initConfig: invalidStrings is: " + invalidStrings); } StringTokenizer st = new StringTokenizer(invalidStrings, DELIM); while (st.hasMoreTokens()) { INVALID_SET.add(st.nextToken()); } } debug.message("CDCClientServlet.initConfig: created invalidSet " + INVALID_SET); } String urlFromProps = SystemProperties.get(Constants.CDCSERVLET_LOGIN_URL); cdcAuthURI = (urlFromProps != null) ? urlFromProps : AUTHURI; String validLoginURIStrings = SystemPropertiesManager.get(Constants.VALID_LOGIN_URIS); debug.message("CDCClientServlet.initConfig: creating validLoginURISet"); if (validLoginURIStrings == null) { debug.message( "CDCClientServlet.initConfig: validLoginURIStrings is null, creating default set"); VALID_LOGIN_URIS.add(cdcAuthURI); } else { if (debug.messageEnabled()) { debug.message( "CDCClientServlet.initConfig: validLoginURIStrings is: " + validLoginURIStrings); } StringTokenizer st = new StringTokenizer(validLoginURIStrings, DELIM); while (st.hasMoreTokens()) { VALID_LOGIN_URIS.add(st.nextToken()); } } debug.message("CDCClientServlet.initConfig: created validLoginURISet " + VALID_LOGIN_URIS); } }
/** Returns init parameter or the default value. */ private boolean getBooleanInit(FilterConfig config, String name, boolean defaultValue) { if (config.getInitParameter(name) != null) { return Boolean.valueOf(config.getInitParameter(name)).booleanValue(); } else return defaultValue; }
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; javax.servlet.jsp.PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("\n\n"); out.write("\n"); out.write("\n"); out.write("\n"); out.write("\n\n\n"); out.write("\n\n"); Vector vMibs = (Vector) request.getAttribute("mibs"); String strIp = (String) request.getAttribute("ip"); if (strIp == null) strIp = ""; String strCommunity = (String) request.getAttribute("cs"); if (strCommunity == null) strCommunity = ""; String strPort = (String) request.getAttribute("port"); if (strPort == null) strPort = "161"; String strRetries = (String) request.getAttribute("retries"); if (strRetries == null) strRetries = "1"; String strTimeout = (String) request.getAttribute("timeout"); if (strTimeout == null) strTimeout = "3000"; String strOID = (String) request.getAttribute("oid"); if (strOID == null) strOID = ""; String strDesc = (String) request.getAttribute("desc"); if (strDesc == null) strDesc = ""; String strASN1 = (String) request.getAttribute("asn1"); if (strASN1 == null) strASN1 = ""; String authpass = (String) request.getAttribute("authpass"); if (authpass == null) authpass = ""; String privpass = (String) request.getAttribute("privpass"); if (privpass == null) privpass = ""; String version = (String) request.getAttribute("version"); if (version == null) version = "version 1"; String securityname = (String) request.getAttribute("securityname"); if (securityname == null) securityname = ""; String seclevel = (String) request.getAttribute("seclevel"); if (seclevel == null) seclevel = "AUTH_PRIV"; String authproto = (String) request.getAttribute("authproto"); authproto = authproto == null ? "MD5" : authproto; String privproto = (String) request.getAttribute("privproto"); privproto = privproto == null ? "DES" : privproto; out.write("\n\n\n"); out.write("<html>\n"); out.write("<head>\n "); out.write("<title>WebTelemetry - Tools - SNMP Walk"); out.write("</title>\n "); out.write( "<link rel=\"stylesheet\" type=\"text/css\" href=\"/wt-portal/css/default.css\" />\n "); out.write("<script type=\"text/javascript\" src=\"/wt-portal/javascript/WTtools.js\">"); out.write("</script>\n\n\n\t"); out.write( "<script type=text/javascript>\n\t\n\t// Validate the SNMP form\n\tfunction validateForm()\n\t{\n\t var seclevel = \"\";\n\t\tvar seclevelChecked = \"\";\n\t\tif (document.snmpwalk.ip.value == \"\" ) \n\t\t{\n\t\t alert (\"Please fill in the ip address field.\");\n\t\t return false;\n\t\t}\n\t\telse \n\t\t{\n\t\t\tif (!verifyIP(document.snmpwalk.ip.value))\n\t\t\t{\n\t\t\t\tdocument.snmpwalk.ip.focus();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t\t\t\t\t\n\t\tif (document.snmpwalk.port.value != \"\" ) \n\t\t{\n\t\t\tif (!checkInteger(trim(document.snmpwalk.port.value))) {\n\t alert (\"Please enter a whole number for 'Port' and try again.\");\n\t document.snmpwalk.port.focus();\n\t return false;\n\t }\n\t }\n\t \n\t if (document.snmpwalk.retries.value != \"\" ) \n\t\t{\n\t\t\tif (!checkInteger(trim(document.snmpwalk.retries.value))) {\n\t alert (\"Please enter a whole number for 'Retries' and try again.\");\n\t document.snmpwalk.retries.focus();\n\t return false;\n\t }\n\t }\n\t \n\t if (document.snmpwalk.timeout.value != \"\" ) \n\t\t{\n"); out.write( "\t\t\tif (!checkInteger(trim(document.snmpwalk.timeout.value))) {\n\t alert (\"Please enter a whole number for 'Timeout' and try again.\");\n\t document.snmpwalk.timeout.focus();\n\t return false;\n\t }\n\t }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\tvar sel = document.getElementById( \"version\");\t\t\t\n\t\tvar opt = sel.options[ sel.selectedIndex];\t\n\t\t\n\t\tif( opt.text != \"version 3\")\n\t\t{\n\t\t\t// Community String\n\t\t\tvar cs = document.snmpwalk.cs.value;\n\t\t\tif (cs == \"\" || cs == null || trim(cs).length "); out.write( "<= 0)\n\t\t\t{\n\t\t \talert (\"Please fill in the community string field.\");\n\t\t \tdocument.snmpwalk.cs.focus();\n\t\t \treturn false;\n\t\t }\n\t\t}\n\t\telse\n {\n // Security name\n var secname = document.getElementById( \"securityname\"); \n if( secname.value == null || trim(secname.value).length == 0)\n {\n alert( \"Please enter a security name\");\n secname.focus();\n return false;\n }\n\n //Find Security level, pass checks\n\t\t\tfor (var i = 0; i "); out.write( "< document.snmpwalk.seclevel.length; i++) \n\t\t\t{ \n\t\t\t\tseclevel = document.snmpwalk.seclevel[i].value;\n\t\t\t\tsecChecked = document.snmpwalk.seclevel[i].checked;\n\t\t\n\t\t\t\tif (secChecked){\n\t\t\t\t\tseclevelChecked = seclevel;\n\t\t\t\t}\n\t\n\t\t\t\tif ( (seclevel == \"AUTH_PRIV\") && (secChecked) )\n\t\t\t\t{\n\t\t\t\t\tif( !checkAuthPassFld() || !checkPrivPassFld())\n\t \t{ \t\n\t \t\treturn false;\n\t \t\t}\t\n\t\t\t\t}\n\t\t\t\telse\n\t \t{\n\t\t \t\t\tif( (seclevel == \"AUTH_NOPRIV\") && (secChecked && !checkAuthPassFld()) )\n\t\t \t{ \t\n\t\t \t\treturn false;\n\t\t \t\t}\n\t\t \t\t} \n\t\t\t} \n }\n\t \n\t\t// The following is needed to support Mozilla & IE browsers with retrieving values from drop-down boxes (version, authproto, privproto).\n\t\tvar versionSel = document.snmpwalk.version;\n\t\tvar versionVal = versionSel.options[ versionSel.selectedIndex].text;\t\n\t\tvar authprotoSel = document.snmpwalk.authproto;\n\t\tvar authprotoVal = authprotoSel.options[ authprotoSel.selectedIndex].text;\t\n\t\tvar privprotoSel = document.snmpwalk.privproto;\n"); out.write( "\t\tvar privprotoVal = privprotoSel.options[ privprotoSel.selectedIndex].text;\n\t\t\n\t\t// The followings are needed to avoid passing inappropriate SNMP version-dependent browser saved values to the servlet. \n\t\tvar authpassVal = document.snmpwalk.authpass.value; \n\t\tvar privpassVal = document.snmpwalk.privpass.value; \n\t\tvar communityStr = document.snmpwalk.cs.value;\n\t\t\n\t\tif (versionVal == \"version 3\")\n\t\t{\n\t\t\tcommunityStr = \"\";\n\t\t\tif (seclevelChecked == \"AUTH_NOPRIV\")\n\t\t\t{\n\t\t\t\tprivpassVal = \"\";\n\t\t\t\tprivprotoVal = \"\"; \n\t\t\t}\n\t\t\telse if (seclevelChecked == \"NOAUTH_NOPRIV\")\n\t\t\t{\n\t\t\t\tauthpassVal = \"\";\n\t\t\t\tauthprotoVal = \"\";\n\t\t\t\tprivpassVal = \"\";\n\t\t\t\tprivprotoVal = \"\"; \n\t\t\t}\n\t\t}\n\t\telse \n\t\t{\n\t\t\tauthpassVal = \"\";\n\t\t\tauthprotoVal = \"\";\n\t\t\tprivpassVal = \"\";\n\t\t\tprivprotoVal = \"\"; \n\t\t}\n\t\t\n\t top.frames[1].document.snmpwalk.ip.value=document.snmpwalk.ip.value;\t \t\t\n\t top.frames[1].document.snmpwalk.oid.value=document.snmpwalk.oid.value;\t\n\t top.frames[1].document.snmpwalk.port.value=document.snmpwalk.port.value;\n\t top.frames[1].document.snmpwalk.retries.value=document.snmpwalk.retries.value;\n"); out.write( "\t top.frames[1].document.snmpwalk.timeout.value=document.snmpwalk.timeout.value;\n\t top.frames[1].document.snmpwalk.cs.value=communityStr;\t\t\n\t top.frames[1].document.snmpwalk.version.value=versionVal; \t\t\t\n\t top.frames[1].document.snmpwalk.securityname.value=document.snmpwalk.securityname.value; \n\t top.frames[1].document.snmpwalk.seclevel.value=seclevelChecked; \t\t\n\t top.frames[1].document.snmpwalk.authpass.value=authpassVal; \t\n\t top.frames[1].document.snmpwalk.authproto.value=authprotoVal; \t\n\t top.frames[1].document.snmpwalk.privpass.value=privpassVal; \t\n\t top.frames[1].document.snmpwalk.privproto.value=privprotoVal; \n\t top.frames[1].document.snmpwalk.button.value='GetResults';\n\t top.frames[1].document.snmpwalk.submit();\n\t \n\t return true; \n\t}\n\n\t// Validate ASN.1 value\n\tfunction validateLookup()\n\t{\n\t if (document.snmpwalk.desc.value == \"\" ) \n\t\t{\n\t\t alert (\"Please fill in ASN.1 Description (example: hrStorageDescr).\");\n\t\t return false;\n\t\t}\n\t\telse\n\t\t\treturn true;\n"); out.write( "\t}\n\t\n\t// Show MIB pop-up window\n\tfunction viewMIB()\n\t{\n\t if (document.snmpwalk.mibs.selectedIndex == -1 ) \n\t\t{\n\t\t alert (\"Please select a MIB to view.\");\n\t\t}\n\t\tvar mib = document.snmpwalk.mibs.options[document.snmpwalk.mibs.selectedIndex];\n\t var win = window.open('"); out.print(WTTools.getMibURL(request)); out.write( "' + mib.text, '', \n\t\t\t'status=yes,resizeable=yes,scrollbars=yes,menubar=yes,height=600,width=800');\t\n\t return false;\n\t}\n\t\n\t// hide element\n function hide( targetId)\n {\n if (document.getElementById)\n {\n target = document.getElementById(targetId);\n target.style.visibility = \"hidden\";\n target.style.display = \"none\";\n }\n }\n // show element\n function show( targetId)\n {\n if (document.getElementById)\n {\n target = document.getElementById(targetId);\n target.style.visibility = \"visible\";\n target.style.display = \"\";\n }\n }\n \n // Adjust frame\n function adjustFrames(topFrameSize)\n {\n \tvar framesSize = topFrameSize + \",*\";\n \tparent.document.getElementById(\"snmpframes\").rows = framesSize; \n }\n\n\t\n\t// Check for SNMPv3 selection\n\tfunction checkForSNMPv3()\n\t{\n\t\tvar sel = document.getElementById( \"version\");\n\t\tvar opt = sel.options[ sel.selectedIndex];\n\t\tif( opt.text == \"version 3\")\n"); out.write( "\t\t{\t\t\t\n\t\t\thide (\"csOptions\");\n\t\t\tshow (\"snmpOptions\"); \n\t\t\tadjustFrames(420);\n\t\t\tcheckSecLevel();\t\t\t\n\t\t}\n\t\telse\n\t\t{\t\t\t\n\t\t\tshow (\"csOptions\");\n\t\t\thide (\"snmpOptions\"); \n\t\t\thide (\"authOptions\"); \n\t\t\thide (\"privOptions\"); \n\t\t\tadjustFrames(270);\n\t\t}\n\n\t\t// This is work around for IE browsers which do not support "); out.write( "<option disabled>\n\t\t// This text will not appear for any other browsers as this option can never be selected \n\t\tif(( opt.text == \"SNMPv3 disabled\") || ( opt.text == \"SNMPv3 expired\"))\n\t\t{\n\t\t\talert(\"You are currently not licensed to use this feature. Please contact your sales representative for questions regarding this feature.\");\n\n\t\t\t// When the user selects SNMP v3 feature, select index is changed to version 1\n\t\t\tsel.selectedIndex = sel.options[sel.selectedIndex];\n\t\t}\n\t}\n\t\n\t// Check Auth Passphrase\n\tfunction checkAuthPassFld()\n {\n var authpass = document.getElementById( \"authpassfld\");\n if( authpass.value == null || authpass.value.length "); out.write( "< 8)\n {\n alert( \"Authentication Passphrase must be 8 characters or more\");\n authpass.focus();\n return false;\n }\n\n return true;\n }\n \n // Check Privacy Passphrase\n function checkPrivPassFld()\n {\n var privpass = document.getElementById( \"privpassfld\");\n if( privpass.value == null || privpass.value.length "); out.write( "< 8)\n {\n alert( \"Privacy Passphrase must be 8 characters or more\");\n privpass.focus();\n return false;\n }\n\n return true;\n }\n \n function checkSecLevel()\n { \n \tvar secLevelChecked; \t\n \tfor (var i = 0; i "); out.write( "< document.snmpwalk.seclevel.length; i++) \n\t\t{ \n\t\t\tvar seclevel = document.snmpwalk.seclevel[i].value;\n\t\t\tvar secChecked = document.snmpwalk.seclevel[i].checked;\n\t\t\tif ( secChecked )\n\t\t\t{\n\t\t\t\tsecLevelChecked = seclevel;\n\t\t\t}\n\t\t}\t\t\n\t\t\n\t\tif ( secLevelChecked == \"AUTH_PRIV\" )\n\t\t{\n\t\t\tif( checkAuthPassFld() || checkPrivPassFld())\n \t{\n\t\t\t\tshowAuthPriv();\t\n\t\t\t}\n\t\t}\n\t\telse \n \t{\t \t\t\n\t \t\tif ( (secLevelChecked == \"AUTH_NOPRIV\") && checkAuthPassFld() )\n\t \t{\n\t \t\tshowAuth();\n\t \t\t}\n\t \t\telse \n\t \t{\n\t \t\thideAuthPriv();\n\t \t}\n \t\t} \n }\n \n \n\tfunction showAuthPriv()\n\t{\n\t\tshow( \"authOptions\");\n\t\tshow( \"privOptions\");\n\t}\n\t \n\t\n\tfunction showAuth()\n\t{\n\t\tshow( \"authOptions\");\n\t\thide( \"privOptions\");\n\t}\n\t \n\t\n\tfunction hideAuthPriv()\n\t{\n\t\thide( \"authOptions\");\n\t \thide( \"privOptions\");\n\t}\n\t\n\tfunction checkForSpaces( evt)\n {\n evt = (evt) ? evt : ((window.event) ? event : null);\n if( evt)\n {\n var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);\n"); out.write( " if( elem)\n {\n var charCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);\n return( charCode != 32);\n }\n }\n }\n\n\t"); out.write("</script>\n"); out.write("</head>\n\n\n"); out.write("<body onload='checkForSNMPv3()'>\n"); /* ---- c:import ---- */ org.apache.taglibs.standard.tag.el.core.ImportTag _jspx_th_c_import_0 = (org.apache.taglibs.standard.tag.el.core.ImportTag) _jspx_tagPool_c_import_url_context.get( org.apache.taglibs.standard.tag.el.core.ImportTag.class); _jspx_th_c_import_0.setPageContext(pageContext); _jspx_th_c_import_0.setParent(null); _jspx_th_c_import_0.setContext("/wt-monitor"); _jspx_th_c_import_0.setUrl("/includes/header.jsp"); int[] _jspx_push_body_count_c_import_0 = new int[] {0}; try { int _jspx_eval_c_import_0 = _jspx_th_c_import_0.doStartTag(); if (_jspx_eval_c_import_0 != javax.servlet.jsp.tagext.Tag.SKIP_BODY) { if (_jspx_eval_c_import_0 != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) { javax.servlet.jsp.tagext.BodyContent _bc = pageContext.pushBody(); _jspx_push_body_count_c_import_0[0]++; out = _bc; _jspx_th_c_import_0.setBodyContent(_bc); _jspx_th_c_import_0.doInitBody(); } do { out.write("\n\t"); if (_jspx_meth_c_param_0( _jspx_th_c_import_0, pageContext, _jspx_push_body_count_c_import_0)) return; out.write("\n\t"); if (_jspx_meth_c_param_1( _jspx_th_c_import_0, pageContext, _jspx_push_body_count_c_import_0)) return; out.write("\n\t"); if (_jspx_meth_c_param_2( _jspx_th_c_import_0, pageContext, _jspx_push_body_count_c_import_0)) return; out.write("\n\t"); if (_jspx_meth_c_param_3( _jspx_th_c_import_0, pageContext, _jspx_push_body_count_c_import_0)) return; out.write("\n"); int evalDoAfterBody = _jspx_th_c_import_0.doAfterBody(); if (evalDoAfterBody != javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN) break; } while (true); if (_jspx_eval_c_import_0 != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) out = pageContext.popBody(); _jspx_push_body_count_c_import_0[0]--; } if (_jspx_th_c_import_0.doEndTag() == javax.servlet.jsp.tagext.Tag.SKIP_PAGE) return; } catch (Throwable _jspx_exception) { while (_jspx_push_body_count_c_import_0[0]-- > 0) out = pageContext.popBody(); _jspx_th_c_import_0.doCatch(_jspx_exception); } finally { _jspx_th_c_import_0.doFinally(); _jspx_tagPool_c_import_url_context.reuse(_jspx_th_c_import_0); } out.write("\n\n"); out.write("<!-- BEGIN FRAMING TABLE:open tags, keep at 100%-->\n"); out.write("<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n\t"); out.write("<tr valign=\"top\">\n\t\t"); out.write("<td valign=\"top\" width=\"10\">"); out.write( "<img src=\"/wt-portal/images/spacers/spacer.gif\" height=\"1\" width=\"10\" border=\"0\" alt=\"WebTelemetry\">"); out.write("</td>\n\t\t"); out.write("<td>\n"); out.write("<!-- END FRAMING TABLE:open tags, keep at 100%-->\n\n"); out.write("<form action=\""); out.print(WTTools.getServletURL(request)); out.write("WTsnmpWalkServlet\" method=\"get\" name=\"snmpwalk\" autocomplete=\"off\">\n\n"); out.write( "<table width=\"100%\" valign=\"top\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\n "); out.write("<td width=\"32%\" valign=\"top\" bgcolor=\"#f0f0f0\">\n "); out.write("<!-- BEGIN WALK SNMP TABLES -->\n "); out.write( "<table width=\"100%\" valign=\"top\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n "); out.write("<tr class=\"tableHeader\">\n "); out.write("<td class=\"tableHeader\" colspan=\"2\">Walk an SNMP Agent"); out.write("</td>\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\" width=\"45%\">"); out.write("<b>IP Address:"); out.write("</b>"); out.write("<A class=\"tt\" HREF=\"javascript: towerTip("); out.print(WTTips.TIP_SNMP_IPADDR); out.write(");\" TITLE=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n "); out.write("<td class=\"tableText\" >"); out.write("<input type=\"text\" name=\"ip\" value=\""); out.print(strIp); out.write("\" size=\"23\">"); out.write("</td>\n "); out.write("</tr> \n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\" width=\"45%\">"); out.write("<b>Starting OID:"); out.write("</b>"); out.write("<A class=\"tt\" HREF=\"javascript: towerTip("); out.print(WTTips.TIP_SNMP_START_OID); out.write(");\" TITLE=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n "); out.write("<td class=\"tableText\" >"); out.write("<input type=\"text\" size=\"23\" name=\"oid\" value=\""); out.print(strOID); out.write("\">"); out.write("</td>\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\" width=\"45%\">"); out.write("<b>Port:"); out.write("</b>"); out.write("<A class=\"tt\" HREF=\"javascript: towerTip("); out.print(WTTips.TIP_SNMP_PORT); out.write(");\" TITLE=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n "); out.write("<td class=\"tableText\" >"); out.write("<input type=\"text\" size=\"23\" maxlength=10 name=\"port\" value=\""); out.print(strPort); out.write("\" >"); out.write("</td> \t\t\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\" width=\"45%\">"); out.write("<b>Retries:"); out.write("</b>"); out.write("<A class=\"tt\" HREF=\"javascript: towerTip("); out.print(WTTips.TIP_RETRIES); out.write(");\" TITLE=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n "); out.write("<td class=\"tableText\" >"); out.write("<input type=\"text\" size=\"4\" maxlength=10 name=\"retries\" value=\""); out.print(strRetries); out.write("\" >"); out.write("</td> \t\t\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\" width=\"45%\">"); out.write("<b>Timeout(ms):"); out.write("</b>"); out.write("<A class=\"tt\" HREF=\"javascript: towerTip("); out.print(WTTips.TIP_TIMEOUT); out.write(");\" TITLE=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n "); out.write("<td class=\"tableText\" >"); out.write("<input type=\"text\" size=\"23\" maxlength=10 name=\"timeout\" value=\""); out.print(strTimeout); out.write("\" >"); out.write("</td> \t\t\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\" width=\"45%\">"); out.write("<b>SNMP Version:"); out.write("</b>"); out.write("<A class=\"tt\" HREF=\"javascript: towerTip("); out.print(WTTips.TIP_SNMP_VERSION); out.write(");\" TITLE=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n "); out.write("<td class=\"tableText\" >\n \t"); out.write( "<select name=\"version\" id=\"version\" onclick=\"checkForSNMPv3()\">\n \t\t\t"); out.write("<option "); out.print(version.equals("version 1") ? "SELECTED" : ""); out.write(">version 1\n \t\t\t"); out.write("<option "); out.print(version.equals("version 2c") ? "SELECTED" : ""); out.write(">version 2c\n\t"); com.websina.license.LicenseManager lim = com.websina.license.LicenseManager.getInstance(); if (lim != null) { // Check if license is not null if (lim.isValid()) { // Check if license is valid if (((Boolean.valueOf( lim.getFeature(com.websina.license.License.WT_SECURE_SNMPV3_ENABLED_FIELD_NAME))) .booleanValue())) { // Check if feature is enabled if ((lim.daysLeft(com.websina.license.License.WT_SECURE_SNMPV3_EXPIRATION_FIELD_NAME) > 0) || (lim.daysLeft(com.websina.license.License.WT_SECURE_SNMPV3_EXPIRATION_FIELD_NAME) == -1)) { // Check if feature has expired (-1 indicates never expired) out.write("\t\t\t\t\n \t\t\t"); out.write("<option "); out.print(version.equals("version 3") ? "SELECTED" : ""); out.write(">version 3\n\t"); } else { out.write("\n\t\t\t\t\t\t\t"); out.write("<!-- The text for "); out.write( "<option disabled> tag is changed as a workaround for IE browsers -->\n\t\t\t\t"); out.write( "<!-- Although other browsers will not allow to select this option -->\n\t\t\t\t"); out.write( "<!-- IE lets you select it and hence call checkForSNMPv3() which displays a message that the feature is not enabled and select version 1 -->\n\t\t\t\t"); out.write("<!-- SNMPv3 enabled and expired -->\n\t\t\t\t"); out.write("<option disabled=\"disabled\" style=\"color:#aaa\">SNMPv3 expired"); out.write("</option>\n\t"); } } else { out.write("\n\t\t\t\t\t\t\t"); out.write("<!-- License is valid, SNMPv3 is disabled -->\n\t\t\t\t"); out.write("<option disabled=\"disabled\" style=\"color:#aaa\">SNMPv3 disabled"); out.write("</option>\n "); } } } out.write(" \n \t\t\t"); out.write("</select>\n "); out.write("</td>\n \t"); out.write("</tr>\n "); out.write("</table>\n \n "); out.write("<!-- COMMUNITY STRING OPTION -->\n \n "); out.write("<div id=\"csOptions\" style=\"visibility: visible\"> \n\t\t\t\t"); out.write( "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n \t"); out.write("<tr class=\"tableRowLight\">\n \t \t\t"); out.write("<td class=\"tableText\" width=\"45%\">"); out.write("<b>Community String:"); out.write("</b>"); out.write("<A class=\"tt\" HREF=\"javascript: towerTip("); out.print(WTTips.TIP_SNMP_COMMSTR); out.write(");\" TITLE=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n \t\t"); out.write("<td class=\"tableText\" >"); out.write("<input type=\"password\" name=\"cs\" value=\""); out.print(strCommunity); out.write("\" size=\"23\">"); out.write("</td>\n \t"); out.write("</tr>\n \t"); out.write("</table>\n "); out.write("</div>\n \n\t\t\t"); out.write("<!-- SNMP v3 OPTIONS --> \n \n\t\t\t"); out.write("<div id=\"snmpOptions\" style=\"display: none; visibility: hidden\"> \n\t\t\t\t"); out.write( "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n\t\t\t\t\t\t\t\n \t"); out.write("<!-- SNMP Version 3 Config Label -->\n \t"); out.write("<BR/>"); out.write("<HR width=\"95% align=\"center\">\n \t"); out.write("<tr class=\"tableRowLight\">\n \t\t"); out.write("<td class=\"tableText\" colspan=\"2\">"); out.write("<b>SNMP Version 3 Options"); out.write("</b>"); out.write("</td>\n \t"); out.write("</tr> \n \t\n \t"); out.write("<!-- Security Name -->\n \t"); out.write("<tr class=\"tableRowLight\">\n \t"); out.write("<td class=\"tableText\" width=\"45%\">"); out.write("<b>Security Name:"); out.write("</b>"); out.write("</td>\n \t"); out.write("<td class=\"tableText\" >"); out.write( "<INPUT type=\"text\" name=\"securityname\" id=\"securityname\" size=\"23\" maxlength=\"255\" value=\""); out.print(securityname); out.write("\" >"); out.write("</td>\n \t"); out.write("</tr> \n \t\n \t"); out.write("<!-- Security Level Options -->\n \t"); out.write("<tr class=\"tableRowLight\"> \n \t"); out.write("<td class=\"tableText\">"); out.write("<b>Security Level:"); out.write("</b>"); out.write("<A class=\"tt\" HREF=\"javascript: towerTip("); out.print(WTTips.TIP_SNMP_SECURITY_LEVEL); out.write(");\" TITLE=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n \t\t"); out.write("</tr>\n \t\t\n \t\t"); out.write("<!-- Authentication with Privacy radio button-->\n \t\t"); out.write("<tr class=\"tableRowLight\">\n \t"); out.write("<td class=\"tableText\" colspan=\"2\">\n \t\t"); out.write( "<input type=\"radio\" onClick=\"showAuthPriv();adjustFrames(600)\" name=\"seclevel\" id=\"authpriv\" \n \t\tvalue=\"AUTH_PRIV\" "); out.print("AUTH_PRIV".equals(seclevel) ? "CHECKED" : ""); out.write("> \n \t\tAuthentication with Privacy\n \t\t"); out.write("</td>\n \t\t"); out.write("</tr>\n \t\t\n \t\t"); out.write("<!-- Authentication without Privacy radio button-->\n \t\t"); out.write("<tr class=\"tableRowLight\"> \n \t"); out.write("<td class=\"tableText\" colspan=\"2\">\n \t\t"); out.write( "<input type=\"radio\" onClick=\"showAuth();adjustFrames(500)\" name=\"seclevel\" id=\"authnopriv\" \n \t\tvalue=\"AUTH_NOPRIV\" "); out.print("AUTH_NOPRIV".equals(seclevel) ? "CHECKED" : ""); out.write( "> \n \t\tAuthentication without Privacy\n \t\t"); out.write("</td>\n \t\t"); out.write("</tr> \n \t\t\n \t\t"); out.write("<!-- No Authentication and No Privacy radio button-->\n \t\t"); out.write("<tr class=\"tableRowLight\"> \n \t"); out.write("<td class=\"tableText\" colspan=\"2\">\n \t\t"); out.write( "<input type=\"radio\" onClick=\"hideAuthPriv();adjustFrames(420)\" name=\"seclevel\" id=\"noauthnopriv\" \n \t\tvalue=\"NOAUTH_NOPRIV\" "); out.print("NOAUTH_NOPRIV".equals(seclevel) ? "CHECKED" : ""); out.write( "> \n \t\tNo Authentication and no Privacy\n \t\t"); out.write("</td>\n \t\t"); out.write("</tr> \n \t\t\n \t"); out.write("</table>\n\t\t\t"); out.write("</div> \t\n \n\t\t\t"); out.write("<!-- Authentication Passphrase & Protocol-->\t\n\t\t\t"); out.write("<div id=\"authOptions\" style=\"display:none; visibility:hidden\"> \n\t\t\t\t"); out.write( "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n \t\t"); out.write("<br/>\n \t\t"); out.write("<!-- Authentication Passphrase -->\n \t\t"); out.write("<tr class=\"tableRowLight\"> \t\t\t \n \t\t"); out.write("<td class=\"tableText\" colspan=\"2\">"); out.write("<b>Authentication:"); out.write("</b>"); out.write("</td> \n \t\t"); out.write("</tr> \n \t\t"); out.write("<tr class=\"tableRowLight\"> \n \t\t\t"); out.write("<td class=\"tableText\" width=\"31%\">Passphrase"); out.write("<a class=\"tt\" href=\"javascript:towerTip("); out.print(WTTips.TIP_SNMP_AUTH_PASS); out.write(");\" title=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n \t"); out.write("<td class=\"tableText\" >"); out.write( "<input type=\"password\" name=\"authpass\" id=\"authpassfld\" size=\"18\" maxlength=\"255\" value=\""); out.print(authpass); out.write("\" > (min. 8 char.)"); out.write("</td>\n \t\t"); out.write("</tr>\n \t\t \t\t\n \t\t"); out.write("<!-- Authentication Protocol --> \t\t\n \t\t"); out.write("<tr class=\"tableRowLight\"> \n \t\t\t"); out.write("<td class=\"tableText\" width=\"31%\">Protocol"); out.write("<a class=\"tt\" href=\"javascript:towerTip("); out.print(WTTips.TIP_SNMP_AUTH_PROC); out.write(");\" title=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n \t"); out.write("<td class=\"tableText\" >\n \t\t"); out.write("<select name=\"authproto\" id=\"authprotofld\">\n \t\t\t\t"); out.write("<option "); out.print("MD5".equals(authproto) ? "SELECTED" : ""); out.write(">MD5"); out.write("</option>\n \t\t\t\t"); out.write("<option "); out.print("SHA".equals(authproto) ? "SELECTED" : ""); out.write(">SHA"); out.write("</option>\n \t\t\t\t"); out.write("</select> \t\t\t \n \t\t\t"); out.write("</td> \t \t\t\n \t\t"); out.write("</tr>\n \t\t"); out.write("</table>\n\t\t\t"); out.write("</div> \t\n \t\t\n "); out.write("<!-- Privacy Passphrase & Protocol--> \t\t\n\t \t"); out.write("<div id=\"privOptions\" style=\"display:none; visibility:hidden\"> \n\t\t\t\t"); out.write( "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n \t\t"); out.write("<br/> \t\t \t\t\n \t\t"); out.write("<!-- Privacy Passphrase -->\n \t\t"); out.write("<tr class=\"tableRowLight\">\n \t\t"); out.write("<td class=\"tableText\" colspan=\"2\">"); out.write("<b>Privacy:"); out.write("</b>"); out.write("</td>\n "); out.write("</tr> \t\t\n \t\t\n \t\t"); out.write("<tr class=\"tableRowLight\"> \n \t\t\t"); out.write("<td class=\"tableText\" width=\"31%\">Passphrase"); out.write("<a class=\"tt\" href=\"javascript:towerTip("); out.print(WTTips.TIP_SNMP_PRIV_PASS); out.write(");\" title=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n \t"); out.write("<td class=\"tableText\" >"); out.write( "<input type=\"password\" name=\"privpass\" id=\"privpassfld\" size=\"18\" maxlength=\"255\" value=\""); out.print(privpass); out.write("\" > (min. 8 char.)"); out.write("</td>\n \t\t"); out.write("</tr>\n \t\t \n \t\t"); out.write("<!-- Privacy Protocol --> \t\t\n \t\t"); out.write("<tr class=\"tableRowLight\"> \n \t\t\t"); out.write("<td class=\"tableText\" width=\"31%\">Protocol"); out.write("<a class=\"tt\" href=\"javascript:towerTip("); out.print(WTTips.TIP_SNMP_PRIV_PROC); out.write(");\" title=\"Telemetry Tip\">"); out.write("<img src=\"/wt-portal/images/icons/tower_tips.gif\" border=\"0\">"); out.write("</a>"); out.write("</td>\n \t"); out.write("<td class=\"tableText\" > \t\t\n \t\t"); out.write("<select name=\"privproto\" id=\"privprotofld\">\n \t\t\t\t"); out.write("<option "); out.print("DES".equals(privproto) ? "SELECTED" : ""); out.write(">DES"); out.write("</option>\n \t\t\t\t"); out.write("<option "); out.print("AES 128".equals(privproto) ? "SELECTED" : ""); out.write(">AES 128"); out.write("</option>\n \t\t\t\t"); out.write("<option "); out.print("AES 192".equals(privproto) ? "SELECTED" : ""); out.write(">AES 192"); out.write("</option>\n \t\t\t\t"); out.write("<option "); out.print("AES 256".equals(privproto) ? "SELECTED" : ""); out.write(">AES 256"); out.write("</option>\n \t\t\t\t"); out.write("</select>\n \t\t\t"); out.write("</td> \t \t\t\n \t\t"); out.write("</tr> \n \t\t\t"); out.write("</table>\n\t\t\t"); out.write("</div> \t\t\n \n \t\t"); out.write("<!-- End of SNMP v3 OPTIONS --> \n \n \t"); out.write("<!-- SNMP Submit button -->\n\t\t\t"); out.write("<tr class=\"tableRowLight\">\n\t\t\t\t"); out.write("<td class=\"tableText\" colspan=\"2\">\n \t\t"); out.write("<INPUT type=\"hidden\" name=\"button\" value=\"\">\n\t\t\t\t\t"); out.write( "<INPUT type=\"image\" src=\"/wt-portal/images/buttons/btn_walk.gif\" onClick=\"document.snmpwalk.button.value='Walk'; return validateForm();\">\n \t\t\t"); out.write("</td>\n \t\t"); out.write("</tr>\n\t"); if (lim != null) { // Check if license is not null if (lim.isValid()) { // Check if license is valid if (((Boolean.valueOf( lim.getFeature(com.websina.license.License.WT_SECURE_SNMPV3_ENABLED_FIELD_NAME))) .booleanValue())) { // Check if feature is enabled if ((lim.daysLeft(com.websina.license.License.WT_SECURE_SNMPV3_EXPIRATION_FIELD_NAME) > 0) || (lim.daysLeft(com.websina.license.License.WT_SECURE_SNMPV3_EXPIRATION_FIELD_NAME) == -1)) { // Check if feature has expired (-1 indicates never expired) out.write("\t\t\n \t\t"); out.write("<!-- License valid, SNMPv3 enabled and expired -->\t\t\t\n \t\t"); out.write("<tr class=\"tableRowLight\">\n \t\t\t"); out.write("<td colspan=\"2\">"); out.write( "<img src=\"/wt-portal/images/spacers/spacer.gif\" height=\"10\" width=\"10\" border=\"0\" alt=\"WebTelemetry\">"); out.write("</td>\n \t\t"); out.write("</tr>\n "); } else { out.write("\n \t\t"); out.write("<!-- SNMPv3 enabled and expired -->\n \t\t"); out.write("<tr class=\"tableRowLight\">\n \t\t\t"); out.write("<td colspan=\"2\" class=\"tableText\">"); out.write("<span class=\"error\">Access to SNMP v3 has expired."); out.write("</span>"); out.write("<br> \n \t\t\t"); out.write("</td>\n\t\t\t"); out.write("</tr>\n "); } } else { out.write("\n \t\t"); out.write("<!-- License is valid, SNMPv3 is disabled -->\n \t\t"); out.write("<tr class=\"tableRowLight\">\n \t\t\t"); out.write("<td colspan=\"2\">"); out.write( "<img src=\"/wt-portal/images/spacers/spacer.gif\" height=\"10\" width=\"10\" border=\"0\" alt=\"WebTelemetry\">"); out.write("</td>\n \t\t"); out.write("</tr>\n "); } } } out.write(" \n\n\t\t\t"); out.write("</table>\n "); out.write("<!-- END WALK SNMP TABLES -->\n "); out.write("</td> \n \n "); out.write("<td valign=\"top\">"); out.write( "<img src=\"/wt-portal/images/spacers/spacer.gif\" height=\"10\" width=\"10\" border=\"0\" alt=\"WebTelemetry\">"); out.write("</td>\n "); out.write("<td valign=\"top\" bgcolor=\"#f0f0f0\">\n "); out.write("<!-- BEGIN MIB TABLE -->\n "); out.write( "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n "); out.write("<tr class=\"tableHeader\">\n "); out.write("<td class=\"tableHeader\">View MIBs"); out.write("</td>\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\">\n \t"); out.write("<select name=mibs size=7>\n\t\t\t\t\t\t "); if (vMibs != null) { for (int j = 0; j < vMibs.size(); j++) { out.print("<OPTION>" + (String) vMibs.get(j)); } } out.write("\n\t\t\t\t\t "); out.write("</select>\n "); out.write("</td>\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\">\n\t\t\t\t\t"); out.write( "<INPUT type=\"image\" src=\"/wt-portal/images/buttons/btn_view_MIB.gif\" onClick=\"document.snmpwalk.button.value='View MIB'; return viewMIB();\"> "); out.write( "<INPUT type=\"image\" src=\"/wt-portal/images/buttons/btn_reload_MIB.gif\" onClick=\"document.snmpwalk.button.value='Reload MIBs';\">"); out.write("</td>\n "); out.write("</tr>\n "); out.write("</table>\n "); out.write("<!-- END MIB TABLE -->\n "); out.write("</td>\n \n "); out.write("<td valign=\"top\">"); out.write( "<img src=\"/wt-portal/images/spacers/spacer.gif\" height=\"10\" width=\"10\" border=\"0\" alt=\"WebTelemetry\">"); out.write("</td>\n\t\t"); out.write("<td valign=\"top\" bgcolor=\"#f0f0f0\">\n "); out.write("<!-- BEGIN ASN TABLE -->\n "); out.write( "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n "); out.write("<tr class=\"tableHeader\">\n "); out.write("<td class=\"tableHeader\">Lookup ASN.1 Values By Name"); out.write("</td>\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\">"); out.write("<INPUT type=\"text\" name=\"desc\" value=\""); out.print(strDesc); out.write("\" size=\"30\" >"); out.write("</td>\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\">"); out.write("<textarea cols=\"30\" rows=\"5\">"); out.print(strASN1); out.write("</textarea>"); out.write("</td>\n "); out.write("</tr>\n "); out.write("<tr class=\"tableRowLight\">\n "); out.write("<td class=\"tableText\">\n\t "); out.write( "<INPUT type=\"image\" src=\"/wt-portal/images/buttons/btn_lookup.gif\" onClick=\"document.snmpwalk.button.value='lookup'; return validateLookup();\">\n "); out.write("</td>\n "); out.write("</tr>\n "); out.write("</table>"); out.write("<BR>\n "); out.write("<!-- END ASN TABLE -->\n "); out.write("</td> \n \t"); out.write("<td valign=\"top\">"); out.write( "<img src=\"/wt-portal/images/spacers/spacer.gif\" height=\"10\" width=\"10\" border=\"0\" alt=\"WebTelemetry\">"); out.write("</td> \n "); out.write("</tr>\n"); out.write("</table>\n"); out.write("</form>\n"); out.write("<!-- BEGIN FRAMING TABLE:close tags-->\n\t\t"); out.write("</td>\n\t"); out.write("</tr>\n"); out.write("</table>\n"); out.write("<!-- END FRAMING TABLE:close tags--> \n "); out.write("</body>\n"); out.write("</html>\n"); } catch (Throwable t) { out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (pageContext != null) pageContext.handlePageException(t); } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); } }