- implemented change pop/imap password
git-svn-id: file:///home/www/usr01/svn/gnuviechadmin/gnuviech.info/gnuviechadmin/trunk@136 a67ec6bc-e5d5-0310-a910-815c51eb3124
This commit is contained in:
parent
cab6f70ec8
commit
da5aa67ac9
2 changed files with 69 additions and 2 deletions
59
backend/changepoppassword.py
Executable file
59
backend/changepoppassword.py
Executable file
|
@ -0,0 +1,59 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import psycopg, getopt, sys
|
||||
|
||||
from gvadm import PasswordTools, DomainTools
|
||||
|
||||
def usage():
|
||||
print """Usage information:
|
||||
=====================
|
||||
%(process)s -h|--help
|
||||
- prints this help text
|
||||
|
||||
%(process)s --domain=<domain> --user=<user> [--password=<password>]
|
||||
- updates the password of a pop user for the given domain
|
||||
- if the optional password is ommitted a generated one is used
|
||||
- the password is checked using cracklib
|
||||
- if the password is too weak a generated one is used
|
||||
""" % {'process': sys.argv[0]}
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
options = getopt.getopt(sys.argv[1:], "h", ['help', 'password=',
|
||||
'domain=', 'user='])
|
||||
except getopt.GetoptError:
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
if (not options[0] or
|
||||
dict(options[0]).has_key('-h') or
|
||||
dict(options[0]).has_key('--help') or
|
||||
not dict(options[0]).has_key('--domain') or
|
||||
not dict(options[0])['--domain'].strip() or
|
||||
not dict(options[0]).has_key('--user') or
|
||||
not dict(options[0])['--user'].strip()):
|
||||
usage()
|
||||
sys.exit(1)
|
||||
|
||||
# specify the domain
|
||||
domain = None
|
||||
try:
|
||||
domain = DomainTools.Domain(dict(options[0])['--domain'])
|
||||
except DomainTools.InvalidDomain, iv:
|
||||
print iv
|
||||
sys.exit(1)
|
||||
|
||||
username = dict(options[0])['--user']
|
||||
if not domain.hasPopUser(username):
|
||||
print "Domain doesn't have pop user", username
|
||||
sys.exit(1)
|
||||
|
||||
# specify the password
|
||||
password = None
|
||||
|
||||
if dict(options[0]).has_key('--password'):
|
||||
password = PasswordTools.check_password(dict(options[0])['--password'])
|
||||
if (password == None):
|
||||
password = PasswordTools.generate_password()
|
||||
|
||||
domain.updatePopPassword(username, password)
|
|
@ -143,12 +143,20 @@ Password: %(password)s""" % {'domain': self.domain,
|
|||
|
||||
def hasPopUser(self, username):
|
||||
"""Checks whether the specified POP3/IMAP user exists in the domain."""
|
||||
return ([user for user in domain.listPopUsers() if (user == username)])
|
||||
return ([user for user in self.listPopUsers() if (user == username)])
|
||||
|
||||
def updatePopPassword(self, username, password=PasswordTools.generate_password()):
|
||||
"""Updates the password of the given POP3/IMAP user."""
|
||||
if self.hasPopUser(username):
|
||||
print("will update password of user %s to %s" % (username, password))
|
||||
crypted = PasswordTools.md5_crypt_password(password)
|
||||
|
||||
cr = self.cnx.cursor()
|
||||
cr.execute("UPDATE mailpasswd SET clear=%(clear)s, crypt=%(crypt)s WHERE id=%(user)s" % {
|
||||
'clear': psycopg.QuotedString(password),
|
||||
'crypt': psycopg.QuotedString(crypted),
|
||||
'user': psycopg.QuotedString(username)})
|
||||
self.cnx.commit()
|
||||
print("updated password of user %s to %s" % (username, password))
|
||||
else:
|
||||
raise InvalidPopUser(self, username)
|
||||
|
||||
|
|
Loading…
Reference in a new issue