Search in sources :

Example 1 with ServerCookie

use of org.apache.tomcat.util.http.ServerCookie in project tomcat by apache.

the class Cookie method parseCookieRfc6265.

private static void parseCookieRfc6265(ByteBuffer bb, ServerCookies serverCookies) {
    boolean moreToProcess = true;
    while (moreToProcess) {
        skipLWS(bb);
        ByteBuffer name = readToken(bb);
        ByteBuffer value = null;
        skipLWS(bb);
        SkipResult skipResult = skipByte(bb, EQUALS_BYTE);
        if (skipResult == SkipResult.FOUND) {
            skipLWS(bb);
            value = readCookieValueRfc6265(bb);
            if (value == null) {
                logInvalidHeader(bb);
                // Invalid cookie value. Skip to the next semi-colon
                skipUntilSemiColon(bb);
                continue;
            }
            skipLWS(bb);
        }
        skipResult = skipByte(bb, SEMICOLON_BYTE);
        if (skipResult == SkipResult.FOUND) {
        // NO-OP
        } else if (skipResult == SkipResult.NOT_FOUND) {
            logInvalidHeader(bb);
            // Invalid cookie. Ignore it and skip to the next semi-colon
            skipUntilSemiColon(bb);
            continue;
        } else {
            // SkipResult.EOF
            moreToProcess = false;
        }
        if (name.hasRemaining()) {
            ServerCookie sc = serverCookies.addCookie();
            sc.getName().setBytes(name.array(), name.position(), name.remaining());
            if (value == null) {
                sc.getValue().setBytes(EMPTY_BYTES, 0, EMPTY_BYTES.length);
            } else {
                sc.getValue().setBytes(value.array(), value.position(), value.remaining());
            }
        }
    }
}
Also used : ServerCookie(org.apache.tomcat.util.http.ServerCookie)

Example 2 with ServerCookie

use of org.apache.tomcat.util.http.ServerCookie in project tomcat by apache.

the class Cookie method parseCookie.

public static void parseCookie(byte[] bytes, int offset, int len, ServerCookies serverCookies) {
    // ByteBuffer is used throughout this parser as it allows the byte[]
    // and position information to be easily passed between parsing methods
    ByteBuffer bb = new ByteBuffer(bytes, offset, len);
    boolean moreToProcess = true;
    while (moreToProcess) {
        skipLWS(bb);
        int start = bb.position();
        ByteBuffer name = readToken(bb);
        ByteBuffer value = null;
        skipLWS(bb);
        SkipResult skipResult = skipByte(bb, EQUALS_BYTE);
        if (skipResult == SkipResult.FOUND) {
            skipLWS(bb);
            value = readCookieValueRfc6265(bb);
            if (value == null) {
                // Invalid cookie value. Skip to the next semi-colon
                skipUntilSemiColon(bb);
                logInvalidHeader(start, bb);
                continue;
            }
            skipLWS(bb);
        }
        skipResult = skipByte(bb, SEMICOLON_BYTE);
        if (skipResult == SkipResult.FOUND) {
        // NO-OP
        } else if (skipResult == SkipResult.NOT_FOUND) {
            // Invalid cookie. Ignore it and skip to the next semi-colon
            skipUntilSemiColon(bb);
            logInvalidHeader(start, bb);
            continue;
        } else {
            // SkipResult.EOF
            moreToProcess = false;
        }
        if (name.hasRemaining()) {
            ServerCookie sc = serverCookies.addCookie();
            sc.getName().setBytes(name.array(), name.position(), name.remaining());
            if (value == null) {
                sc.getValue().setBytes(EMPTY_BYTES, 0, EMPTY_BYTES.length);
            } else {
                sc.getValue().setBytes(value.array(), value.position(), value.remaining());
            }
        }
    }
}
Also used : ServerCookie(org.apache.tomcat.util.http.ServerCookie)

Example 3 with ServerCookie

use of org.apache.tomcat.util.http.ServerCookie in project tomcat by apache.

the class Cookie method parseCookieRfc2109.

