четверг, 11 июня 2015 г.

Чистим неиспользуемые почтовые каталоги postfix
postfix работает с mysql.
в каталоге /var/mail которую он обслуживает находятся каталоги доменов:
/var/mail
   domain1.ru
   domain2.com
   domain3.org

в этих каталогах хранятся много пользовательских каталогов, хозяева которых уже уволились или не пользуются посфиксом. Задача их вычистить. Т.е. сопоставить таблицу aliases поле address из базы postfix и структуры каталогов для домена. Вывести тех кто отсутствует в этом поле, но чей каталог присутствует в /var/mail/domainX.XXX

#!/usr/bin/env python
# -*- coding: utf8 -*-

import mysql.connector
from mysql.connector import Error
import sys,os
import subprocess

mysqlserver="192.168.0.1"
mysqldb="postfix"
mysqluserlogin="user"
mysqluserpasword="password"


"""
# задел на работу по ssh - пока не используем
def ssh_command(HOST,KEYS,COMMAND):
   print("ssh %s %s %s" % (KEYS,HOST,COMMAND))
   ssh = subprocess.Popen(["ssh %s" % KEYS, "%s" % HOST, COMMAND],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
   result = ssh.stdout.readlines()
   if result == []:
       error = ssh.stderr.readlines()
       print >>sys.stderr, "ERROR: %s" % error
   else:
       return result
   return
"""

rowmails=[]
rowdomains=[]

try:
   conn = mysql.connector.connect(host=mysqlserver,
                                   database=mysqldb,
                                   user=mysqluserlogin,
                                   password=mysqluserpasword)
   if conn.is_connected():
            print('Connected to MySQL database')
   cursor = conn.cursor()

   cursor.execute("SELECT address FROM alias where domain = 'domain1.ru'")
   row=cursor.fetchone()

   while row is not None:
      rowmails.append(row[0])
      row=cursor.fetchone()

except Error as e:
        print(e)
finally:
    conn.close()

if len(rowmails)<=0:
   print("sql query returns zero rows")
   sys.exit(1)

MAILDIR="/var/mail/domain1.ru/"
for f in os.listdir(MAILDIR):
   if os.path.isdir(MAILDIR+f):
       if f not in rowmails:
           print(MAILDIR+f)
sys.exit(0)