1
0
Fork 0

- working with sqlalchemy 0.3.10

- remove duplicate foreign key definitions from tables.py
- use _saltchars in passwordutils.py


git-svn-id: file:///home/www/usr01/svn/gnuviechadmin/gnuviech.info/gnuviechadmin/trunk@240 a67ec6bc-e5d5-0310-a910-815c51eb3124
This commit is contained in:
Jan Dittberner 2008-01-12 20:46:28 +00:00
parent aaa23c9c5f
commit f24de13a6f
8 changed files with 63 additions and 47 deletions

View file

View file

@ -1,4 +1,4 @@
# -*- coding: UTF-8 -*-
# -*- coding: utf-8 -*-
#
# Copyright (C) 2007 by Jan Dittberner.
#
@ -64,6 +64,23 @@ class BackendEntity(object):
self.logger.info("%s: %s", toexec, sts[1])
return sts[1]
def supipe(self, cmdlines):
"""Executes multiple commands as root and pipes the output of
the commands to the input of the next commands."""
self.logger.debug("supipe called: %s", " | ".join(cmdlines))
suwrapper = config.get('common', 'suwrapper')
predecessor = None
for cmdline in cmdlines:
toexec = "%s %s" % (suwrapper, cmdline)
if predecessor is None:
p = Popen(toexec, shell = True, stdout = PIPE)
else:
p = Popen(toexec, shell = True, stdin = predecessor.stdout,
stdout = PIPE)
predecessor = p
output = predecessor.communicate()[0]
return predecessor.wait()
def send_mail(self, subject, text):
"""This method sends a mail with the given text and subject
and signs it usign GnuPG. If a public key of the recipient is

View file

@ -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

View file

@ -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

View file

@ -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 settings import config
from BackendTo import *
from BackendEntity import *
from BackendEntityHandler import *
import os
class SysuserEntity(BackendEntity):
"""Entity class for system users."""
@ -52,8 +53,9 @@ class SysuserEntity(BackendEntity):
usernames = [user.username for user in \
getenttools.find_user_by_prefix(prefix)]
maxid = max([int(username[len(prefix):]) for username in usernames])
for num in range(1, maxid + 1):
username = "%s%02d" % (prefix, num)
maxid += 2
for number in range(1, maxid):
username = "%s%02d" % (prefix, number)
if not username in usernames:
return username
@ -79,15 +81,15 @@ class SysuserEntity(BackendEntity):
def _populate_home(self):
templatedir = get_template_dir(config.get('sysuser', 'hometemplate'))
cmdline = 'cp -R "%(template)s" "%(home)s"' % {
'template' : templatedir,
'home' : self.delegateto.home }
self.sucommand(cmdline)
cmdline = 'chown -R "%(username)s":"%(group)s" %(home)s' % {
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}
self.sucommand(cmdline)
self.supipe((cmd1, cmd2))
os.chdir(olddir)
def _mail_sysuser(self):
template = get_template(config.get('common', 'mailtemplates'),

View file

@ -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
@ -43,30 +43,15 @@ except exceptions.NoSuchTableError, nste:
meta = BoundMetaData(config.get('database', 'uri'))
#meta.engine.echo = True
client_table = Table(
'client', meta, schema = dbschema, autoload = True)
sysuser_table = Table(
'sysuser', meta, ForeignKeyConstraint(['clientid'], ['client.clientid']),
schema = dbschema, autoload = True)
domain_table = Table(
'domain', meta, ForeignKeyConstraint(['sysuserid'], ['sysuser.sysuserid']),
schema = dbschema, autoload = True)
record_table = Table(
'record', meta, ForeignKeyConstraint(['domainid'], ['domain.domainid']),
schema = dbschema, autoload = True)
supermaster_table = Table(
'supermaster', meta,
ForeignKeyConstraint(['account'], ['sysuser.sysuserid']),
schema = dbschema, autoload = True)
mailaccount_table = Table(
'mailaccount', meta,
ForeignKeyConstraint(['domainid'], ['domain.domainid']),
schema = dbschema, autoload = True)
mailaddress_table = Table(
'mailaddress', meta,
ForeignKeyConstraint(['domainid'], ['domain.domainid']),
schema = dbschema, autoload = True)
mailtarget_table = Table(
'mailtarget', meta,
ForeignKeyConstraint(['mailaddressid'], ['mailaddress.mailaddressid']),
schema = dbschema, autoload = True)
client_table = Table('client', meta, schema = dbschema, autoload = True)
sysuser_table = Table('sysuser', meta, schema = dbschema, autoload = True)
domain_table = Table('domain', meta, schema = dbschema, autoload = True)
record_table = Table('record', meta, schema = dbschema, autoload = True)
supermaster_table = Table('supermaster', meta, schema = dbschema,
autoload = True)
mailaccount_table = Table('mailaccount', meta, schema = dbschema,
autoload = True)
mailaddress_table = Table('mailaddress', meta, schema = dbschema,
autoload = True)
mailtarget_table = Table('mailtarget', meta, schema = dbschema,
autoload = True)

View file

@ -1,4 +1,4 @@
# -*- coding: UTF-8 -*-
# -*- coding: utf-8 -*-
#
# Copyright (C) 2007 by Jan Dittberner.
#
@ -24,6 +24,7 @@ import crypt, crack, random
_pwchars = []
for pair in (('0', '9'), ('A', 'Z'), ('a', 'z')):
_pwchars.extend(range(ord(pair[0]), ord(pair[1])))
_saltchars = [char for char in _pwchars]
for char in "-+/*_@":
_pwchars.append(ord(char))
@ -46,7 +47,7 @@ def checkpassword(password):
def md5_crypt_password(password):
"""Hashes the given password with MD5 and a random salt value."""
salt = "".join([chr(letter) for letter in \
random.sample(_pwchars, 8)])
random.sample(_saltchars, 8)])
return crypt.crypt(password, '$1$' + salt)
def get_pw_tuple(password = None):

View file

@ -0,0 +1,11 @@
from passwordutils import *
import sys
for line in sys.stdin.read().splitlines():
parts = line.split()
(email, domain) = parts[0].split("@")
username = parts[1][0:5]
pwtuple = get_pw_tuple()
print "INSERT INTO mailpassword (id, clearpass, cryptpass, uid, gid, home, spamcheck) VALUES ('%s', '%s', '%s', %d, %d, '/home/mail/%s/%s', 'false');" % (parts[1], pwtuple[0], pwtuple[1], int(parts[2]), 119, username, parts[1])
print "INSERT INTO mailaddress (domainid, email, target) VALUES (%d, '%s', '%s');" % (int(parts[3]), email, parts[1])