| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <html> |
| <head> |
| <title>James Server - CPD Results</title> |
| <style type="text/css" media="all"> |
| @import url("./css/maven-base.css"); |
| @import url("./css/maven-theme.css"); |
| @import url("./css/site.css"); |
| </style> |
| <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" /> |
| <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> |
| </head> |
| <body class="composite"> |
| <div id="banner"> |
| <a href="http://james.apache.org/index.html" id="bannerLeft"> |
| |
| <img src="images/james-server-logo.gif" alt="" /> |
| |
| </a> |
| <a href="http://www.apache.org/index.html" id="bannerRight"> |
| |
| <img src="images/asf-logo-reduced.gif" alt="" /> |
| |
| </a> |
| <div class="clear"> |
| <hr/> |
| </div> |
| </div> |
| <div id="breadcrumbs"> |
| |
| |
| |
| |
| |
| |
| |
| <div class="xleft"> |
| Last Published: 09/02/2009 |
| </div> |
| <div class="xright"> <a href="../../index.html">JAMES Project</a> |
| | |
| <a href="../../server/index.html">Server</a> |
| | |
| <a href="../../mailet/index.html">Mailets</a> |
| | |
| <a href="../../jspf/index.html">jSPF</a> |
| | |
| <a href="../../mime4j/index.html">Mime4J</a> |
| | |
| <a href="../../jsieve/index.html">JSieve</a> |
| | |
| <a href="../../postage/index.html">Postage</a> |
| |
| |
| |
| |
| |
| |
| |
| </div> |
| <div class="clear"> |
| <hr/> |
| </div> |
| </div> |
| <div id="leftColumn"> |
| <div id="navcolumn"> |
| |
| |
| |
| |
| |
| |
| |
| <h5>James Server</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="../index.html">Overview</a> |
| </li> |
| |
| <li class="none"> |
| <a href="../design_objectives.html">Objectives</a> |
| </li> |
| |
| |
| |
| |
| |
| <li class="expanded"> |
| <a href="../FAQ.html">James FAQ</a> |
| <ul> |
| |
| <li class="none"> |
| <a href="../james_and_sendmail.html">James and Sendmail</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li class="none"> |
| <a href="http://wiki.apache.org/james">Wiki</a> |
| </li> |
| |
| <li class="none"> |
| <a href="../rfclist.html">Useful RFCs</a> |
| </li> |
| </ul> |
| <h5>Overview</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="index.html">Introduction</a> |
| </li> |
| |
| <li class="none"> |
| <a href="release-notes.html">Release Notes</a> |
| </li> |
| </ul> |
| <h5>Concepts</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="summary.html">Summary</a> |
| </li> |
| |
| <li class="none"> |
| <a href="spoolmanager.html">SpoolManager</a> |
| </li> |
| |
| <li class="none"> |
| <a href="repositories.html">Repositories</a> |
| </li> |
| |
| <li class="none"> |
| <a href="mailet_api.html">The Mailet API</a> |
| </li> |
| </ul> |
| <h5>How to...</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="build_instructions.html">Build James</a> |
| </li> |
| |
| <li class="none"> |
| <a href="installation_instructions.html">Install James</a> |
| </li> |
| </ul> |
| <h5>Configuration</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="dns_configuration.html">DNS Server</a> |
| </li> |
| |
| <li class="none"> |
| <a href="pop3_configuration.html">POP3 Server</a> |
| </li> |
| |
| <li class="none"> |
| <a href="smtp_configuration.html">SMTP Server</a> |
| </li> |
| |
| <li class="none"> |
| <a href="nntp_configuration.html">NNTP Server</a> |
| </li> |
| |
| <li class="none"> |
| <a href="fetchmail_configuration.html">FetchMail</a> |
| </li> |
| |
| <li class="none"> |
| <a href="remotemanager_configuration.html">RemoteManager</a> |
| </li> |
| |
| <li class="none"> |
| <a href="spoolmanager_configuration.html">SpoolManager</a> |
| </li> |
| |
| <li class="none"> |
| <a href="serverwide_configuration.html">Server-wide</a> |
| </li> |
| |
| <li class="none"> |
| <a href="adding_users.html">Adding Users</a> |
| </li> |
| |
| <li class="none"> |
| <a href="provided_matchers.html">Provided Matchers</a> |
| </li> |
| |
| <li class="none"> |
| <a href="provided_mailets.html">Provided Mailets</a> |
| </li> |
| </ul> |
| <h5>Common Configurations</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="smtp_auth.html">Using SMTP AUTH</a> |
| </li> |
| |
| <li class="none"> |
| <a href="using_database.html">Using a Database with James</a> |
| </li> |
| |
| <li class="none"> |
| <a href="usingTLS.html">Using TLS/SSL</a> |
| </li> |
| |
| <li class="none"> |
| <a href="mailing_lists.html">Creating Mailing Lists</a> |
| </li> |
| </ul> |
| <h5>Customization</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="custom_matcher.html">How to write a custom Matcher</a> |
| </li> |
| |
| <li class="none"> |
| <a href="custom_mailet.html">How to write a custom Mailet</a> |
| </li> |
| </ul> |
| <h5>Project</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="changelog.html">Changelog</a> |
| </li> |
| </ul> |
| <h5>Project Documentation</h5> |
| <ul> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="collapsed"> |
| <a href="project-info.html">Project Information</a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="expanded"> |
| <a href="project-reports.html">Project Reports</a> |
| <ul> |
| |
| <li class="none"> |
| <strong>CPD Report</strong> |
| </li> |
| |
| <li class="none"> |
| <a href="apidocs/index.html">JavaDocs</a> |
| </li> |
| |
| <li class="none"> |
| <a href="pmd.html">PMD Report</a> |
| </li> |
| |
| <li class="none"> |
| <a href="jxr.html">Source Xref</a> |
| </li> |
| |
| <li class="none"> |
| <a href="testapidocs/index.html">Test JavaDocs</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| <h5>Project</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="http://issues.apache.org/jira/browse/JAMES">Bug Database</a> |
| </li> |
| |
| <li class="none"> |
| <a href="http://svn.apache.org/viewvc/james/server/">Source Code</a> |
| </li> |
| |
| <li class="none"> |
| <a href="../todo.html">TODO</a> |
| </li> |
| </ul> |
| <h5>Downloads</h5> |
| <ul> |
| |
| <li class="none"> |
| <a href="../../download.cgi">Stable releases</a> |
| </li> |
| |
| <li class="none"> |
| <a href="../../downloadunstable.cgi">Unstable releases</a> |
| </li> |
| |
| <li class="none"> |
| <a href="http://people.apache.org/builds/james/nightly/">Nightly builds</a> |
| </li> |
| </ul> |
| <a href="http://maven.apache.org/" title="Built by Maven" id="poweredBy"> |
| <img alt="Built by Maven" src="./images/logos/maven-feather.png"></img> |
| </a> |
| |
| |
| |
| |
| |
| |
| |
| </div> |
| </div> |
| <div id="bodyColumn"> |
| <div id="contentBox"> |
| <div class="section"><h2>CPD Results</h2><p>The following document contains the results of PMD's <a href="http://pmd.sourceforge.net/cpd.html">CPD</a> 3.9.</p></div><div class="section"><h2>Duplications</h2><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/BayesianAnalysis.java</td><td><a href="./xref/org/apache/james/transport/mailets/BayesianAnalysis.html#387">387</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#682">682</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> } |
| } |
| |
| private void sendReplyFromPostmaster(Mail mail, String stringContent) throws MessagingException { |
| try { |
| MailAddress notifier = getMailetContext().getPostmaster(); |
| |
| MailAddress senderMailAddress = mail.getSender(); |
| |
| MimeMessage message = mail.getMessage(); |
| //Create the reply message |
| MimeMessage reply = new MimeMessage(Session.getDefaultInstance(System.getProperties(), null)); |
| |
| //Create the list of recipients in the Address[] format |
| InternetAddress[] rcptAddr = new InternetAddress[1]; |
| rcptAddr[0] = senderMailAddress.toInternetAddress(); |
| reply.setRecipients(Message.RecipientType.TO, rcptAddr); |
| |
| //Set the sender... |
| reply.setFrom(notifier.toInternetAddress()); |
| |
| //Create the message body |
| MimeMultipart multipart = new MimeMultipart(); |
| //Add message as the first mime body part |
| MimeBodyPart part = new MimeBodyPart(); |
| part.setContent(stringContent, "text/plain"); |
| part.setHeader(RFC2822Headers.CONTENT_TYPE, "text/plain"); |
| multipart.addBodyPart(part); |
| |
| reply.setContent(multipart); |
| reply.setHeader(RFC2822Headers.CONTENT_TYPE, multipart.getContentType()); |
| |
| //Create the list of recipients in our MailAddress format |
| Set recipients = new HashSet(); |
| recipients.add(senderMailAddress); |
| |
| //Set additional headers |
| if (reply.getHeader(RFC2822Headers.DATE)==null){ |
| reply.setHeader(RFC2822Headers.DATE, rfc822DateFormat.format(new java.util.Date())); |
| } |
| String subject = message.getSubject(); |
| if (subject == null) { |
| subject = ""; |
| } |
| if (subject.indexOf("Re:") == 0){ |
| reply.setSubject(subject); |
| } else { |
| reply.setSubject("Re:" + subject); |
| } |
| reply.setHeader(RFC2822Headers.IN_REPLY_TO, message.getMessageID()); |
| |
| //Send it off... |
| getMailetContext().sendMail(notifier, recipients, reply); |
| } |
| catch (Exception e) { |
| log("Exception found sending reply", e); |
| } |
| } |
| |
| /** Gets the main name of a local customer, handling alias */ |
| private String getPrimaryName(String originalUsername) {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/CommandListservProcessor.java</td><td><a href="./xref/org/apache/james/transport/mailets/CommandListservProcessor.html#418">418</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/GenericListserv.java</td><td><a href="./xref/org/apache/james/transport/mailets/GenericListserv.html#86">86</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> } |
| |
| /** |
| * <p>This takes the subject string and reduces (normailzes) it. |
| * Multiple "Re:" entries are reduced to one, and capitalized. The |
| * prefix is always moved/placed at the beginning of the line, and |
| * extra blanks are reduced, so that the output is always of the |
| * form:</p> |
| * <code> |
| * &lt;prefix&gt; + &lt;one-optional-"Re:"*gt; + &lt;remaining subject&gt; |
| * </code> |
| * <p>I have done extensive testing of this routine with a standalone |
| * driver, and am leaving the commented out debug messages so that |
| * when someone decides to enhance this method, it can be yanked it |
| * from this file, embedded it with a test driver, and the comments |
| * enabled.</p> |
| */ |
| static private String normalizeSubject(final String subj, final String prefix) { |
| // JDK IMPLEMENTATION NOTE! When we require JDK 1.4+, all |
| // occurrences of subject.toString.().indexOf(...) can be |
| // replaced by subject.indexOf(...). |
| |
| StringBuffer subject = new StringBuffer(subj); |
| int prefixLength = prefix.length(); |
| |
| // System.err.println("In: " + subject); |
| |
| // If the "prefix" is not at the beginning the subject line, remove it |
| int index = subject.toString().indexOf(prefix); |
| if (index != 0) { |
| // System.err.println("(p) index: " + index + ", subject: " + subject); |
| if (index > 0) { |
| subject.delete(index, index + prefixLength); |
| } |
| subject.insert(0, prefix); // insert prefix at the front |
| } |
| |
| // Replace Re: with RE: |
| String match = "Re:"; |
| index = subject.toString().indexOf(match, prefixLength); |
| |
| while(index > -1) { |
| // System.err.println("(a) index: " + index + ", subject: " + subject); |
| subject.replace(index, index + match.length(), "RE:"); |
| index = subject.toString().indexOf(match, prefixLength); |
| // System.err.println("(b) index: " + index + ", subject: " + subject); |
| } |
| |
| // Reduce them to one at the beginning |
| match ="RE:"; |
| int indexRE = subject.toString().indexOf(match, prefixLength) + match.length(); |
| index = subject.toString().indexOf(match, indexRE); |
| while(index > 0) { |
| // System.err.println("(c) index: " + index + ", subject: " + subject); |
| subject.delete(index, index + match.length()); |
| index = subject.toString().indexOf(match, indexRE); |
| // System.err.println("(d) index: " + index + ", subject: " + subject); |
| } |
| |
| // Reduce blanks |
| match = " "; |
| index = subject.toString().indexOf(match, prefixLength); |
| while(index > -1) { |
| // System.err.println("(e) index: " + index + ", subject: " + subject); |
| subject.replace(index, index + match.length(), " "); |
| index = subject.toString().indexOf(match, prefixLength); |
| // System.err.println("(f) index: " + index + ", subject: " + subject); |
| } |
| |
| |
| // System.err.println("Out: " + subject); |
| |
| return subject.toString(); |
| }</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/mailrepository/AvalonMailRepository.java</td><td><a href="./xref/org/apache/james/mailrepository/AvalonMailRepository.html#183">183</a></td></tr><tr class="a"><td>org/apache/james/mailrepository/JDBCMailRepository.java</td><td><a href="./xref/org/apache/james/mailrepository/JDBCMailRepository.html#483">483</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> } |
| } |
| |
| /** |
| * Releases a lock on a message identified by a key |
| * |
| * @param key the key of the message to be unlocked |
| * |
| * @return true if successfully released the lock, false otherwise |
| */ |
| public boolean unlock(String key) { |
| if (lock.unlock(key)) { |
| if ((DEEP_DEBUG) && (getLogger().isDebugEnabled())) { |
| StringBuffer debugBuffer = |
| new StringBuffer(256) |
| .append("Unlocked ") |
| .append(key) |
| .append(" for ") |
| .append(Thread.currentThread().getName()) |
| .append(" @ ") |
| .append(new java.util.Date(System.currentTimeMillis())); |
| getLogger().debug(debugBuffer.toString()); |
| } |
| return true; |
| } else { |
| return false; |
| } |
| } |
| |
| /** |
| * Obtains a lock on a message identified by a key |
| * |
| * @param key the key of the message to be locked |
| * |
| * @return true if successfully obtained the lock, false otherwise |
| */ |
| public boolean lock(String key) { |
| if (lock.lock(key)) { |
| if ((DEEP_DEBUG) && (getLogger().isDebugEnabled())) { |
| StringBuffer debugBuffer = |
| new StringBuffer(256) |
| .append("Locked ") |
| .append(key) |
| .append(" for ") |
| .append(Thread.currentThread().getName()) |
| .append(" @ ") |
| .append(new java.util.Date(System.currentTimeMillis())); |
| getLogger().debug(debugBuffer.toString()); |
| } |
| return true; |
| } else { |
| return false; |
| } |
| } |
| |
| /** |
| * Store this message to the database. Optionally stores the message |
| * body to the filesystem and only writes the headers to the database. |
| */ |
| public void store(Mail mc) throws MessagingException {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#459">459</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#582">582</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> out.println("Removing from the white list of " + (new MailAddress(senderUser, senderHost)) + " ..."); |
| out.println(); |
| |
| MimeMessage message = mail.getMessage() ; |
| |
| Object content= message.getContent(); |
| |
| if (message.getContentType().startsWith("text/plain") |
| && content instanceof String) { |
| StringTokenizer st = new StringTokenizer((String) content, " \t\n\r\f,;:<>"); |
| while (st.hasMoreTokens()) { |
| ResultSet selectRS = null; |
| try { |
| MailAddress recipientMailAddress; |
| try { |
| recipientMailAddress = new MailAddress(st.nextToken()); |
| } |
| catch (javax.mail.internet.ParseException pe) { |
| continue; |
| } |
| String recipientUser = recipientMailAddress.getUser().toLowerCase(Locale.US); |
| String recipientHost = recipientMailAddress.getHost().toLowerCase(Locale.US); |
| |
| if (getMailetContext().isLocalServer(recipientHost)) { |
| // not a remote recipient, so skip |
| continue; |
| } |
| |
| if (conn == null) { |
| conn = datasource.getConnection(); |
| } |
| |
| if (selectStmt == null) { |
| selectStmt = conn.prepareStatement(selectByPK); |
| } |
| selectStmt.setString(1, senderUser); |
| selectStmt.setString(2, senderHost); |
| selectStmt.setString(3, recipientUser); |
| selectStmt.setString(4, recipientHost); |
| selectRS = selectStmt.executeQuery(); |
| if (!selectRS.next()) {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/ClamAVScan.java</td><td><a href="./xref/org/apache/james/transport/mailets/ClamAVScan.html#719">719</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/smime/SMIMEAbstractSign.java</td><td><a href="./xref/org/apache/james/transport/mailets/smime/SMIMEAbstractSign.html#565">565</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> private void checkInitParameters(String[] allowedArray) throws MessagingException { |
| // if null then no check is requested |
| if (allowedArray == null) { |
| return; |
| } |
| |
| Collection allowed = new HashSet(); |
| Collection bad = new ArrayList(); |
| |
| for (int i = 0; i < allowedArray.length; i++) { |
| allowed.add(allowedArray[i]); |
| } |
| |
| Iterator iterator = getInitParameterNames(); |
| while (iterator.hasNext()) { |
| String parameter = (String) iterator.next(); |
| if (!allowed.contains(parameter)) { |
| bad.add(parameter); |
| } |
| } |
| |
| if (bad.size() > 0) { |
| throw new MessagingException("Unexpected init parameters found: " |
| + arrayToString(bad.toArray())); |
| } |
| } |
| |
| /** |
| * Utility method for obtaining a string representation of an array of Objects. |
| */ |
| private final String arrayToString(Object[] array) { |
| if (array == null) { |
| return "null"; |
| } |
| StringBuffer sb = new StringBuffer(1024); |
| sb.append("["); |
| for (int i = 0; i < array.length; i++) { |
| if (i > 0) { |
| sb.append(","); |
| } |
| sb.append(array[i]); |
| } |
| sb.append("]"); |
| return sb.toString(); |
| } |
| |
| /** |
| * Utility method that checks if there is at least one address in the "From:" header |
| * same as the <i>reverse-path</i>. |
| * @param mail The mail to check. |
| * @return True if an address is found, false otherwise. |
| */ |
| protected final boolean fromAddressSameAsReverse(Mail mail) {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#208">208</a></td></tr><tr class="a"><td>org/apache/james/transport/matchers/IsInWhiteList.java</td><td><a href="./xref/org/apache/james/transport/matchers/IsInWhiteList.html#120">120</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> if (repositoryPath != null) { |
| log("repositoryPath: " + repositoryPath); |
| } |
| else { |
| throw new MessagingException("repositoryPath is null"); |
| } |
| |
| ServiceManager serviceManager = (ServiceManager) getMailetContext().getAttribute(Constants.AVALON_COMPONENT_MANAGER); |
| |
| try { |
| // Get the DataSourceSelector block |
| DataSourceSelector datasources = (DataSourceSelector) serviceManager.lookup(DataSourceSelector.ROLE); |
| // Get the data-source required. |
| int stindex = repositoryPath.indexOf("://") + 3; |
| String datasourceName = repositoryPath.substring(stindex); |
| datasource = (DataSourceComponent) datasources.select(datasourceName); |
| } catch (Exception e) { |
| throw new MessagingException("Can't get datasource", e); |
| } |
| |
| try { |
| // Get the UsersRepository |
| usersStore = (UsersStore)serviceManager.lookup(UsersStore.ROLE); |
| localusers = (UsersRepository)usersStore.getRepository("LocalUsers"); |
| } catch (Exception e) { |
| throw new MessagingException("Can't get the local users repository", e); |
| } |
| |
| try { |
| initSqlQueries(datasource.getConnection(), getMailetContext()); |
| } catch (Exception e) { |
| throw new MessagingException("Exception initializing queries", e); |
| } |
| |
| selectByPK = sqlQueries.getSqlString("selectByPK", true);</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/AbstractRedirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/AbstractRedirect.html#397">397</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/Redirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/Redirect.html#333">333</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> String addressList = getInitParameter("recipients",getInitParameter("to")); |
| |
| // if nothing was specified, return <CODE>null</CODE> meaning no change |
| if (addressList == null) { |
| return null; |
| } |
| |
| try { |
| InternetAddress[] iaarray = InternetAddress.parse(addressList, false); |
| for (int i = 0; i < iaarray.length; i++) { |
| String addressString = iaarray[i].getAddress(); |
| MailAddress specialAddress = getSpecialAddress(addressString, |
| new String[] {"postmaster", "sender", "from", "replyTo", "reversePath", "unaltered", "recipients", "to", "null"}); |
| if (specialAddress != null) { |
| newRecipients.add(specialAddress); |
| } else { |
| newRecipients.add(new MailAddress(iaarray[i])); |
| } |
| } |
| } catch (Exception e) { |
| throw new MessagingException("Exception thrown in getRecipients() parsing: " + addressList, e); |
| } |
| if (newRecipients.size() == 0) { |
| throw new MessagingException("Failed to initialize \"recipients\" list; empty <recipients> init parameter found."); |
| } |
| |
| return newRecipients; |
| } |
| |
| /** |
| * @return the <CODE>to</CODE> init parameter |
| * or the postmaster address |
| * or <CODE>SpecialAddress.SENDER</CODE> |
| * or <CODE>SpecialAddress.REVERSE_PATH</CODE> |
| * or <CODE>SpecialAddress.UNALTERED</CODE> |
| * or the <CODE>recipients</CODE> init parameter if missing |
| * or <CODE>null</CODE> if also the latter is missing |
| */ |
| protected InternetAddress[] getTo() throws MessagingException {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/Forward.java</td><td><a href="./xref/org/apache/james/transport/mailets/Forward.html#118">118</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/Redirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/Redirect.html#338">338</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> } |
| |
| try { |
| InternetAddress[] iaarray = InternetAddress.parse(addressList, false); |
| for (int i = 0; i < iaarray.length; i++) { |
| String addressString = iaarray[i].getAddress(); |
| MailAddress specialAddress = getSpecialAddress(addressString, |
| new String[] {"postmaster", "sender", "from", "replyTo", "reversePath", "unaltered", "recipients", "to", "null"}); |
| if (specialAddress != null) { |
| newRecipients.add(specialAddress); |
| } else { |
| newRecipients.add(new MailAddress(iaarray[i])); |
| } |
| } |
| } catch (Exception e) { |
| throw new MessagingException("Exception thrown in getRecipients() parsing: " + addressList, e); |
| } |
| if (newRecipients.size() == 0) { |
| throw new MessagingException("Failed to initialize \"recipients\" list; empty <recipients> init parameter found."); |
| } |
| |
| return newRecipients; |
| } |
| |
| /** |
| * @return the <CODE>to</CODE> init parameter |
| * or the postmaster address |
| * or <CODE>SpecialAddress.SENDER</CODE> |
| * or <CODE>SpecialAddress.REVERSE_PATH</CODE> |
| * or <CODE>SpecialAddress.UNALTERED</CODE> |
| * or the <CODE>recipients</CODE> init parameter if missing |
| * or <CODE>null</CODE> if also the latter is missing |
| */ |
| protected InternetAddress[] getTo() throws MessagingException {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/pop3server/POP3Handler.java</td><td><a href="./xref/org/apache/james/pop3server/POP3Handler.html#664">664</a></td></tr><tr class="a"><td>org/apache/james/pop3server/POP3Handler.java</td><td><a href="./xref/org/apache/james/pop3server/POP3Handler.html#746">746</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> .append(mc.getName()); |
| responseString = responseBuffer.toString(); |
| writeLoggedFlushedResponse(responseString); |
| } else { |
| StringBuffer responseBuffer = |
| new StringBuffer(64) |
| .append(ERR_RESPONSE) |
| .append(" Message (") |
| .append(num) |
| .append(") already deleted."); |
| responseString = responseBuffer.toString(); |
| writeLoggedFlushedResponse(responseString); |
| } |
| } catch (IndexOutOfBoundsException npe) { |
| StringBuffer responseBuffer = |
| new StringBuffer(64) |
| .append(ERR_RESPONSE) |
| .append(" Message (") |
| .append(num) |
| .append(") does not exist."); |
| responseString = responseBuffer.toString(); |
| writeLoggedFlushedResponse(responseString); |
| } catch (NumberFormatException nfe) { |
| StringBuffer responseBuffer = |
| new StringBuffer(64) |
| .append(ERR_RESPONSE) |
| .append(" ") |
| .append(argument) |
| .append(" is not a valid number"); |
| responseString = responseBuffer.toString(); |
| writeLoggedFlushedResponse(responseString); |
| }</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/util/BayesianAnalyzer.java</td><td><a href="./xref/org/apache/james/util/BayesianAnalyzer.html#371">371</a></td></tr><tr class="a"><td>org/apache/james/util/BayesianAnalyzer.java</td><td><a href="./xref/org/apache/james/util/BayesianAnalyzer.html#423">423</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> String token; |
| String header = ""; |
| |
| //Build a Map of tokens encountered. |
| while ((token = nextToken(stream)) != null) { |
| boolean endingLine = false; |
| if (token.length() > 0 && token.charAt(token.length() - 1) == '\n') { |
| endingLine = true; |
| token = token.substring(0, token.length() - 1); |
| } |
| |
| if (token.length() > 0 && header.length() + token.length() < 90 && !allDigits(token)) { |
| if (token.equals("From:") |
| || token.equals("Return-Path:") |
| || token.equals("Subject:") |
| || token.equals("To:") |
| ) { |
| header = token; |
| if (!endingLine) { |
| continue; |
| } |
| } |
| |
| token = header + token;</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/AbstractRedirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/AbstractRedirect.html#402">402</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/Forward.java</td><td><a href="./xref/org/apache/james/transport/mailets/Forward.html#118">118</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> } |
| |
| try { |
| InternetAddress[] iaarray = InternetAddress.parse(addressList, false); |
| for (int i = 0; i < iaarray.length; i++) { |
| String addressString = iaarray[i].getAddress(); |
| MailAddress specialAddress = getSpecialAddress(addressString, |
| new String[] {"postmaster", "sender", "from", "replyTo", "reversePath", "unaltered", "recipients", "to", "null"}); |
| if (specialAddress != null) { |
| newRecipients.add(specialAddress); |
| } else { |
| newRecipients.add(new MailAddress(iaarray[i])); |
| } |
| } |
| } catch (Exception e) { |
| throw new MessagingException("Exception thrown in getRecipients() parsing: " + addressList, e); |
| } |
| if (newRecipients.size() == 0) { |
| throw new MessagingException("Failed to initialize \"recipients\" list; empty <recipients> init parameter found."); |
| } |
| |
| return newRecipients; |
| } |
| |
| /** |
| * @return null |
| */ |
| protected InternetAddress[] getTo() throws MessagingException {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#737">737</a></td></tr><tr class="a"><td>org/apache/james/transport/matchers/IsInWhiteList.java</td><td><a href="./xref/org/apache/james/transport/matchers/IsInWhiteList.html#226">226</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> theJDBCUtil.closeJDBCConnection(conn); |
| } |
| } |
| |
| /** Gets the main name of a local customer, handling alias */ |
| private String getPrimaryName(String originalUsername) { |
| String username; |
| try { |
| username = localusers.getRealName(originalUsername); |
| JamesUser user = (JamesUser) localusers.getUserByName(username); |
| if (user.getAliasing()) { |
| username = user.getAlias(); |
| } |
| } |
| catch (Exception e) { |
| username = originalUsername; |
| } |
| return username; |
| } |
| |
| /** |
| * Initializes the sql query environment from the SqlResources file. |
| * Will look for conf/sqlResources.xml. |
| * Will <I>not</I> create the database resources, if missing |
| * (this task is done, if needed, in the {@link WhiteListManager} |
| * initialization routine). |
| * @param conn The connection for accessing the database |
| * @param mailetContext The current mailet context, |
| * for finding the conf/sqlResources.xml file |
| * @throws Exception If any error occurs |
| */ |
| public void initSqlQueries(Connection conn, org.apache.mailet.MailetContext mailetContext) throws Exception { |
| try { |
| if (conn.getAutoCommit()) { |
| conn.setAutoCommit(false); |
| } |
| |
| this.sqlFile = new File((String) mailetContext.getAttribute("confDir"), "sqlResources.xml").getCanonicalFile(); |
| sqlQueries.init(this.sqlFile, "WhiteList" , conn, getSqlParameters());</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#787">787</a></td></tr><tr class="a"><td>org/apache/james/util/JDBCBayesianAnalyzer.java</td><td><a href="./xref/org/apache/james/util/JDBCBayesianAnalyzer.html#377">377</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> dbUpdated = createTable(conn, "messageCountsTableName", "createMessageCountsTable"); |
| |
| //Commit our changes if necessary. |
| if (conn != null && dbUpdated && !conn.getAutoCommit()) { |
| conn.commit(); |
| dbUpdated = false; |
| } |
| |
| } |
| |
| private boolean createTable(Connection conn, String tableNameSqlStringName, String createSqlStringName) throws SQLException { |
| String tableName = sqlQueries.getSqlString(tableNameSqlStringName, true); |
| |
| DatabaseMetaData dbMetaData = conn.getMetaData(); |
| |
| // Try UPPER, lower, and MixedCase, to see if the table is there. |
| if (theJDBCUtil.tableExists(dbMetaData, tableName)) { |
| return false; |
| } |
| |
| PreparedStatement createStatement = null; |
| |
| try { |
| createStatement = |
| conn.prepareStatement(sqlQueries.getSqlString(createSqlStringName, true)); |
| createStatement.execute(); |
| |
| StringBuffer logBuffer = null; |
| logBuffer = |
| new StringBuffer(64) |
| .append("Created table '") |
| .append(tableName) |
| .append("' using sqlResources string '") |
| .append(createSqlStringName) |
| .append("'.");</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/AbstractRedirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/AbstractRedirect.html#477">477</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/Redirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/Redirect.html#373">373</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> String addressList = getInitParameter("to",getInitParameter("recipients")); |
| |
| // if nothing was specified, return null meaning no change |
| if (addressList == null) { |
| return null; |
| } |
| |
| try { |
| iaarray = InternetAddress.parse(addressList, false); |
| for(int i = 0; i < iaarray.length; ++i) { |
| String addressString = iaarray[i].getAddress(); |
| MailAddress specialAddress = getSpecialAddress(addressString, |
| new String[] {"postmaster", "sender", "from", "replyTo", "reversePath", "unaltered", "recipients", "to", "null"}); |
| if (specialAddress != null) { |
| iaarray[i] = specialAddress.toInternetAddress(); |
| } |
| } |
| } catch (Exception e) { |
| throw new MessagingException("Exception thrown in getTo() parsing: " + addressList, e); |
| } |
| if (iaarray.length == 0) { |
| throw new MessagingException("Failed to initialize \"to\" list; empty <to> init parameter found."); |
| } |
| |
| return iaarray; |
| } |
| |
| /** |
| * @return the <CODE>reversePath</CODE> init parameter |
| * or the postmaster address |
| * or <CODE>SpecialAddress.SENDER</CODE> |
| * or <CODE>SpecialAddress.NULL</CODE> |
| * or <CODE>null</CODE> if missing |
| */ |
| protected MailAddress getReversePath() throws MessagingException {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/nntpserver/NNTPHandler.java</td><td><a href="./xref/org/apache/james/nntpserver/NNTPHandler.html#939">939</a></td></tr><tr class="a"><td>org/apache/james/nntpserver/NNTPHandler.java</td><td><a href="./xref/org/apache/james/nntpserver/NNTPHandler.html#1002">1002</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> .append("221 0 ") |
| .append(param); |
| writeLoggedFlushedResponse(respBuffer.toString()); |
| } |
| } else { |
| int newArticleNumber = currentArticleNumber; |
| if ( group == null ) { |
| writeLoggedFlushedResponse("412 no newsgroup selected"); |
| return; |
| } else { |
| if ( param == null ) { |
| if ( currentArticleNumber < 0 ) { |
| writeLoggedFlushedResponse("420 no current article selected"); |
| return; |
| } else { |
| article = group.getArticle(currentArticleNumber); |
| } |
| } |
| else { |
| newArticleNumber = Integer.parseInt(param); |
| article = group.getArticle(newArticleNumber); |
| } |
| if ( article == null ) { |
| writeLoggedFlushedResponse("423 no such article number in this group"); |
| return; |
| } else { |
| currentArticleNumber = newArticleNumber; |
| String articleID = article.getUniqueID(); |
| if (articleID == null) { |
| articleID = "<0>"; |
| } |
| StringBuffer respBuffer = |
| new StringBuffer(128) |
| .append("221 ")</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#522">522</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#645">645</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> log("Removal request issued by " + senderMailAddress); |
| } |
| //Commit our changes if necessary. |
| if (conn != null && dbUpdated && !conn.getAutoCommit()) { |
| conn.commit() ; |
| dbUpdated = false; |
| } |
| } |
| else { |
| out.println("The message must be plain - no action"); |
| } |
| |
| out.println(); |
| out.println("Finished"); |
| |
| sendReplyFromPostmaster(mail, sout.toString()); |
| |
| } catch (SQLException sqle) { |
| out.println("Error accessing the database"); |
| sendReplyFromPostmaster(mail, sout.toString()); |
| throw new MessagingException("Error accessing the database", sqle); |
| } catch (IOException ioe) { |
| out.println("Error getting message content"); |
| sendReplyFromPostmaster(mail, sout.toString()); |
| throw new MessagingException("Error getting message content", ioe); |
| } finally { |
| theJDBCUtil.closeJDBCStatement(selectStmt); |
| theJDBCUtil.closeJDBCStatement(deleteStmt);</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/AbstractRedirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/AbstractRedirect.html#1430">1430</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/smime/SMIMEAbstractSign.java</td><td><a href="./xref/org/apache/james/transport/mailets/smime/SMIMEAbstractSign.html#565">565</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> private void checkInitParameters(String[] allowedArray) throws MessagingException { |
| // if null then no check is requested |
| if (allowedArray == null) { |
| return; |
| } |
| |
| Collection allowed = new HashSet(); |
| Collection bad = new ArrayList(); |
| |
| for (int i = 0; i < allowedArray.length; i++) { |
| allowed.add(allowedArray[i]); |
| } |
| |
| Iterator iterator = getInitParameterNames(); |
| while (iterator.hasNext()) { |
| String parameter = (String) iterator.next(); |
| if (!allowed.contains(parameter)) { |
| bad.add(parameter); |
| } |
| } |
| |
| if (bad.size() > 0) { |
| throw new MessagingException("Unexpected init parameters found: " |
| + arrayToString(bad.toArray())); |
| } |
| }</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/AbstractRedirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/AbstractRedirect.html#1430">1430</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/ClamAVScan.java</td><td><a href="./xref/org/apache/james/transport/mailets/ClamAVScan.html#719">719</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> protected final void checkInitParameters(String[] allowedArray) throws MessagingException { |
| // if null then no check is requested |
| if (allowedArray == null) { |
| return; |
| } |
| |
| Collection allowed = new HashSet(); |
| Collection bad = new ArrayList(); |
| |
| for (int i = 0; i < allowedArray.length; i++) { |
| allowed.add(allowedArray[i]); |
| } |
| |
| Iterator iterator = getInitParameterNames(); |
| while (iterator.hasNext()) { |
| String parameter = (String) iterator.next(); |
| if (!allowed.contains(parameter)) { |
| bad.add(parameter); |
| } |
| } |
| |
| if (bad.size() > 0) { |
| throw new MessagingException("Unexpected init parameters found: " |
| + arrayToString(bad.toArray())); |
| } |
| }</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/nntpserver/NNTPHandler.java</td><td><a href="./xref/org/apache/james/nntpserver/NNTPHandler.html#941">941</a></td></tr><tr class="a"><td>org/apache/james/nntpserver/NNTPHandler.java</td><td><a href="./xref/org/apache/james/nntpserver/NNTPHandler.html#1140">1140</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> writeLoggedResponse(respBuffer.toString()); |
| } |
| } else { |
| int newArticleNumber = currentArticleNumber; |
| if ( group == null ) { |
| writeLoggedFlushedResponse("412 no newsgroup selected"); |
| return; |
| } else { |
| if ( param == null ) { |
| if ( currentArticleNumber < 0 ) { |
| writeLoggedFlushedResponse("420 no current article selected"); |
| return; |
| } else { |
| article = group.getArticle(currentArticleNumber); |
| } |
| } |
| else { |
| newArticleNumber = Integer.parseInt(param); |
| article = group.getArticle(newArticleNumber); |
| } |
| if ( article == null ) { |
| writeLoggedFlushedResponse("423 no such article number in this group"); |
| return; |
| } else { |
| currentArticleNumber = newArticleNumber; |
| String articleID = article.getUniqueID(); |
| if (articleID == null) { |
| articleID = "<0>"; |
| } |
| StringBuffer respBuffer = |
| new StringBuffer(128) |
| .append("220 ")</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/AbstractRedirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/AbstractRedirect.html#1033">1033</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/DSNBounce.java</td><td><a href="./xref/org/apache/james/transport/mailets/DSNBounce.html#223">223</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> setRecipients(newMail, getRecipients(originalMail), originalMail); |
| setTo(newMail, getTo(originalMail), originalMail); |
| setSubjectPrefix(newMail, getSubjectPrefix(originalMail), originalMail); |
| if(newMail.getMessage().getHeader(RFC2822Headers.DATE) == null) { |
| newMail.getMessage().setHeader(RFC2822Headers.DATE,rfc822DateFormat.format(new Date())); |
| } |
| setReplyTo(newMail, getReplyTo(originalMail), originalMail); |
| setReversePath(newMail, getReversePath(originalMail), originalMail); |
| setSender(newMail, getSender(originalMail), originalMail); |
| setIsReply(newMail, isReply(originalMail), originalMail); |
| |
| newMail.getMessage().saveChanges();</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/util/SqlResources.java</td><td><a href="./xref/org/apache/james/util/SqlResources.html#138">138</a></td></tr><tr class="a"><td>org/apache/james/util/XMLResources.java</td><td><a href="./xref/org/apache/james/util/XMLResources.html#142">142</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> .append(group) |
| .append("\' does not exist."); |
| throw new RuntimeException(exceptionBuffer.toString()); |
| } |
| |
| // Get parameters defined within the file as defaults, |
| // and use supplied parameters as overrides. |
| Map parameters = new HashMap(); |
| // First read from the <params> element, if it exists. |
| Element parametersElement = |
| (Element)(sectionElement.getElementsByTagName("parameters").item(0)); |
| if ( parametersElement != null ) { |
| NamedNodeMap params = parametersElement.getAttributes(); |
| int paramCount = params.getLength(); |
| for (int i = 0; i < paramCount; i++ ) { |
| Attr param = (Attr)params.item(i); |
| String paramName = param.getName(); |
| String paramValue = param.getValue(); |
| parameters.put(paramName, paramValue); |
| } |
| } |
| // Then copy in the parameters supplied with the call. |
| parameters.putAll(configParameters); |
| |
| // 2 maps - one for storing default statements, |
| // the other for statements with a "for" attribute matching this |
| // connection. |
| Map defaultStrings = new HashMap();</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/AbstractRedirect.java</td><td><a href="./xref/org/apache/james/transport/mailets/AbstractRedirect.html#1089">1089</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/DSNBounce.java</td><td><a href="./xref/org/apache/james/transport/mailets/DSNBounce.html#585">585</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> protected String newName(Mail mail) throws MessagingException { |
| String oldName = mail.getName(); |
| |
| // Checking if the original mail name is too long, perhaps because of a |
| // loop caused by a configuration error. |
| // it could cause a "null pointer exception" in AvalonMailRepository much |
| // harder to understand. |
| if (oldName.length() > 76) { |
| int count = 0; |
| int index = 0; |
| while ((index = oldName.indexOf('!', index + 1)) >= 0) { |
| count++; |
| } |
| // It looks like a configuration loop. It's better to stop. |
| if (count > 7) { |
| throw new MessagingException("Unable to create a new message name: too long." |
| + " Possible loop in config.xml."); |
| } |
| else { |
| oldName = oldName.substring(0, 76); |
| } |
| } |
| |
| StringBuffer nameBuffer = |
| new StringBuffer(64) |
| .append(oldName) |
| .append("-!") |
| .append(random.nextInt(1048576)); |
| return nameBuffer.toString(); |
| }</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#327">327</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#479">479</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> String recipientUser = recipientMailAddress.getUser().toLowerCase(Locale.US); |
| String recipientHost = recipientMailAddress.getHost().toLowerCase(Locale.US); |
| |
| if (getMailetContext().isLocalServer(recipientHost)) { |
| // not a remote recipient, so skip |
| continue; |
| } |
| |
| if (conn == null) { |
| conn = datasource.getConnection(); |
| } |
| |
| if (selectStmt == null) { |
| selectStmt = conn.prepareStatement(selectByPK); |
| } |
| selectStmt.setString(1, senderUser); |
| selectStmt.setString(2, senderHost); |
| selectStmt.setString(3, recipientUser); |
| selectStmt.setString(4, recipientHost); |
| selectRS = selectStmt.executeQuery(); |
| if (selectRS.next()) {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/BayesianAnalysis.java</td><td><a href="./xref/org/apache/james/transport/mailets/BayesianAnalysis.html#229">229</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/BayesianAnalysisFeeder.java</td><td><a href="./xref/org/apache/james/transport/mailets/BayesianAnalysisFeeder.html#187">187</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> initDb(); |
| |
| } |
| |
| private void initDb() throws MessagingException { |
| |
| try { |
| ServiceManager serviceManager = (ServiceManager) getMailetContext().getAttribute(Constants.AVALON_COMPONENT_MANAGER); |
| |
| // Get the DataSourceSelector block |
| DataSourceSelector datasources = (DataSourceSelector) serviceManager.lookup(DataSourceSelector.ROLE); |
| |
| // Get the data-source required. |
| int stindex = repositoryPath.indexOf("://") + 3; |
| |
| String datasourceName = repositoryPath.substring(stindex); |
| |
| datasource = (DataSourceComponent) datasources.select(datasourceName); |
| } catch (Exception e) { |
| throw new MessagingException("Can't get datasource", e); |
| } |
| |
| try { |
| analyzer.initSqlQueries(datasource.getConnection(), getMailetContext()); |
| } catch (Exception e) { |
| throw new MessagingException("Exception initializing queries", e); |
| } </pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/JDBCAlias.java</td><td><a href="./xref/org/apache/james/transport/mailets/JDBCAlias.html#87">87</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/JDBCVirtualUserTable.java</td><td><a href="./xref/org/apache/james/transport/mailets/JDBCVirtualUserTable.html#125">125</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> try { |
| ServiceManager componentManager = (ServiceManager)getMailetContext().getAttribute(Constants.AVALON_COMPONENT_MANAGER); |
| // Get the DataSourceSelector service |
| DataSourceSelector datasources = (DataSourceSelector)componentManager.lookup(DataSourceSelector.ROLE); |
| // Get the data-source required. |
| datasource = (DataSourceComponent)datasources.select(datasourceName); |
| |
| conn = datasource.getConnection(); |
| |
| // Check if the required table exists. If not, complain. |
| DatabaseMetaData dbMetaData = conn.getMetaData(); |
| // Need to ask in the case that identifiers are stored, ask the DatabaseMetaInfo. |
| // Try UPPER, lower, and MixedCase, to see if the table is there. |
| if (!(theJDBCUtil.tableExists(dbMetaData, tableName))) { |
| StringBuffer exceptionBuffer = |
| new StringBuffer(128) |
| .append("Could not find table '") |
| .append(tableName) |
| .append("' in datasource '") |
| .append(datasourceName) |
| .append("'"); |
| throw new MailetException(exceptionBuffer.toString()); |
| }</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#327">327</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/WhiteListManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/WhiteListManager.html#602">602</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> String recipientUser = recipientMailAddress.getUser().toLowerCase(Locale.US); |
| String recipientHost = recipientMailAddress.getHost().toLowerCase(Locale.US); |
| |
| if (getMailetContext().isLocalServer(recipientHost)) { |
| // not a remote recipient, so skip |
| continue; |
| } |
| |
| if (conn == null) { |
| conn = datasource.getConnection(); |
| } |
| |
| if (selectStmt == null) { |
| selectStmt = conn.prepareStatement(selectByPK); |
| } |
| selectStmt.setString(1, senderUser); |
| selectStmt.setString(2, senderHost); |
| selectStmt.setString(3, recipientUser); |
| selectStmt.setString(4, recipientHost); |
| selectRS = selectStmt.executeQuery(); |
| if (!selectRS.next()) {</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/mailrepository/JDBCMailRepository.java</td><td><a href="./xref/org/apache/james/mailrepository/JDBCMailRepository.html#620">620</a></td></tr><tr class="a"><td>org/apache/james/mailrepository/JDBCMailRepository.java</td><td><a href="./xref/org/apache/james/mailrepository/JDBCMailRepository.html#724">724</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| ObjectOutputStream oos = new ObjectOutputStream(baos); |
| try { |
| if (mc instanceof MailImpl) { |
| oos.writeObject(((MailImpl)mc).getAttributesRaw()); |
| } else { |
| HashMap temp = new HashMap(); |
| for (Iterator i = mc.getAttributeNames(); i.hasNext(); ) { |
| String hashKey = (String) i.next(); |
| temp.put(hashKey,mc.getAttribute(hashKey)); |
| } |
| oos.writeObject(temp); |
| } |
| oos.flush(); |
| ByteArrayInputStream attrInputStream = |
| new ByteArrayInputStream(baos.toByteArray());</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/pop3server/POP3Handler.java</td><td><a href="./xref/org/apache/james/pop3server/POP3Handler.html#904">904</a></td></tr><tr class="a"><td>org/apache/james/pop3server/POP3Handler.java</td><td><a href="./xref/org/apache/james/pop3server/POP3Handler.html#984">984</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> writeMessageContentTo(mc.getMessage(),nouts,lines); |
| nouts.flush(); |
| edouts.checkCRLFTerminator(); |
| edouts.flush(); |
| } finally { |
| out.println("."); |
| out.flush(); |
| } |
| } else { |
| StringBuffer responseBuffer = |
| new StringBuffer(64) |
| .append(ERR_RESPONSE) |
| .append(" Message (") |
| .append(num) |
| .append(") already deleted."); |
| responseString = responseBuffer.toString(); |
| writeLoggedFlushedResponse(responseString); |
| } |
| } catch (IOException ioe) { |
| responseString = ERR_RESPONSE + " Error while retrieving message."; |
| writeLoggedFlushedResponse(responseString); |
| } catch (MessagingException me) { |
| responseString = ERR_RESPONSE + " Error while retrieving message."; |
| writeLoggedFlushedResponse(responseString); |
| } catch (IndexOutOfBoundsException iob) { |
| StringBuffer exceptionBuffer =</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/smtpserver/DataCmdHandler.java</td><td><a href="./xref/org/apache/james/smtpserver/DataCmdHandler.html#150">150</a></td></tr><tr class="a"><td>org/apache/james/smtpserver/SendMailHandler.java</td><td><a href="./xref/org/apache/james/smtpserver/SendMailHandler.html#95">95</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> StringBuffer errorBuffer = |
| new StringBuffer(256) |
| .append("Rejected message from ") |
| .append(session.getState().get(SMTPSession.SENDER).toString()) |
| .append(" from host ") |
| .append(session.getRemoteHost()) |
| .append(" (") |
| .append(session.getRemoteIPAddress()) |
| .append(") exceeding system maximum message size of ") |
| .append(session.getConfigurationData().getMaxMessageSize()); |
| getLogger().error(errorBuffer.toString()); |
| } else { |
| responseString = "451 "+DSNStatus.getStatus(DSNStatus.TRANSIENT,DSNStatus.UNDEFINED_STATUS)+" Error processing message.";</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/util/SqlResources.java</td><td><a href="./xref/org/apache/james/util/SqlResources.html#303">303</a></td></tr><tr class="a"><td>org/apache/james/util/XMLResources.java</td><td><a href="./xref/org/apache/james/util/XMLResources.html#278">278</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> static private String substituteSubString( String input, |
| String find, |
| String replace ) |
| { |
| int find_length = find.length(); |
| int replace_length = replace.length(); |
| |
| StringBuffer output = new StringBuffer(input); |
| int index = input.indexOf(find); |
| int outputOffset = 0; |
| |
| while ( index > -1 ) { |
| output.replace(index + outputOffset, index + outputOffset + find_length, replace); |
| outputOffset = outputOffset + (replace_length - find_length); |
| |
| index = input.indexOf(find, index + find_length); |
| } |
| |
| String result = output.toString(); |
| return result; |
| } |
| |
| /** |
| * Returns a named string for the specified key. |
| * |
| * @param name the name of the String resource required. |
| * @return the requested resource |
| */ |
| public String getString(String name)</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/transport/mailets/CommandListservManager.java</td><td><a href="./xref/org/apache/james/transport/mailets/CommandListservManager.html#416">416</a></td></tr><tr class="a"><td>org/apache/james/transport/mailets/CommandListservProcessor.java</td><td><a href="./xref/org/apache/james/transport/mailets/CommandListservProcessor.html#518">518</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> } |
| |
| /** |
| * Retrieves a data field, potentially defined by a super class. |
| * @return null if not found, the object otherwise |
| */ |
| protected static Object getField(Object instance, String name) throws IllegalAccessException { |
| Class clazz = instance.getClass(); |
| Field[] fields; |
| while (clazz != null) { |
| fields = clazz.getDeclaredFields(); |
| for (int index = 0; index < fields.length; index++) { |
| Field field = fields[index]; |
| if (field.getName().equals(name)) { |
| field.setAccessible(true); |
| return field.get(instance); |
| } |
| } |
| clazz = clazz.getSuperclass(); |
| } |
| |
| return null; |
| }</pre></div></td></tr><table class="bodyTable"></p><p><table class="bodyTable"><tr class="a"><th>File</th><th>Line</th></tr><tr class="b"><td>org/apache/james/pop3server/POP3Handler.java</td><td><a href="./xref/org/apache/james/pop3server/POP3Handler.html#570">570</a></td></tr><tr class="a"><td>org/apache/james/pop3server/POP3Handler.java</td><td><a href="./xref/org/apache/james/pop3server/POP3Handler.html#613">613</a></td></tr><tr class="b"><td colspan='2'><div class="source"><pre> if (argument == null) { |
| long size = 0; |
| int count = 0; |
| try { |
| for (Iterator i = userMailbox.iterator(); i.hasNext(); ) { |
| Mail mc = (Mail) i.next(); |
| if (mc != DELETED) { |
| size += mc.getMessageSize(); |
| count++; |
| } |
| } |
| StringBuffer responseBuffer = |
| new StringBuffer(32) |
| .append(OK_RESPONSE) |
| .append(" ") |
| .append(count) |
| .append(" ") |
| .append(size); |
| responseString = responseBuffer.toString(); |
| writeLoggedFlushedResponse(responseString);</pre></div></td></tr><table class="bodyTable"></p></div> |
| </div> |
| </div> |
| <div class="clear"> |
| <hr/> |
| </div> |
| <div id="footer"> |
| <div class="xright">© |
| 2002-2009 |
| |
| The Apache Software Foundation |
| |
| |
| |
| |
| |
| |
| |
| </div> |
| <div class="clear"> |
| <hr/> |
| </div> |
| </div> |
| <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> |
| </script> |
| <script type="text/javascript"> |
| _uacct = "UA-1384591-1"; |
| urchinTracker(); |
| </script> |
| </body> |
| </html> |