Author: alexlehm Date: 2008-01-11 15:28:37 +0000 (Fri, 11 Jan 2008) New Revision: 17010
Modified: trunk/apps/Freemail/src/freemail/AccountManager.java trunk/apps/Freemail/src/freemail/FreemailCli.java trunk/apps/Freemail/src/freemail/FreemailPlugin.java trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java Log: 1745: freemail accepts "@" as short address char (https://bugs.freenetproject.org/view.php?id=1745) and 1843: @-character allowed in account name -> Thunderbird/Evolution won't connect (https://bugs.freenetproject.org/view.php?id=1843) validate username and short address agains list of invalid chars (still rather lenient, but it should catch common errors) Modified: trunk/apps/Freemail/src/freemail/AccountManager.java =================================================================== --- trunk/apps/Freemail/src/freemail/AccountManager.java 2008-01-11 14:10:33 UTC (rev 17009) +++ trunk/apps/Freemail/src/freemail/AccountManager.java 2008-01-11 15:28:37 UTC (rev 17010) @@ -64,10 +64,34 @@ public static final String MAILSITE_SUFFIX = "mailsite"; public static final String MAILSITE_VERSION = "-1"; + + // avoid invalid chars in username or address + // returns the first invalid char to give user a hint + private static String validateChars(String username, String invalid) { + for(int i=0;i<invalid.length();i++) { + if(username.indexOf(invalid.substring(i,i+1))>=0) { + return invalid.substring(i,i+1); + } + } + return ""; + } + + // @ plus chars that may be invalid as filenames + public static String validateUsername(String username) { + return validateChars(username, "@\'\"\\/ :"); + } + + // @, space and other email meta chars + public static String validateShortAddress(String username) { + return validateChars(username, "@\'\"\\/,:%()+ "); + } - - public static void Create(String username) throws IOException { + public static void Create(String username) throws IOException,IllegalArgumentException { File datadir = new File(DATADIR); + String invalid=validateUsername(username); + if(!invalid.isEmpty()) { + throw new IllegalArgumentException("The username may not contain the character '"+invalid+"'"); + } if (!datadir.exists()) { if (!datadir.mkdir()) throw new IOException("Failed to create data directory"); } @@ -241,6 +265,11 @@ if (!accountdir.exists()) { throw new Exception("No such account - "+username+"."); } + + String invalid=validateShortAddress(alias); + if(!invalid.isEmpty()) { + throw new IllegalArgumentException("The short address may not contain the character '"+invalid+"'"); + } PropsFile accfile = getAccountFile(accountdir); Modified: trunk/apps/Freemail/src/freemail/FreemailCli.java =================================================================== --- trunk/apps/Freemail/src/freemail/FreemailCli.java 2008-01-11 14:10:33 UTC (rev 17009) +++ trunk/apps/Freemail/src/freemail/FreemailCli.java 2008-01-11 15:28:37 UTC (rev 17010) @@ -109,6 +109,8 @@ //System.out.println("For the time being, you address is "+account+"@nim.freemail"); } catch (IOException ioe) { System.out.println("Couldn't create account. Please check write access to Freemail's working directory. If you want to overwrite your account, delete the appropriate directory manually in 'data' first. Freemail will intentionally not overwrite it. Error: "+ioe.getMessage()); + } catch (IllegalArgumentException iae) { + System.out.println("Couldn't create account. Error: "+iae.getMessage()); } return; } else if (action.equals("--passwd")) { @@ -123,6 +125,9 @@ } else if (action.equals("--shortaddress")) { try { AccountManager.addShortAddress(account, alias); + } catch (IllegalArgumentException iae) { + System.out.println("Couldn't add short address for "+account+". Error: "+iae.getMessage()); + return; } catch (Exception e) { System.out.println("Couldn't add short address for "+account+". "+e.getMessage()); e.printStackTrace(); @@ -161,6 +166,10 @@ continue; if (!files[i].isDirectory()) continue; + if(!AccountManager.validateUsername(files[i].getName()).isEmpty()) { + System.out.println("Account name "+files[i].getName()+" contains invalid chars, you may get problems accessing the account."); + } + Thread t = new Thread(new SingleAccountWatcher(files[i]), "Account Watcher for "+files[i].getName()); t.setDaemon(true); t.start(); Modified: trunk/apps/Freemail/src/freemail/FreemailPlugin.java =================================================================== --- trunk/apps/Freemail/src/freemail/FreemailPlugin.java 2008-01-11 14:10:33 UTC (rev 17009) +++ trunk/apps/Freemail/src/freemail/FreemailPlugin.java 2008-01-11 15:28:37 UTC (rev 17010) @@ -101,6 +101,11 @@ if (files[i].getName().equals(".") || files[i].getName().equals("..")) continue; if (!files[i].isDirectory()) continue; + + String invalid=AccountManager.validateUsername(files[i].getName()); + if(!invalid.isEmpty()) { + Logger.error(this,"Account name "+files[i].getName()+" contains invalid chars (\""+invalid+"\"), you may get problems accessing the account."); + } SingleAccountWatcher saw = new SingleAccountWatcher(files[i]); singleAccountWatcherList.add(saw); Modified: trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java =================================================================== --- trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java 2008-01-11 14:10:33 UTC (rev 17009) +++ trunk/apps/Freemail/src/freemail/SingleAccountWatcher.java 2008-01-11 15:28:37 UTC (rev 17010) @@ -86,6 +86,11 @@ String shortdomain = AccountManager.getKSKFreemailDomain(accdir); if (shortdomain != null) { Logger.normal(this,"Short Freemail address (*probably* secure): <anything>@"+shortdomain); + + String invalid=AccountManager.validateUsername(shortdomain); + if(!invalid.isEmpty()) { + Logger.normal(this,"Your short Freemail address contains invalid characters (\""+invalid+"\"), others may have problems sending you mail"); + } } else { Logger.normal(this,"You don't have a short Freemail address. You could get one by running Freemail with the --shortaddress option, followed by your account name and the name you'd like. For example, 'java -jar freemail.jar --shortaddress bob bob' will give you all addresses ending '@bob.freemail'. Try to pick something unique!"); }
