bittornado is too picky about filenames within a torrent. Even harmless names, such as '...And justice for all' or '.directory' are considered 'unsafe', and bittornado stops.
Here is a patch to fix this. New regexp catches all tries to go upwards the directory tree I could imagine (~user, ../../, /etc/, etc.). Anything else is OK. Of course, one can download new .bashrc in his homedir. He could do this with wget as well. I sent it to upstream author a couple of years ago, but never got any reply.
Index: BitTornado/BT1/btformats.py =================================================================== RCS file: /cvsroot/bittornado/BitTornado/BT1/btformats.py,v retrieving revision 1.3 diff -u -r1.3 btformats.py --- BitTornado/BT1/btformats.py 25 May 2004 19:00:58 -0000 1.3 +++ BitTornado/BT1/btformats.py 20 Oct 2009 11:30:47 -0000 @@ -4,7 +4,7 @@ from types import StringType, LongType, IntType, ListType, DictType from re import compile -reg = compile(r'^[^/\\.~][^/\\]*$') +unsafe_file = compile(r'/\.\./|^~|^/|^\.\./') ints = (LongType, IntType) @@ -20,7 +20,7 @@ name = info.get('name') if type(name) != StringType: raise ValueError, 'bad metainfo - bad name' - if not reg.match(name): + if unsafe_file.search(name): raise ValueError, 'name %s disallowed for security reasons' % name if info.has_key('files') == info.has_key('length'): raise ValueError, 'single/multiple file mix' @@ -44,7 +44,7 @@ for p in path: if type(p) != StringType: raise ValueError, 'bad metainfo - bad path dir' - if not reg.match(p): + if unsafe_file.search(p): raise ValueError, 'path %s disallowed for security reasons' % p for i in xrange(len(files)): for j in xrange(i):