102 lines
3.2 KiB
Python
102 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
|