# HG changeset patch
# User cli
# Date 1315755407 -7200
# Node ID 0bf10add82d99bcde320a0d52de6db1c637b962f
# Parent 8df94bfd3e2f943cebeafe2224e88aced804fd99
Fix for issue #17. Error when posting to mailinglist is now reported back to user as NNTP error.
diff -r 8df94bfd3e2f -r 0bf10add82d9 src/org/sonews/daemon/command/PostCommand.java
--- a/src/org/sonews/daemon/command/PostCommand.java Sun Sep 11 17:01:19 2011 +0200
+++ b/src/org/sonews/daemon/command/PostCommand.java Sun Sep 11 17:36:47 2011 +0200
@@ -22,6 +22,7 @@
import java.io.ByteArrayOutputStream;
import java.sql.SQLException;
import java.util.Arrays;
+import java.util.logging.Level;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetHeaders;
@@ -110,8 +111,8 @@
// add the header entries for the article
article.setHeaders(headers);
- } catch (MessagingException e) {
- e.printStackTrace();
+ } catch (MessagingException ex) {
+ Log.get().log(Level.INFO, ex.getLocalizedMessage(), ex);
conn.println("500 posting failed - invalid header");
state = PostState.Finished;
break;
@@ -213,8 +214,7 @@
controlMessage(conn, article);
} else if (article.getHeader(Headers.SUPERSEDES)[0].length() > 0) {
supersedeMessage(conn, article);
- } else // Post the article regularily
- {
+ } else { // Post the article regularily
// Circle check; note that Path can already contain the hostname here
String host = Config.inst().get(Config.HOSTNAME, "localhost");
if (article.getHeader(Headers.PATH)[0].indexOf(host + "!", 1) > 0) {
@@ -234,8 +234,7 @@
if (group.isMailingList() && !conn.isLocalConnection()) {
// Send to mailing list; the Dispatcher writes
// statistics to database
- Dispatcher.toList(article, group.getName());
- success = true;
+ success = Dispatcher.toList(article, group.getName());
} else {
// Store in database
if (!StorageManager.current().isArticleExisting(article.getMessageID())) {
@@ -254,7 +253,7 @@
conn.println("240 article posted ok");
FeedManager.queueForPush(article);
} else {
- conn.println("441 newsgroup not found");
+ conn.println("441 newsgroup not found or configuration error");
}
} catch (AddressException ex) {
Log.get().warning(ex.getMessage());
diff -r 8df94bfd3e2f -r 0bf10add82d9 src/org/sonews/mlgw/Dispatcher.java
--- a/src/org/sonews/mlgw/Dispatcher.java Sun Sep 11 17:01:19 2011 +0200
+++ b/src/org/sonews/mlgw/Dispatcher.java Sun Sep 11 17:36:47 2011 +0200
@@ -15,12 +15,12 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-
package org.sonews.mlgw;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.logging.Level;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.mail.Address;
@@ -43,19 +43,16 @@
* @author Christian Lins
* @since sonews/0.5.0
*/
-public class Dispatcher
-{
+public class Dispatcher {
- static class PasswordAuthenticator extends Authenticator
- {
+ static class PasswordAuthenticator extends Authenticator {
@Override
- public PasswordAuthentication getPasswordAuthentication()
- {
+ public PasswordAuthentication getPasswordAuthentication() {
final String username =
- Config.inst().get(Config.MLSEND_USER, "user");
+ Config.inst().get(Config.MLSEND_USER, "user");
final String password =
- Config.inst().get(Config.MLSEND_PASSWORD, "mysecret");
+ Config.inst().get(Config.MLSEND_PASSWORD, "mysecret");
return new PasswordAuthentication(username, password);
}
@@ -66,8 +63,7 @@
* @param listPostValue
* @return The matching email address or null
*/
- private static String chunkListPost(String listPostValue)
- {
+ private static String chunkListPost(String listPostValue) {
// listPostValue is of form ""
Pattern mailPattern = Pattern.compile("(\\w+[-|.])*\\w+@(\\w+.)+\\w+");
Matcher mailMatcher = mailPattern.matcher(listPostValue);
@@ -87,8 +83,7 @@
* @return null or fitting group name for the given message.
*/
private static List getGroupFor(final Message msg, final boolean fallback)
- throws MessagingException, StorageBackendException
- {
+ throws MessagingException, StorageBackendException {
List groups = null;
// Is there a List-Post header?
@@ -101,13 +96,16 @@
}
if (listPost != null && listPost.length > 0
- && !"".equals(listPost[0]) && chunkListPost(listPost[0]) != null) {
+ && !"".equals(listPost[0]) && chunkListPost(listPost[0]) != null) {
// listPost[0] is of form ""
listPost[0] = chunkListPost(listPost[0]);
listPostAddr = new InternetAddress(listPost[0], false);
groups = StorageManager.current().getGroupsForList(listPostAddr.getAddress());
} else if (fallback) {
- Log.get().info("Using fallback recipient discovery for: " + msg.getSubject());
+ StringBuilder strBuf = new StringBuilder();
+ strBuf.append("Using fallback recipient discovery for: ");
+ strBuf.append(msg.getSubject());
+ Log.get().info(strBuf.toString());
groups = new ArrayList();
// Fallback to TO/CC/BCC addresses
Address[] to = msg.getAllRecipients();
@@ -131,8 +129,7 @@
* crosspostings in different mailing lists.
* @param msg
*/
- public static boolean toGroup(final Message msg)
- {
+ public static boolean toGroup(final Message msg) {
if (msg == null) {
throw new IllegalArgumentException("Argument 'msg' must not be null!");
}
@@ -144,7 +141,7 @@
// Check if this mail is already existing the storage
boolean updateReq =
- StorageManager.current().isArticleExisting(article.getMessageID());
+ StorageManager.current().isArticleExisting(article.getMessageID());
List newsgroups = getGroupFor(msg, !updateReq);
List oldgroups = new ArrayList();
@@ -170,7 +167,11 @@
groups.append(',');
}
}
- Log.get().info("Posting to group " + groups.toString());
+
+ StringBuilder strBuf = new StringBuilder();
+ strBuf.append("Posting to group ");
+ strBuf.append(groups.toString());
+ Log.get().info(strBuf.toString());
article.setGroup(groups.toString());
//article.removeHeader(Headers.REPLY_TO);
@@ -179,15 +180,15 @@
// Write article to database
if (updateReq) {
Log.get().info("Updating " + article.getMessageID()
- + " with additional groups");
+ + " with additional groups");
StorageManager.current().delete(article.getMessageID());
StorageManager.current().addArticle(article);
} else {
Log.get().info("Gatewaying " + article.getMessageID() + " to "
- + article.getHeader(Headers.NEWSGROUPS)[0]);
+ + article.getHeader(Headers.NEWSGROUPS)[0]);
StorageManager.current().addArticle(article);
Stats.getInstance().mailGatewayed(
- article.getHeader(Headers.NEWSGROUPS)[0]);
+ article.getHeader(Headers.NEWSGROUPS)[0]);
}
posted = true;
} else {
@@ -196,12 +197,13 @@
buf.append(' ');
buf.append(toa.toString());
}
- buf.append(" " + article.getHeader(Headers.LIST_POST)[0]);
+ buf.append(" ");
+ buf.append(article.getHeader(Headers.LIST_POST)[0]);
Log.get().warning("No group for" + buf.toString());
}
return posted;
} catch (Exception ex) {
- ex.printStackTrace();
+ Log.get().log(Level.WARNING, ex.getLocalizedMessage(), ex);
return false;
}
}
@@ -211,15 +213,17 @@
* This method MAY be called several times by PostCommand for the same
* article.
*/
- public static void toList(Article article, String group)
- throws IOException, MessagingException, StorageBackendException
- {
+ public static boolean toList(Article article, String group)
+ throws IOException, MessagingException, StorageBackendException {
// Get mailing lists for the group of this article
List rcptAddresses = StorageManager.current().getListsForGroup(group);
- if (rcptAddresses == null || rcptAddresses.size() == 0) {
- Log.get().warning("No ML-address for " + group + " found.");
- return;
+ if (rcptAddresses == null || rcptAddresses.isEmpty()) {
+ StringBuilder strBuf = new StringBuilder();
+ strBuf.append("No ML address found for group ");
+ strBuf.append(group);
+ Log.get().warning(strBuf.toString());
+ return false;
}
for (String rcptAddress : rcptAddresses) {
@@ -229,7 +233,7 @@
String smtpUser = Config.inst().get(Config.MLSEND_USER, "user");
String smtpPw = Config.inst().get(Config.MLSEND_PASSWORD, "mysecret");
String smtpFrom = Config.inst().get(
- Config.MLSEND_ADDRESS, article.getHeader(Headers.FROM)[0]);
+ Config.MLSEND_ADDRESS, article.getHeader(Headers.FROM)[0]);
// TODO: Make Article cloneable()
article.getMessageID(); // Make sure an ID is existing
@@ -251,8 +255,9 @@
Stats.getInstance().mailGatewayed(group);
Log.get().info("MLGateway: Mail " + article.getHeader("Subject")[0]
- + " was delivered to " + rcptAddress + ".");
+ + " was delivered to " + rcptAddress + ".");
}
+ return true;
}
/**
@@ -262,8 +267,7 @@
* @throws javax.mail.MessagingException
*/
private static void rewriteSenderAddress(Article msg)
- throws MessagingException
- {
+ throws MessagingException {
String mlAddress = Config.inst().get(Config.MLSEND_ADDRESS, null);
if (mlAddress != null) {
diff -r 8df94bfd3e2f -r 0bf10add82d9 src/org/sonews/storage/impl/JDBCDatabase.java
--- a/src/org/sonews/storage/impl/JDBCDatabase.java Sun Sep 11 17:01:19 2011 +0200
+++ b/src/org/sonews/storage/impl/JDBCDatabase.java Sun Sep 11 17:36:47 2011 +0200
@@ -49,10 +49,9 @@
* @since sonews/0.5.0
*/
// TODO: Refactor this class to reduce size (e.g. ArticleDatabase GroupDatabase)
-public class JDBCDatabase implements Storage
-{
+public class JDBCDatabase implements Storage {
+ public static final int MAX_RESTARTS = 2;
- public static final int MAX_RESTARTS = 2;
protected Connection conn = null;
protected PreparedStatement pstmtAddArticle1 = null;
protected PreparedStatement pstmtAddArticle2 = null;