diff --git a/generate-ftp-passwd.py b/generate-ftp-passwd.py
new file mode 100644
index 0000000..26d4bcd
--- /dev/null
+++ b/generate-ftp-passwd.py
@@ -0,0 +1,58 @@
+#!/bin/env python
+
+import os
+import sys
+import glob
+
+os.environ['DJANGO_SETTINGS_MODULE'] = 'docbow_project.pw.settings'
+
+from django.template.defaultfilters import slugify
+from django.contrib.auth.models import User
+from docbow_project.docbow.models import MailingList
+from django.conf import settings
+
+password_file, group_file, proftpd_conf = sys.argv[1:4]
+
+with file(password_file, 'w') as f:
+ for user in User.objects.all():
+ print >>f, '%s:*:108:111::/srv/ftp:/bin/false' % user.username
+
+
+with file(group_file, 'w') as f:
+ for ml in MailingList.objects.all():
+ name = ''
+ print >>f, '%s:*:50:' % slugify(ml.name),
+ users = [user.username for user in ml.recursive_members()]
+ users = u','.join(users)
+ print >>f, users
+
+with file(proftpd_conf, 'w') as f:
+ print >>f, '''
+
+
+ AllowGroup greffe
+ DenyAll
+
+
+'''
+ names = set()
+ for ml in MailingList.objects.all():
+ name = slugify(ml.name)
+ names.add(str(name))
+ path = '/srv/ftp/%s' % name
+ if not os.path.exists(path):
+ print 'Creating', path
+ os.makedirs(path)
+ print >>f, '''
+
+ AllowGroup OR greffe,{name}
+ DenyAll
+
+'''.format(name=name, path=path)
+ for directory in glob.glob('/srv/ftp/*'):
+ if not os.path.isdir(directory):
+ continue
+ if not os.path.basename(directory) in names:
+ print 'Orphan directory', directory, ': not mailing exists for this directory'
+
+