private static void parseCookieRfc2109(ByteBuffer bb, ServerCookies serverCookies, int version) {
    boolean moreToProcess = true;
    while (moreToProcess) {
        skipLWS(bb);
        boolean parseAttributes = true;
        ByteBuffer name = readToken(bb);
        ByteBuffer value = null;
        ByteBuffer path = null;
        ByteBuffer domain = null;
        skipLWS(bb);
        SkipResult skipResult = skipByte(bb, EQUALS_BYTE);
        if (skipResult == SkipResult.FOUND) {
            skipLWS(bb);
            value = readCookieValueRfc2109(bb, false);
            if (value == null) {
                skipInvalidCookie(bb);
                continue;
            }
            skipLWS(bb);
        }
        skipResult = skipByte(bb, COMMA_BYTE);
        if (skipResult == SkipResult.FOUND) {
            parseAttributes = false;
        }
        skipResult = skipByte(bb, SEMICOLON_BYTE);
        if (skipResult == SkipResult.EOF) {
            parseAttributes = false;
            moreToProcess = false;
        } else if (skipResult == SkipResult.NOT_FOUND) {
            skipInvalidCookie(bb);
            continue;
        }
        if (parseAttributes) {
            skipResult = skipBytes(bb, PATH_BYTES);
            if (skipResult == SkipResult.FOUND) {
                skipLWS(bb);
                skipResult = skipByte(bb, EQUALS_BYTE);
                if (skipResult != SkipResult.FOUND) {
                    skipInvalidCookie(bb);
                    continue;
                }
                path = readCookieValueRfc2109(bb, true);
                if (path == null) {
                    skipInvalidCookie(bb);
                    continue;
                }
                skipLWS(bb);
                skipResult = skipByte(bb, COMMA_BYTE);
                if (skipResult == SkipResult.FOUND) {
                    parseAttributes = false;
                }
                skipResult = skipByte(bb, SEMICOLON_BYTE);
                if (skipResult == SkipResult.EOF) {
                    parseAttributes = false;
                    moreToProcess = false;
                } else if (skipResult == SkipResult.NOT_FOUND) {
                    skipInvalidCookie(bb);
                    continue;
                }
            }
        }
        if (parseAttributes) {
            skipResult = skipBytes(bb, DOMAIN_BYTES);
            if (skipResult == SkipResult.FOUND) {
                skipLWS(bb);
                skipResult = skipByte(bb, EQUALS_BYTE);
                if (skipResult != SkipResult.FOUND) {
                    skipInvalidCookie(bb);
                    continue;
                }
                domain = readCookieValueRfc2109(bb, false);
                if (domain == null) {
                    skipInvalidCookie(bb);
                    continue;
                }
                skipResult = skipByte(bb, COMMA_BYTE);
                if (skipResult == SkipResult.FOUND) {
                    parseAttributes = false;
                }
                skipResult = skipByte(bb, SEMICOLON_BYTE);
                if (skipResult == SkipResult.EOF) {
                    parseAttributes = false;
                    moreToProcess = false;
                } else if (skipResult == SkipResult.NOT_FOUND) {
                    skipInvalidCookie(bb);
                    continue;
                }
            }
        }
        if (name.hasRemaining() && value != null && value.hasRemaining()) {
            ServerCookie sc = serverCookies.addCookie();
            sc.setVersion(version);
            sc.getName().setBytes(name.array(), name.position(), name.remaining());
            sc.getValue().setBytes(value.array(), value.position(), value.remaining());
            if (domain != null) {
                sc.getDomain().setBytes(domain.array(), domain.position(), domain.remaining());
            }
            if (path != null) {
                sc.getPath().setBytes(path.array(), path.position(), path.remaining());
            }
        }
    }
}
Also used : ServerCookie(org.apache.tomcat.util.http.ServerCookie)

Example 4 with ServerCookie

use of org.apache.tomcat.util.http.ServerCookie in project tomcat70 by apache.

the class Request method parseCookies.

/**
 * Parse cookies.
 */
