From 8a7db6ee150227cec0f777ee2e461aa4c5c38d96 Mon Sep 17 00:00:00 2001 From: "selva.andre" Date: Mon, 5 May 2014 22:53:42 +0200 Subject: [PATCH] Fixed issue #42 --- ChangeLog.txt | 3 +++ .../messaging/spi/impl/FileAuthenticator.java | 15 ++++++++++----- .../messaging/spi/impl/SimpleMessaging.java | 4 ++-- .../mqtt/moquette/server/ConfigurationParser.java | 1 + .../java/org/dna/mqtt/moquette/server/Server.java | 4 ++-- .../messaging/spi/impl/FileAuthenticatorTest.java | 12 ++++++++++-- 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 58fe477c..43bbb04e 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,6 @@ +Version 0.6: + Fix issue 42, bad password file path composition + Version 0.5: Fix issue 20 (no flush of message on PINGREQ) Fix issue 21 (bad channel timeout handler) diff --git a/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/FileAuthenticator.java b/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/FileAuthenticator.java index df6b0b9d..106f17e7 100644 --- a/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/FileAuthenticator.java +++ b/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/FileAuthenticator.java @@ -23,16 +23,21 @@ public class FileAuthenticator implements IAuthenticator { private Map m_identities = new HashMap(); - FileAuthenticator(String filePath) { - LOG.info("Loading password file: " + filePath); - File file = new File(filePath); + FileAuthenticator(String parent, String filePath) { + File file = new File(parent, filePath); + LOG.info("Loading password file: " + file); + if (file.isDirectory()) { + LOG.warn(String.format("Bad file reference %s is a directory", file)); + return; + } + try { FileReader reader = new FileReader(file); parse(reader); } catch (FileNotFoundException fex) { - LOG.warn(String.format("Parsing not existing file %s", filePath), fex); + LOG.warn(String.format("Parsing not existing file %s", file), fex); } catch (ParseException pex) { - LOG.warn(String.format("Fromat ero in parsing password file %s", filePath), pex); + LOG.warn(String.format("Fromat ero in parsing password file %s", file), pex); } } diff --git a/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java b/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java index d19ed993..774db80d 100644 --- a/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java +++ b/broker/src/main/java/org/dna/mqtt/moquette/messaging/spi/impl/SimpleMessaging.java @@ -188,8 +188,8 @@ public class SimpleMessaging implements IMessaging, EventHandler { subscriptions.init(m_storageService); String passwdPath = props.getProperty("password_file"); - String configPath = System.getProperty("moquette.path", ""); - IAuthenticator authenticator = new FileAuthenticator(configPath + passwdPath); + String configPath = System.getProperty("moquette.path", null); + IAuthenticator authenticator = new FileAuthenticator(configPath, passwdPath); m_processor.init(subscriptions, m_storageService, authenticator); } diff --git a/broker/src/main/java/org/dna/mqtt/moquette/server/ConfigurationParser.java b/broker/src/main/java/org/dna/mqtt/moquette/server/ConfigurationParser.java index d37e31b2..845bbee4 100644 --- a/broker/src/main/java/org/dna/mqtt/moquette/server/ConfigurationParser.java +++ b/broker/src/main/java/org/dna/mqtt/moquette/server/ConfigurationParser.java @@ -29,6 +29,7 @@ class ConfigurationParser { ConfigurationParser() { m_properties.put("port", Integer.toString(Constants.PORT)); m_properties.put("host", Constants.HOST); + m_properties.put("password_file", ""); } /** diff --git a/broker/src/main/java/org/dna/mqtt/moquette/server/Server.java b/broker/src/main/java/org/dna/mqtt/moquette/server/Server.java index dab5357c..b207d96b 100644 --- a/broker/src/main/java/org/dna/mqtt/moquette/server/Server.java +++ b/broker/src/main/java/org/dna/mqtt/moquette/server/Server.java @@ -40,8 +40,8 @@ public class Server { public void startServer() throws IOException { ConfigurationParser confParser = new ConfigurationParser(); try { - String configPath = System.getProperty("moquette.path", ""); - confParser.parse(new File(configPath + "config/moquette.conf")); + String configPath = System.getProperty("moquette.path", null); + confParser.parse(new File(configPath, "config/moquette.conf")); } catch (ParseException pex) { LOG.warn("An error occured in parsing configuration, fallback on default configuration", pex); } diff --git a/broker/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/FileAuthenticatorTest.java b/broker/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/FileAuthenticatorTest.java index a67973e9..fa07df39 100644 --- a/broker/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/FileAuthenticatorTest.java +++ b/broker/src/test/java/org/dna/mqtt/moquette/messaging/spi/impl/FileAuthenticatorTest.java @@ -13,7 +13,7 @@ public class FileAuthenticatorTest { @Test public void loadPasswordFile_verifyValid() { String file = getClass().getResource("/password_file.conf").getPath(); - IAuthenticator auth = new FileAuthenticator(file); + IAuthenticator auth = new FileAuthenticator(null, file); assertTrue(auth.checkValid("testuser", "passwd")); } @@ -21,8 +21,16 @@ public class FileAuthenticatorTest { @Test public void loadPasswordFile_verifyInvalid() { String file = getClass().getResource("/password_file.conf").getPath(); - IAuthenticator auth = new FileAuthenticator(file); + IAuthenticator auth = new FileAuthenticator(null, file); assertFalse(auth.checkValid("testuser2", "passwd")); } + + @Test + public void loadPasswordFile_verifyDirectoryRef() { + IAuthenticator auth = new FileAuthenticator("", ""); + + assertFalse(auth.checkValid("testuser2", "passwd")); + } + } \ No newline at end of file