Code style changes
* make code PEP8 clean (addresses #18) * add copyright information to all python files git-svn-id: file:///home/www/usr01/svn/gnuviechadmin/trunk@257 a67ec6bc-e5d5-0310-a910-815c51eb3124
This commit is contained in:
parent
7c4d25da43
commit
09180938f1
45 changed files with 759 additions and 514 deletions
|
@ -1,4 +1,3 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007, 2008 by Jan Dittberner.
|
||||
|
@ -20,7 +19,9 @@
|
|||
#
|
||||
# Version: $Id$
|
||||
|
||||
import os, logging, tempfile
|
||||
import os
|
||||
import logging
|
||||
import tempfile
|
||||
|
||||
from settings import config
|
||||
from gnuviechadmin.exceptions import *
|
||||
|
@ -29,6 +30,7 @@ from subprocess import *
|
|||
import sqlalchemy
|
||||
from sqlalchemy.orm import object_mapper
|
||||
|
||||
|
||||
class BackendEntity(object):
|
||||
"""This is the abstract base class for all backend entity classes."""
|
||||
|
||||
|
@ -75,10 +77,10 @@ class BackendEntity(object):
|
|||
for cmdline in cmdlines:
|
||||
toexec = "%s %s" % (suwrapper, cmdline)
|
||||
if predecessor is None:
|
||||
p = Popen(toexec, shell = True, stdout = PIPE)
|
||||
p = Popen(toexec, shell = True, stdout = PIPE)
|
||||
else:
|
||||
p = Popen(toexec, shell = True, stdin = predecessor.stdout,
|
||||
stdout = PIPE)
|
||||
p = Popen(toexec, shell = True, stdin = predecessor.stdout,
|
||||
stdout = PIPE)
|
||||
predecessor = p
|
||||
output = predecessor.communicate()[0]
|
||||
return predecessor.wait()
|
||||
|
@ -110,4 +112,3 @@ class BackendEntity(object):
|
|||
cmd = 'cp "%s" "%s"' % (tmp.name, filename)
|
||||
self.sucommand(cmd)
|
||||
tmp.close()
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007, 2008 by Jan Dittberner.
|
||||
|
@ -20,12 +19,15 @@
|
|||
#
|
||||
# Version: $Id$
|
||||
|
||||
import sqlalchemy, logging
|
||||
import sqlalchemy
|
||||
import logging
|
||||
from sqlalchemy.orm import create_session
|
||||
from gnuviechadmin.exceptions import *
|
||||
from BackendEntity import *
|
||||
|
||||
|
||||
class BackendEntityHandler(object):
|
||||
|
||||
def __init__(self, entityclass, toclass, verbose = False):
|
||||
self.logger = logging.getLogger("%s.%s" % (
|
||||
self.__class__.__module__, self.__class__.__name__))
|
||||
|
@ -40,7 +42,7 @@ class BackendEntityHandler(object):
|
|||
sess = create_session()
|
||||
transaction = sess.create_transaction()
|
||||
delegate = self.toclass(**kwargs)
|
||||
entity = self.entityclass(delegate, self.verbose)
|
||||
entity = self.entityclass(delegate, self.verbose)
|
||||
try:
|
||||
sess.save(delegate)
|
||||
sess.flush()
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007, 2008 by Jan Dittberner.
|
||||
|
@ -21,11 +20,12 @@
|
|||
# Version: $Id$
|
||||
|
||||
from sqlalchemy.orm import object_mapper, mapper, relation
|
||||
|
||||
from tables import *
|
||||
|
||||
|
||||
class BackendTo(object):
|
||||
"""Backend transfer object class."""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
for (key, value) in kwargs.items():
|
||||
self.__setattr__(key, value)
|
||||
|
@ -37,7 +37,7 @@ class BackendTo(object):
|
|||
format = "%(class)s:"
|
||||
format = format + ", ".join([col + "=%(" + col + ")s" for col in \
|
||||
cols])
|
||||
data = {'class' : self.__class__.__name__}
|
||||
data = {'class': self.__class__.__name__}
|
||||
else:
|
||||
cols = self._shortkeys
|
||||
format = ",".join("%(" + col + ")s" for col in cols)
|
||||
|
@ -45,30 +45,31 @@ class BackendTo(object):
|
|||
data.update(dict([(col, self.__getattribute__(col)) for col in cols]))
|
||||
return format % data
|
||||
|
||||
|
||||
class Client(BackendTo):
|
||||
"""Transfer object class for clients."""
|
||||
_shortkeys = ('clientid', 'firstname', 'lastname', 'email')
|
||||
|
||||
|
||||
class Sysuser(BackendTo):
|
||||
"""Transfer object class for system users."""
|
||||
_shortkeys = ("sysuserid", "clientid", "username", "home", "shell")
|
||||
|
||||
|
||||
class Domain(BackendTo):
|
||||
"""Transfer object class for DNS domains."""
|
||||
_shortkeys = ("domainid", "sysuserid", "name", "type")
|
||||
|
||||
|
||||
class Record(BackendTo):
|
||||
"""Transfer object class for DNS domain records."""
|
||||
_shortkeys = ("recordid", "domainid", "name", "type", "content")
|
||||
|
||||
client_mapper = mapper(Client, client_table)
|
||||
sysuser_mapper = mapper(Sysuser, sysuser_table)
|
||||
domain_mapper = mapper(Domain, domain_table)
|
||||
|
||||
client_mapper = mapper(Client, client_table, {
|
||||
'sysusers': relation(Sysuser, backref = 'client')})
|
||||
sysuser_mapper = mapper(Sysuser, sysuser_table, {
|
||||
'domains': relation(Domain, backref = 'sysuser')})
|
||||
domain_mapper = mapper(Domain, domain_table, {
|
||||
'records': relation(Record, cascade = 'all', backref = 'domain')})
|
||||
record_mapper = mapper(Record, record_table)
|
||||
|
||||
client_mapper.add_property("sysusers", relation(Sysuser, backref = 'client'))
|
||||
|
||||
sysuser_mapper.add_property("domains", relation(Domain, backref = 'sysuser'))
|
||||
|
||||
domain_mapper.add_property("records", relation(Record, cascade = 'all',
|
||||
backref = 'domain'))
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: UTF-8 -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007 by Jan Dittberner.
|
||||
# Copyright (C) 2007, 2008 by Jan Dittberner.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: UTF-8 -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007 by Jan Dittberner.
|
||||
# Copyright (C) 2007, 2008 by Jan Dittberner.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -25,6 +25,7 @@ from BackendTo import *
|
|||
from BackendEntity import *
|
||||
from BackendEntityHandler import *
|
||||
|
||||
|
||||
class ClientEntity(BackendEntity):
|
||||
"""Entity class for clients."""
|
||||
|
||||
|
@ -39,18 +40,18 @@ class ClientEntity(BackendEntity):
|
|||
def _client_mail(self):
|
||||
text = get_template(config.get('common', 'mailtemplates'),
|
||||
config.get('client', 'create.mail')).substitute({
|
||||
'firstname' : self.delegateto.firstname,
|
||||
'lastname' : self.delegateto.lastname,
|
||||
'email' : self.delegateto.email,
|
||||
'address1' : self.delegateto.address1,
|
||||
'zipcode' : self.delegateto.zip,
|
||||
'city' : self.delegateto.city,
|
||||
'phone' : self.delegateto.phone})
|
||||
'firstname': self.delegateto.firstname,
|
||||
'lastname': self.delegateto.lastname,
|
||||
'email': self.delegateto.email,
|
||||
'address1': self.delegateto.address1,
|
||||
'zipcode': self.delegateto.zip,
|
||||
'city': self.delegateto.city,
|
||||
'phone': self.delegateto.phone})
|
||||
subject = get_template_string(
|
||||
config.get('client', 'create_subject')).substitute({
|
||||
'firstname' : self.delegateto.firstname,
|
||||
'lastname' : self.delegateto.lastname})
|
||||
self.send_mail(subject, text)
|
||||
'firstname': self.delegateto.firstname,
|
||||
'lastname': self.delegateto.lastname})
|
||||
self.send_mail(subject, text)
|
||||
|
||||
def create_hook(self, session):
|
||||
"""Actions to perform when a client is created."""
|
||||
|
@ -69,6 +70,7 @@ class ClientEntity(BackendEntity):
|
|||
"""Gets the default country."""
|
||||
return config.get('common', 'defaultcountry')
|
||||
|
||||
|
||||
class ClientHandler(BackendEntityHandler):
|
||||
"""BackendEntityHandler for Client entities."""
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007, 2008 by Jan Dittberner.
|
||||
|
@ -18,9 +17,10 @@
|
|||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
# USA.
|
||||
#
|
||||
# Version: $Id: client.py 1101 2007-02-28 21:15:20Z jan $
|
||||
# Version: $Id$
|
||||
|
||||
import datetime, os
|
||||
import datetime
|
||||
import os
|
||||
|
||||
from gnuviechadmin.exceptions import *
|
||||
from settings import *
|
||||
|
@ -28,6 +28,7 @@ from BackendTo import Record, Domain
|
|||
from BackendEntity import BackendEntity
|
||||
from BackendEntityHandler import BackendEntityHandler
|
||||
|
||||
|
||||
class DomainEntity(BackendEntity):
|
||||
"""Entity class for DNS domains."""
|
||||
|
||||
|
@ -130,12 +131,12 @@ class DomainEntity(BackendEntity):
|
|||
template = get_template(config.get('domain', 'htdocstemplate'),
|
||||
tpl)
|
||||
template = template.substitute({
|
||||
'domain' : self.delegateto.name})
|
||||
'domain': self.delegateto.name})
|
||||
self.write_to_file(os.path.join(vhostdir, tpl), template)
|
||||
cmd = 'chown -R %(username)s:%(group)s "%(dir)s"' % {
|
||||
'username' : self.delegateto.sysuser.username,
|
||||
'group' : config.get('sysuser', 'defaultgroup'),
|
||||
'dir' : vhostdir}
|
||||
'username': self.delegateto.sysuser.username,
|
||||
'group': config.get('sysuser', 'defaultgroup'),
|
||||
'dir': vhostdir}
|
||||
self.sucommand(cmd)
|
||||
|
||||
def _create_log_dir(self):
|
||||
|
@ -164,8 +165,8 @@ class DomainEntity(BackendEntity):
|
|||
template = get_template(config.get('domain', 'conftemplates'),
|
||||
config.get('domain', 'statshtaccesstemplate'))
|
||||
template = template.substitute({
|
||||
'domain' : self.delegateto.name,
|
||||
'userfile' : authfile})
|
||||
'domain': self.delegateto.name,
|
||||
'userfile': authfile})
|
||||
self.write_to_file(os.path.join(self._get_stats_dir(),
|
||||
'.htaccess'), template)
|
||||
|
||||
|
@ -178,10 +179,10 @@ class DomainEntity(BackendEntity):
|
|||
template = get_template(config.get('domain', 'conftemplates'),
|
||||
config.get('domain', 'modlogantemplate'))
|
||||
template = template.substitute({
|
||||
'statsdir' : self._get_stats_dir(),
|
||||
'logdir' : self._get_log_dir(),
|
||||
'domain' : self.delegateto.name,
|
||||
'domainesc' : self.delegateto.name.replace('.', '\.')})
|
||||
'statsdir': self._get_stats_dir(),
|
||||
'logdir': self._get_log_dir(),
|
||||
'domain': self.delegateto.name,
|
||||
'domainesc': self.delegateto.name.replace('.', '\.')})
|
||||
self.write_to_file(os.path.join(modlogandir,
|
||||
self.delegateto.name + '.conf'),
|
||||
template)
|
||||
|
@ -190,11 +191,11 @@ class DomainEntity(BackendEntity):
|
|||
template = get_template(config.get('domain', 'conftemplates'),
|
||||
config.get('domain', 'apachetemplate'))
|
||||
template = template.substitute({
|
||||
'ipaddr' : self.ipaddr,
|
||||
'statsdir' : self._get_stats_dir(),
|
||||
'logdir' : self._get_log_dir(),
|
||||
'domain' : self.delegateto.name,
|
||||
'docroot' : self._get_vhost_dir()})
|
||||
'ipaddr': self.ipaddr,
|
||||
'statsdir': self._get_stats_dir(),
|
||||
'logdir': self._get_log_dir(),
|
||||
'domain': self.delegateto.name,
|
||||
'docroot': self._get_vhost_dir()})
|
||||
self.write_to_file(os.path.join(config.get('domain', 'sitesdir'),
|
||||
self.delegateto.name), template)
|
||||
|
||||
|
@ -202,14 +203,14 @@ class DomainEntity(BackendEntity):
|
|||
template = get_template(config.get('common', 'mailtemplates'),
|
||||
config.get('domain', 'create.mail'))
|
||||
text = template.substitute({
|
||||
'sysuser' : self.delegateto.sysuser.username,
|
||||
'domain' : self.delegateto.name,
|
||||
'docroot' : self._get_vhost_dir(),
|
||||
'statspass' : self.delegateto.sysuser.clearpass})
|
||||
'sysuser': self.delegateto.sysuser.username,
|
||||
'domain': self.delegateto.name,
|
||||
'docroot': self._get_vhost_dir(),
|
||||
'statspass': self.delegateto.sysuser.clearpass})
|
||||
template = get_template_string(config.get('domain', 'create_subject'))
|
||||
subject = template.substitute({
|
||||
'domain' : self.delegateto.name})
|
||||
self.send_mail(subject, text)
|
||||
'domain': self.delegateto.name})
|
||||
self.send_mail(subject, text)
|
||||
|
||||
def create_hook(self, session):
|
||||
self.delegateto.records.append(Record(
|
||||
|
@ -223,7 +224,7 @@ class DomainEntity(BackendEntity):
|
|||
name = self.delegateto.name, type = 'NS', content = self.ns2,
|
||||
ttl = config.getint('domain', 'defaultttl')))
|
||||
self.delegateto.records.append(Record(
|
||||
name = self.delegateto.name, type = 'MX', content = self.mx,
|
||||
name = self.delegateto.name, type = 'MX', content = self.mx,
|
||||
ttl = config.getint('domain', 'defaultttl'),
|
||||
prio = config.getint('domain', 'defaultmxprio')))
|
||||
self.delegateto.records.append(Record(
|
||||
|
@ -258,65 +259,69 @@ class DomainEntity(BackendEntity):
|
|||
def _archive_stats_dir(self):
|
||||
archive = os.path.join(self.delegateto.sysuser.home,
|
||||
'%(domain)s-stats.tar.gz' % {
|
||||
'domain' : self.delegateto.name})
|
||||
cmd = 'tar czf "%(archive)s" --directory="%(statsbase)s" "%(statsdir)s"' % {
|
||||
'archive' : archive,
|
||||
'statsbase' : config.get('domain', 'statspath'),
|
||||
'statsdir' : self.delegateto.name}
|
||||
'domain': self.delegateto.name})
|
||||
cmd = 'tar czf "%(archive)s" --directory="%(statsbase)s" ' + \
|
||||
'"%(statsdir)s"' % {
|
||||
'archive': archive,
|
||||
'statsbase': config.get('domain', 'statspath'),
|
||||
'statsdir': self.delegateto.name}
|
||||
self.sucommand(cmd)
|
||||
cmd = 'rm -r "%(statsdir)s"' % {
|
||||
'statsdir' : self._get_stats_dir()}
|
||||
'statsdir': self._get_stats_dir()}
|
||||
self.sucommand(cmd)
|
||||
cmd = 'chown "%(username)s:%(group)s" "%(archive)s"' % {
|
||||
'username' : self.delegateto.sysuser.username,
|
||||
'group' : config.get('sysuser', 'defaultgroup'),
|
||||
'archive' : archive}
|
||||
'username': self.delegateto.sysuser.username,
|
||||
'group': config.get('sysuser', 'defaultgroup'),
|
||||
'archive': archive}
|
||||
self.sucommand(cmd)
|
||||
|
||||
def _archive_log_dir(self):
|
||||
archive = os.path.join(self.delegateto.sysuser.home,
|
||||
'%(domain)s-logs.tar.gz' % {
|
||||
'domain' : self.delegateto.name})
|
||||
cmd = 'tar czf "%(archive)s" --directory="%(logbase)s" "%(logdir)s"' % {
|
||||
'archive' : archive,
|
||||
'logbase' : config.get('domain', 'logpath'),
|
||||
'logdir' : self.delegateto.name}
|
||||
'domain': self.delegateto.name})
|
||||
cmd = 'tar czf "%(archive)s" --directory="%(logbase)s" ' + \
|
||||
'"%(logdir)s"' % {
|
||||
'archive': archive,
|
||||
'logbase': config.get('domain', 'logpath'),
|
||||
'logdir': self.delegateto.name}
|
||||
self.sucommand(cmd)
|
||||
cmd = 'rm -r "%(logdir)s"' % {
|
||||
'logdir' : self._get_log_dir()}
|
||||
'logdir': self._get_log_dir()}
|
||||
self.sucommand(cmd)
|
||||
cmd = 'chown "%(username)s:%(group)s" "%(archive)s"' % {
|
||||
'username' : self.delegateto.sysuser.username,
|
||||
'group' : config.get('sysuser', 'defaultgroup'),
|
||||
'archive' : archive}
|
||||
'username': self.delegateto.sysuser.username,
|
||||
'group': config.get('sysuser', 'defaultgroup'),
|
||||
'archive': archive}
|
||||
self.sucommand(cmd)
|
||||
|
||||
def _archive_vhost_dir(self):
|
||||
archive = os.path.join(self.delegateto.sysuser.home,
|
||||
'%(domain)s-vhost.tar.gz' % {
|
||||
'domain' : self.delegateto.name})
|
||||
cmd = 'tar czf "%(archive)s" --directory="%(vhostbase)s" "%(vhostdir)s"' % {
|
||||
'archive' : archive,
|
||||
'vhostbase' : self.delegateto.sysuser.home,
|
||||
'vhostdir' : self.delegateto.name}
|
||||
'domain': self.delegateto.name})
|
||||
cmd = 'tar czf "%(archive)s" --directory="%(vhostbase)s" ' + \
|
||||
'"%(vhostdir)s"' % {
|
||||
'archive': archive,
|
||||
'vhostbase': self.delegateto.sysuser.home,
|
||||
'vhostdir': self.delegateto.name}
|
||||
self.sucommand(cmd)
|
||||
cmd = 'rm -r "%(vhostdir)s"' % {
|
||||
'vhostdir' : os.path.join(self.delegateto.sysuser.home,
|
||||
'vhostdir': os.path.join(self.delegateto.sysuser.home,
|
||||
self.delegateto.name)}
|
||||
self.sucommand(cmd)
|
||||
cmd = 'chown "%(username)s:%(group)s" "%(archive)s"' % {
|
||||
'username' : self.delegateto.sysuser.username,
|
||||
'group' : config.get('sysuser', 'defaultgroup'),
|
||||
'archive' : archive}
|
||||
'username': self.delegateto.sysuser.username,
|
||||
'group': config.get('sysuser', 'defaultgroup'),
|
||||
'archive': archive}
|
||||
self.sucommand(cmd)
|
||||
|
||||
def delete_hook(self, session):
|
||||
def delete_hook(self, session):
|
||||
self._delete_apache_conf()
|
||||
self._delete_stats_conf()
|
||||
self._archive_stats_dir()
|
||||
self._archive_log_dir()
|
||||
self._archive_vhost_dir()
|
||||
|
||||
|
||||
class DomainHandler(BackendEntityHandler):
|
||||
"""BackendEntityHandler for Domain entities."""
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: UTF-8 -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007 by Jan Dittberner.
|
||||
# Copyright (C) 2007, 2008 by Jan Dittberner.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -25,16 +25,19 @@ from domain import DomainEntity
|
|||
from BackendEntity import *
|
||||
from BackendEntityHandler import *
|
||||
|
||||
|
||||
class RecordEntity(BackendEntity):
|
||||
"""Entity class for DNS domain records."""
|
||||
|
||||
def create_hook(self, session):
|
||||
domain = session.load(Domain, self.delegateto.domainid)
|
||||
DomainEntity(domain).update_serial(session)
|
||||
|
||||
|
||||
def delete_hook(self, session):
|
||||
domain = session.load(Domain, self.delegateto.domainid)
|
||||
DomainEntity(domain).update_serial(session)
|
||||
|
||||
|
||||
class RecordHandler(BackendEntityHandler):
|
||||
"""BackendEntityHandler for Record entities."""
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007, 2008 by Jan Dittberner.
|
||||
|
@ -26,7 +25,10 @@ This module handles all central configuration of Gnuviech Admin. It
|
|||
parses configuration files and provides functions for reading
|
||||
templates."""
|
||||
|
||||
import ConfigParser, os, string, logging.config
|
||||
import ConfigParser
|
||||
import os
|
||||
import string
|
||||
import logging.config
|
||||
|
||||
# global settings which must not be user configurable
|
||||
required_version = 3
|
||||
|
@ -40,11 +42,13 @@ dbschema = None
|
|||
if config.get('database', 'uri').startswith('postgres://'):
|
||||
dbschema = 'gva'
|
||||
|
||||
|
||||
def get_template_dir(dirname):
|
||||
"""Returns the template directory for the given directory."""
|
||||
templatepath = config.get('common', 'templatedir')
|
||||
return os.path.join(templatepath, dirname)
|
||||
|
||||
|
||||
def get_template(dirname, filename):
|
||||
"""Returns the template data from the given template file."""
|
||||
templatefile = file(os.path.join(get_template_dir(dirname),
|
||||
|
@ -52,6 +56,7 @@ def get_template(dirname, filename):
|
|||
templatedata = templatefile.read()
|
||||
return string.Template(templatedata.decode('utf_8'))
|
||||
|
||||
|
||||
def get_template_string(templatestring):
|
||||
"""Returns a template object for the given template string."""
|
||||
return string.Template(templatestring)
|
||||
|
|
|
@ -27,6 +27,7 @@ from BackendEntity import *
|
|||
from BackendEntityHandler import *
|
||||
import os
|
||||
|
||||
|
||||
class SysuserEntity(BackendEntity):
|
||||
"""Entity class for system users."""
|
||||
|
||||
|
@ -54,7 +55,8 @@ class SysuserEntity(BackendEntity):
|
|||
usernames = [user.username for user in \
|
||||
getenttools.find_user_by_prefix(prefix)]
|
||||
if usernames:
|
||||
maxid = max([int(username[len(prefix):]) for username in usernames])
|
||||
maxid = max([int(username[len(prefix):]) \
|
||||
for username in usernames])
|
||||
maxid += 2
|
||||
for number in range(1, maxid):
|
||||
username = "%s%02d" % (prefix, number)
|
||||
|
@ -81,17 +83,18 @@ class SysuserEntity(BackendEntity):
|
|||
|
||||
def _get_next_sysuid(self):
|
||||
return getenttools.get_next_uid(int(config.get('sysuser', 'minuid')),
|
||||
int(config.get('sysuser', 'maxuid')))
|
||||
int(config.get('sysuser', 'maxuid')))
|
||||
|
||||
def _populate_home(self):
|
||||
templatedir = get_template_dir(config.get('sysuser', 'hometemplate'))
|
||||
olddir = os.getcwd()
|
||||
os.chdir(templatedir)
|
||||
cmd1 = 'find . -depth \! -regex ".*\.svn.*" \! -name "*~" -print0'
|
||||
cmd2 = 'cpio --pass-through --owner=%(username)s.%(group)s --null --make-directories %(home)s' % {
|
||||
'username' : self.delegateto.username,
|
||||
'group' : config.get('sysuser', 'defaultgroup'),
|
||||
'home' : self.delegateto.home}
|
||||
cmd2 = 'cpio --pass-through --owner=%(username)s.%(group)s --null ' + \
|
||||
'--make-directories %(home)s' % {
|
||||
'username': self.delegateto.username,
|
||||
'group': config.get('sysuser', 'defaultgroup'),
|
||||
'home': self.delegateto.home}
|
||||
self.supipe((cmd1, cmd2))
|
||||
os.chdir(olddir)
|
||||
|
||||
|
@ -99,33 +102,35 @@ class SysuserEntity(BackendEntity):
|
|||
template = get_template(config.get('common', 'mailtemplates'),
|
||||
config.get('sysuser', 'create.mail'))
|
||||
text = template.substitute({
|
||||
'uid' : self.delegateto.sysuid,
|
||||
'firstname' : self.delegateto.client.firstname,
|
||||
'lastname' : self.delegateto.client.lastname,
|
||||
'email' : self.delegateto.client.email,
|
||||
'username' : self.delegateto.username,
|
||||
'password' : self.delegateto.clearpass,
|
||||
'home' : self.delegateto.home,
|
||||
'shell' : self._get_shell_binary()})
|
||||
'uid': self.delegateto.sysuid,
|
||||
'firstname': self.delegateto.client.firstname,
|
||||
'lastname': self.delegateto.client.lastname,
|
||||
'email': self.delegateto.client.email,
|
||||
'username': self.delegateto.username,
|
||||
'password': self.delegateto.clearpass,
|
||||
'home': self.delegateto.home,
|
||||
'shell': self._get_shell_binary()})
|
||||
template = get_template_string(config.get('sysuser', 'create_subject'))
|
||||
subject = template.substitute({
|
||||
'username' : self.delegateto.username})
|
||||
'username': self.delegateto.username})
|
||||
self.send_mail(subject, text)
|
||||
|
||||
def create_hook(self, session):
|
||||
gecos = config.get('sysuser', 'gecos') % (self.delegateto.username)
|
||||
cmdline = 'adduser --home "%(home)s" --shell "%(shell)s" --no-create-home --uid %(sysuid)d --ingroup "%(group)s" --disabled-password --gecos "%(gecos)s" %(username)s' % {
|
||||
'home' : self.delegateto.home,
|
||||
'shell' : self._get_shell_binary(),
|
||||
'sysuid' : self.delegateto.sysuid,
|
||||
'group' : config.get('sysuser', 'defaultgroup'),
|
||||
'gecos' : gecos,
|
||||
'username' : self.delegateto.username}
|
||||
cmdline = 'adduser --home "%(home)s" --shell "%(shell)s" ' + \
|
||||
'--no-create-home --uid %(sysuid)d --ingroup "%(group)s" ' + \
|
||||
'--disabled-password --gecos "%(gecos)s" %(username)s' % {
|
||||
'home': self.delegateto.home,
|
||||
'shell': self._get_shell_binary(),
|
||||
'sysuid': self.delegateto.sysuid,
|
||||
'group': config.get('sysuser', 'defaultgroup'),
|
||||
'gecos': gecos,
|
||||
'username': self.delegateto.username}
|
||||
self.sucommand(cmdline)
|
||||
cmdline = 'chpasswd --encrypted'
|
||||
inline = '%(username)s:%(md5pass)s' % {
|
||||
'username' : self.delegateto.username,
|
||||
'md5pass' : self.delegateto.md5pass}
|
||||
'username': self.delegateto.username,
|
||||
'md5pass': self.delegateto.md5pass}
|
||||
self.sucommand(cmdline, inline)
|
||||
self._populate_home()
|
||||
self._mail_sysuser()
|
||||
|
@ -141,15 +146,17 @@ class SysuserEntity(BackendEntity):
|
|||
config.get('sysuser', 'homebackupdir'))
|
||||
if not os.path.isdir(backupdir):
|
||||
cmdline = 'mkdir -p "%(backupdir)s"' % {
|
||||
'backupdir' : backupdir}
|
||||
'backupdir': backupdir}
|
||||
status = self.sucommand(cmdline)
|
||||
if status != 0:
|
||||
raise Exception("could not create backup directory")
|
||||
cmdline = 'deluser --remove-home --backup --backup-to "%(backupdir)s" %(username)s' % {
|
||||
'backupdir' : backupdir,
|
||||
'username' : self.delegateto.username}
|
||||
cmdline = 'deluser --remove-home --backup --backup-to ' + \
|
||||
' "%(backupdir)s" %(username)s' % {
|
||||
'backupdir': backupdir,
|
||||
'username': self.delegateto.username}
|
||||
self.sucommand(cmdline)
|
||||
|
||||
|
||||
class SysuserHandler(BackendEntityHandler):
|
||||
"""BackendEntityHandler for Sysuser entities."""
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
# -*- python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright (C) 2007, 2008 by Jan Dittberner.
|
||||
|
@ -31,7 +30,8 @@ try:
|
|||
config.get('database', 'uri'),
|
||||
config.get('database', 'repository'))
|
||||
if dbversion < required_version:
|
||||
print("""Database version is %d but required version is %d. Trying automatic upgrade.""" %
|
||||
print("""Database version is %d but required version is %d. Trying
|
||||
automatic upgrade.""" %
|
||||
(dbversion, required_version))
|
||||
try:
|
||||
migrate.versioning.api.upgrade(
|
||||
|
@ -42,10 +42,11 @@ try:
|
|||
print "Automatic upgrade failed."
|
||||
raise
|
||||
elif dbversion > required_version:
|
||||
print("""Database version is %d which is higher than the required version %d. I cannot handle this situation without possible data loss.""" %
|
||||
print("""Database version is %d which is higher than the required
|
||||
version %d. I cannot handle this situation without possible data loss.""" %
|
||||
(dbversion, required_version))
|
||||
sys.exit(1)
|
||||
except NoSuchTableError, nste:
|
||||
except NoSuchTableError, nste:
|
||||
print """The database is not versioned. Trying automatic versioning."""
|
||||
try:
|
||||
migrate.versioning.api.version_control(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue