Changeset f5dffb0


Ignore:
Timestamp:
Dec 5, 2017 9:46:11 PM (3 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
34b204c
Parents:
d4bafae
Message:

Susimail, Console, Jetty:

  • Adjust multipart size limits
  • Better handling of errors when multipart limits are exceeded
  • Fix multipart config for /configplugins
  • Test for total size limit in susimail
Location:
apps
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • apps/jetty/java/src/net/i2p/servlet/RequestWrapper.java

    rd4bafae rf5dffb0  
    102102        /**
    103103         * @return List of request parameter names
     104         * @throws IllegalStateException if the request is too large
    104105         */
    105106        public Enumeration<String> getParameterNames() {
     
    118119                                } catch (IllegalStateException ise) {
    119120                                        log(ise);
     121                                        throw ise;
    120122                                }
    121123                        }
     
    140142        }
    141143
     144        /**
     145         * @throws IllegalStateException if the request is too large
     146         */
    142147        public String getContentType( String partName )
    143148        {
     
    154159                        } catch (IllegalStateException ise) {
    155160                                log(ise);
     161                                throw ise;
    156162                        }
    157163                }
     
    163169        }
    164170
     171        /**
     172         * @throws IllegalStateException if the request is too large
     173         */
    165174        public String getParameter( String name, String defaultValue )
    166175        {
     
    193202                                } catch (IllegalStateException ise) {
    194203                                        log(ise);
     204                                        throw ise;
    195205                                } finally {
    196206                                        if (in != null) try { in.close(); } catch (IOException ioe) {}
     
    205215        }
    206216
     217        /**
     218         * @throws IllegalStateException if the request is too large
     219         */
    207220        public String getFilename(String partName )
    208221        {
     
    219232                        } catch (IllegalStateException ise) {
    220233                                log(ise);
    221                         }
    222                 }
    223                 return result;
    224         }
    225 
     234                                throw ise;
     235                        }
     236                }
     237                return result;
     238        }
     239
     240        /**
     241         * @throws IllegalStateException if the request is too large
     242         */
    226243        public InputStream getInputStream(String partName )
    227244        {
     
    238255                        } catch (IllegalStateException ise) {
    239256                                log(ise);
     257                                throw ise;
    240258                        }
    241259                }
  • apps/jetty/java/src/net/i2p/servlet/filters/XSSFilter.java

    rd4bafae rf5dffb0  
    1010import javax.servlet.ServletResponse;
    1111import javax.servlet.http.HttpServletRequest;
     12import javax.servlet.http.HttpServletResponse;
    1213
    1314/**
     
    2627    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    2728        throws IOException, ServletException {
    28         chain.doFilter(new XSSRequestWrapper((HttpServletRequest) request), response);
     29        try {
     30            chain.doFilter(new XSSRequestWrapper((HttpServletRequest) request), response);
     31        } catch (IllegalStateException ise) {
     32            // Multipart form error, probably file too big
     33            // We need to send the error quickly, if we just throw a ServletException,
     34            // the data keeps coming and the connection gets reset.
     35            // This way we at least get the error to the browser.
     36            ((HttpServletResponse)response).sendError(413, ise.getMessage());
     37        }
    2938    }
    3039}
  • apps/routerconsole/java/build.xml

    rd4bafae rf5dffb0  
    449449        <property name="__match1" value="&lt;servlet-class&gt;net.i2p.router.web.jsp." />
    450450        <property name="__match2" value="_jsp&lt;/servlet-class&gt;" />
    451         <property name="__class1" value="${__match1}configclients${__match2}" />
     451        <property name="__class1" value="${__match1}configplugins${__match2}" />
    452452        <property name="__class2" value="${__match1}configfamily${__match2}" />
    453453        <property name="__class3" value="${__match1}configreseed${__match2}" />
  • apps/susimail/src/WEB-INF/web.xml

    rd4bafae rf5dffb0  
    1818    <servlet-class>i2p.susi.webmail.WebMail</servlet-class>
    1919    <multipart-config>
    20       <max-file-size>67108864</max-file-size>
    21       <max-request-size>67108864</max-request-size>
    22       <file-size-threshold>262144</file-size-threshold>
     20      <!-- 23 MB. See SMTPClient for discussion -->
     21      <max-file-size>24117248</max-file-size>
     22      <max-request-size>24117248</max-request-size>
     23      <file-size-threshold>131072</file-size-threshold>
    2324    </multipart-config>
    2425  </servlet>
  • apps/susimail/src/src/i2p/susi/webmail/Attachment.java

    rd4bafae rf5dffb0  
    7474
    7575        /**
    76          * Delete the data file
     76         * The unencoded size
     77         * @since 0.9.33
     78         */
     79        public long getSize() {
     80                return data.length();
     81        }
     82
     83        /**
     84         * Delete the data file
    7785         * @since 0.9.33
    7886         */
  • apps/susimail/src/src/i2p/susi/webmail/WebMail.java

    rd4bafae rf5dffb0  
    16491649                       
    16501650                        if (isPOST) {
    1651                                 String nonce = request.getParameter(SUSI_NONCE);
    1652                                 if (nonce == null || !sessionObject.isValidNonce(nonce)) {
    1653                                         // These two strings are already in the router console FormHandler,
    1654                                         // so translate with that bundle.
    1655                                         sessionObject.error = consoleGetString(
    1656                                                 "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.",
    1657                                                 ctx)
    1658                                                 + '\n' +
    1659                                                 consoleGetString("If the problem persists, verify that you have cookies enabled in your browser.",
    1660                                                 ctx);
     1651                                try {
     1652                                        String nonce = request.getParameter(SUSI_NONCE);
     1653                                        if (nonce == null || !sessionObject.isValidNonce(nonce)) {
     1654                                                // These two strings are already in the router console FormHandler,
     1655                                                // so translate with that bundle.
     1656                                                sessionObject.error = consoleGetString(
     1657                                                        "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.",
     1658                                                        ctx)
     1659                                                        + '\n' +
     1660                                                        consoleGetString("If the problem persists, verify that you have cookies enabled in your browser.",
     1661                                                        ctx);
     1662                                                isPOST = false;
     1663                                        }
     1664                                } catch (IllegalStateException ise) {
     1665                                        // too big, can't get any parameters
     1666                                        sessionObject.error += ise.getMessage() + '\n';
    16611667                                        isPOST = false;
    16621668                                }
     
    20282034                }
    20292035
     2036                long total = text.length();
     2037                boolean multipart = sessionObject.attachments != null && !sessionObject.attachments.isEmpty();
     2038                if (multipart) {
     2039                        for(Attachment a : sessionObject.attachments) {
     2040                                total += a.getSize();
     2041                        }
     2042                }
     2043                if (total > SMTPClient.BINARY_MAX_SIZE) {
     2044                        ok = false;
     2045                        sessionObject.error += _t("Email is too large, max is {0}",
     2046                                                  DataHelper.formatSize2(SMTPClient.BINARY_MAX_SIZE, false) + 'B') + '\n';
     2047                }
     2048
    20302049                if( ok ) {
    20312050                        StringBuilder body = new StringBuilder(1024);
     
    20412060                        }
    20422061                        String boundary = "_=" + I2PAppContext.getGlobalContext().random().nextLong();
    2043                         boolean multipart = false;
    2044                         if( sessionObject.attachments != null && !sessionObject.attachments.isEmpty() ) {
    2045                                 multipart = true;
     2062                        if (multipart) {
    20462063                                body.append( "\r\nMIME-Version: 1.0\r\nContent-type: multipart/mixed; boundary=\"" + boundary + "\"\r\n\r\n" );
    20472064                        }
  • apps/susimail/src/src/i2p/susi/webmail/smtp/SMTPClient.java

    rd4bafae rf5dffb0  
    4848public class SMTPClient {
    4949       
     50        /**
     51         *  31.84 MB
     52         *  smtp.postman.i2p as of 2017-12.
     53         *  @since 0.9.33
     54         */
     55        public static final long DEFAULT_MAX_SIZE = 33388608;
     56
     57        /**
     58         *  About 23.25 MB.
     59         *  Base64 encodes 57 chars to 76 + \r\n on a line
     60         *  @since 0.9.33
     61         */
     62        public static final long BINARY_MAX_SIZE = (long) ((DEFAULT_MAX_SIZE * 57.0d / 78) - 32*1024);
     63
    5064        private Socket socket;
    5165        public String error;
Note: See TracChangeset for help on using the changeset viewer.