Jan Dittberner
a7edeca826
- better code structure - class for domain - class for preferences - password generation function git-svn-id: file:///home/www/usr01/svn/gnuviechadmin/gnuviech.info/gnuviechadmin/trunk@82 a67ec6bc-e5d5-0310-a910-815c51eb3124
101 lines
3.2 KiB
Python
101 lines
3.2 KiB
Python
"""Package for GNUViech Admin main types and functions
|
|
|
|
(c) Copyright 2004 Jan Dittberner, IT-Consulting & Solutions
|
|
Germany
|
|
"""
|
|
|
|
import os
|
|
import gnuviech
|
|
|
|
class DomainNotExistentError(Exception): pass
|
|
|
|
class DomainFileNotExistentError(Exception): pass
|
|
|
|
class GNVDomain:
|
|
"""Represents a domain in the GNUViech admin tool"""
|
|
|
|
def __init__(self, domain):
|
|
"""Initializes the domain object"""
|
|
self.name = domain
|
|
try:
|
|
self.findUser()
|
|
except gnuviech.NoAdmDirError:
|
|
gnuviech.setupDirs()
|
|
self.__init__(domain)
|
|
except DomainFileNotExistentError:
|
|
self.createDomainFile()
|
|
self.__init__(domain)
|
|
except DomainNotExistentError:
|
|
self.createUser()
|
|
|
|
def __repr__(self):
|
|
retval = "Domain "+self.name
|
|
if not self.username is None:
|
|
retval += ", User "+self.username
|
|
else:
|
|
retval += ", new domain"
|
|
return retval
|
|
|
|
def createDomainFile(self):
|
|
"""Create the domain user id map file."""
|
|
file = open(gnuviech.GNVPrefs.GVADMDIR+"domains", "w")
|
|
file.close()
|
|
|
|
def createUser(self):
|
|
"""Create a user for the domain."""
|
|
file = open(gnuviech.GNVPrefs.GVADMDIR+"domains", "r")
|
|
id = 0
|
|
for line in file.readlines():
|
|
(key, value) = line.split(":")
|
|
if (int(value) > id): id = int(value)
|
|
file.close()
|
|
id += 1
|
|
file = open(gnuviech.GNVPrefs.GVADMDIR+"domains", "a")
|
|
file.write("%s:%d\n" % (self.name, id))
|
|
file.close()
|
|
self.findUser()
|
|
|
|
def findUser(self):
|
|
"""Finds the user for the domain."""
|
|
self.username = None
|
|
if (os.access(gnuviech.GNVPrefs.GVADMDIR, os.R_OK)):
|
|
try:
|
|
domainsfile = open(gnuviech.GNVPrefs.GVADMDIR+"domains", "r")
|
|
for line in domainsfile.readlines():
|
|
(key, value) = line.split(":")
|
|
if (key == self.name):
|
|
self.username = "%s%02d" % (
|
|
gnuviech.GNVPrefs.USERPREFIX,
|
|
int(value))
|
|
domainsfile.close()
|
|
if self.username is None:
|
|
raise DomainNotExistentError
|
|
except IOError:
|
|
raise DomainFileNotExistentError
|
|
else:
|
|
raise gnuviech.NoAdmDirError
|
|
|
|
def getMaxPop3Id(self):
|
|
maxid = 0
|
|
try:
|
|
passwdfile = open(gnuviech.GNVPrefs.BASEPREFIX+"/etc/passwd", "r")
|
|
for line in passwdfile.readlines():
|
|
(login, passwd, uid, gid, name, dir, shell) = line.split(":")
|
|
if login.startswith(self.username + "p"):
|
|
id = int(login[len(self.username):])
|
|
print id
|
|
if (id > maxid): maxid = id
|
|
except IOError:
|
|
pass
|
|
return maxid
|
|
|
|
def getNextUser(self, usertype):
|
|
"""Gets the next user for the given type."""
|
|
if (usertype == "web"):
|
|
return self.username
|
|
if (usertype == "pop3"):
|
|
return "%sp%d" % (self.username, self.getMaxPop3Id()+1)
|
|
|
|
if __name__ == "__main__":
|
|
dom = GNVDomain("dittberner.info")
|
|
print dom
|