/**
   * 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;
    }
  }
Exemple #3
0
  /**
   * 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);
  }
}
Exemple #5
0
 /** 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("\" >&nbsp;(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("\" >&nbsp;(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>&nbsp;\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();\">&nbsp;&nbsp;");
      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);
    }
  }