protected void parseCookies() {
    cookiesParsed = true;
    Cookies serverCookies = coyoteRequest.getCookies();
    int count = serverCookies.getCookieCount();
    if (count <= 0) {
        return;
    }
    cookies = new Cookie[count];
    int idx = 0;
    for (int i = 0; i < count; i++) {
        ServerCookie scookie = serverCookies.getCookie(i);
        try {
            /*
                we must unescape the '\\' escape character
                 */
            Cookie cookie = new Cookie(scookie.getName().toString(), null);
            int version = scookie.getVersion();
            cookie.setVersion(version);
            cookie.setValue(unescape(scookie.getValue().toString()));
            cookie.setPath(unescape(scookie.getPath().toString()));
            String domain = scookie.getDomain().toString();
            if (domain != null) {
                // avoid NPE
                cookie.setDomain(unescape(domain));
            }
            String comment = scookie.getComment().toString();
            cookie.setComment(version == 1 ? unescape(comment) : null);
            cookies[idx++] = cookie;
        } catch (IllegalArgumentException e) {
        // Ignore bad cookie
        }
    }
    if (idx < count) {
        Cookie[] ncookies = new Cookie[idx];
        System.arraycopy(cookies, 0, ncookies, 0, idx);
        cookies = ncookies;
    }
}
Also used : ServerCookie(org.apache.tomcat.util.http.ServerCookie) Cookie(javax.servlet.http.Cookie) ServerCookie(org.apache.tomcat.util.http.ServerCookie) Cookies(org.apache.tomcat.util.http.Cookies)

Example 5 with ServerCookie

use of org.apache.tomcat.util.http.ServerCookie in project tomcat70 by apache.

the class CoyoteAdapter method parseSessionCookiesId.

/**
 * Parse session id in Cookie.
 */
protected void parseSessionCookiesId(org.apache.coyote.Request req, Request request) {
    // If session tracking via cookies has been disabled for the current
    // context, don't go looking for a session ID in a cookie as a cookie
    // from a parent context with a session ID may be present which would
    // overwrite the valid session ID encoded in the URL
    Context context = (Context) request.getMappingData().context;
    if (context != null && !context.getServletContext().getEffectiveSessionTrackingModes().contains(SessionTrackingMode.COOKIE)) {
        return;
    }
    // Parse session id from cookies
    Cookies serverCookies = req.getCookies();
    int count = serverCookies.getCookieCount();
    if (count <= 0) {
        return;
    }
    String sessionCookieName = SessionConfig.getSessionCookieName(context);
    for (int i = 0; i < count; i++) {
        ServerCookie scookie = serverCookies.getCookie(i);
        if (scookie.getName().equals(sessionCookieName)) {
            // Override anything requested in the URL
            if (!request.isRequestedSessionIdFromCookie()) {
                // Accept only the first session id cookie
                convertMB(scookie.getValue());
                request.setRequestedSessionId(scookie.getValue().toString());
                request.setRequestedSessionCookie(true);
                request.setRequestedSessionURL(false);
                if (log.isDebugEnabled()) {
                    log.debug(" Requested cookie session id is " + request.getRequestedSessionId());
                }
            } else {
                if (!request.isRequestedSessionIdValid()) {
                    // Replace the session id until one is valid
                    convertMB(scookie.getValue());
                    request.setRequestedSessionId(scookie.getValue().toString());
                }
            }
        }
    }
}
Also used : Context(org.apache.catalina.Context) ServerCookie(org.apache.tomcat.util.http.ServerCookie) Cookies(org.apache.tomcat.util.http.Cookies)

Aggregations

ServerCookie (org.apache.tomcat.util.http.ServerCookie)7 Context (org.apache.catalina.Context)2 Cookies (org.apache.tomcat.util.http.Cookies)2 ServerCookies (org.apache.tomcat.util.http.ServerCookies)2 Cookie (jakarta.servlet.http.Cookie)1 Cookie (javax.servlet.http.Cookie)1 CookieProcessor (org.apache.tomcat.util.http.CookieProcessor)1