Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


Показаны сообщения с ярлыком zmprov. Показать все сообщения
Показаны сообщения с ярлыком zmprov. Показать все сообщения

понедельник, 19 февраля 2018 г.

Zimbra: статистика по размерам почтовых ящиков

Статистику по размерам почтовых ящиков можно смотреть через веб-интерфейс. Но это не всегда удобно, а иногда и невозможно.

Но это ж линукс, детка!

zimbra@server:$ zmprov gqu имя_сервера|sort -k 3 -n|column -t

и получаем красивую ровную табличку, отсортированную по правому столбцу, где указан, собственно, размер занятого места. (в первом столбце адрес учётки, во втором - квота для нее)

gqu -- GetQuoteUsage

-k 3 -- сортировать по третьему столбцу
-n -- сортировать числа как числа, чтобы 20 шло после 19, а не после 10

-t -- подобрать подходящие для красивой таблички ширины столбцов

воскресенье, 27 марта 2016 г.

ZIMBRA: фильтры сообщений, уточнение

В сентябре 2015 я писал про работу с фильтрами сообщений в web-клиенте Zimbra через инструменты zmprov и zmmailbox.
В комментариях к тому посту меня спросили, не пробовал ли я переносить правила фильтров из Thunderbird в Zimbra. Нет, не пробовал - не было необходимости. Но сам вопрос заставил немного порыться в интернетах и нашел я вот такую статью с описаниями относящихся к делу команд zmmailbox, а также условий и действий для фильтров. Возможно, она облегчит подобные преобразования. Поскольку статья помечена как устаревшая, то она может быть удалена и я скопировал ее содержимое сюда

вторник, 8 сентября 2015 г.

Zimbra: грамотно работаем с фильтрами сообщений в веб-клиенте и в командной строке

Содержание: как правильно экспортировать и импортировать фильтры обработки сообщений из учетных записей зимбры.

Веб-интерфейс позволяет создавать фильтры для обработки сообщений. Они сохраняются в параметре zimbraMailSieveScript.

Например:

$ zmprov ga учетка zimbramailsievescript

суббота, 18 января 2014 г.

Zimbra: перенос паролей пользователей

После переноса сообщений, перенос паролей самая дурная часть работы: в зимбре в принципе не предусмотрена расшифровка паролей, хранящихся в LDAP в зашифрованном виде.

Более того, команда:

zmprov ga <account>

возвращает что-то вроде:

# name <account>
userPassword: VALUE-BLOCKED

что для нас совсем бесполезно. Однако, если команду слегка изменить и добавить "брать данные из LDAP", то картина меняется:

zmprov -l ga <account> userPassword
# name <account>
userPassword: {SSHA}ДлиннаяСтрокаАбракадабры

(-l - маленькая латинская L, а не i или единица!)

А вот это уже веселее. Получаю такой пароль для пользователя на старом сервере и пробую скормить его на новом:

zmprov ma <account> userPassword {SSHA}ДлиннаяСтрокаАбракадабры

zmprov молча глотает это безобразие и прекрасно пускает меня со старым паролем уже на новом сервере. Красота! Осталось вытащить со старого сервера старые пароли. Ну, на такие грабли наступал не я один, поэтому решение уже нашлось:

for i in `zmprov -l gaa | egrep -v 'galsync|spam|ham|virus|stimpson'`;do \
  echo "$i,`zmprov -l ga $i userPassword | grep userPassword | \
  sed 's/userPassword: //'`";\
done;

Стимпсон - это старое имя сервера того, кто придумал эту команду, поэтому его можно смело удалить. И я немного доработал вывод команды, чтобы она формировала мне готовый набор команд для пакетной обработки:

for i in `zmprov -l gaa | egrep -v 'avir|galsync|spam|ham|virus'`;do \
   echo "zmprov ma $i userPassword `zmprov -l ga $i userPassword | \ 
   grep userPassword | sed 's/userPassword: //'`"; \
done;

Перенаправить вывод этой команды в файл мне не удалось, но это и не важно - ее результаты я скопировал из терминала в файл, который и запустил, добавив шабанг в начале :-)

Zimbra: перенос алиасов

После переноса учеток не помешает перенести алиасы. Пошел таким неортодоксальным путём.

Нашел способ вывести список алиасов:

for i in `zmprov -l gaa`; do echo ""; echo "$i:"; zmprov ga $i | grep MailAlias; done >/opt/zimbra/log/aliases.txt

Но полученный файл содержит вперемешку как учетки, так и их алиасы:

admin@mydomain:
zimbraMailAlias: root@mydomain
zimbraMailAlias: postmaster@mydomain

wiki@mydomain:

spam.ro7wynrcju@mydomain:

ham.twrv9q1qj@mydomain:

То есть, учетка админа имеет два алиаса, три других алиасов не имеют. Не смог на скорую руку с помощью sed/grep/awk убрать строки, после которых нет алиасов, да и черт с ними: вычистил вручную в редакторе.
Теперь надо подготовиться к автоматическому прописыванию алиасов из этого файла. Любым способом делаем глобальную замену "zaimbraMailAlias:" на "zmprov aaa $1 " (перед закрывающей кавычкой на всякий случай лишний пробел!).
Опять же, не смог оперативно понять, как это сделать штатными средствами, поэтому в редакторе, уже вручную убрал все оставшиеся двоеточия и перед каждым емайлом дописал "set ", чтобы присвоить первому переданному параметру командной строки значение этого емайла:

set admin@mydomain
zmprov aaa $1  root@mydomain
zmprov aaa $1  postmaster@mydomain

Полученный после всех издевательств файл снабдил шабангом и запустил на выполнение.

четверг, 29 августа 2013 г.

Планирование автоматического включения/отключения переадресации в зимбре

Automating the turning on/off the mail forwarding in Zimbra

Система состоит из 6 исполняемых файлов-скриптов, 5 на shell-script, 1 на #awk, разбитых на две группы: ввод данных и обработка.

Ввод (и частичная обработка) выполняется по цепочке:

zimtest --> zimtest1
zimtest1 вызывает rrgtest и при необходимости zmonoff

Автоматическая обработка по расписанию выполняется zimparser, который вызывает zimawk.awk и zmonoff.

ZIMTEST

Сценарий-обёртка. При запуске без параметров выдает наикратчайшую справку. Запускается с параметрами:

zimtest дата_начала дата_окончания кого на_кого

Все параметры обязательны.

Обе даты задавать в русском формате дд.мм.гггг, год обязательно 4 цифрами. В качестве разделителя полей даты можно использовать точку, прямой слэш или их комбинацию - все разделители потом приводятся к слэшам.

В качестве кого можно указывать как полный емайл (напр. pupkin_vasya@наш_домен), так и только именную его часть (pupkin_vasya) - при проверке имени зимброй работают оба варианта.

На_кого - только полный емайл, поскольку эта строка просто будет вписана в соответствующее поле LDAP для кого. (однако, валидность этого адреса тоже проверяется и вписать несуществующего получателя не удастся)

Емайлы должны принадлежать нашему домену - автоматическая настройка автоматической пересылки на другие домены не разрешается.

ZIMTEST1

Основной скрипт ввода. Использует два скрипта - rregtest и zmonoff - для выполнения отдельных операций. rregtest используется как подключаемая библиотека, содержащая функцию проверки допустимости даты. Поскольку со времени начальной разработки эта функция сильно упростилась (я отдал все лишние проверки операционной системе), то возможно, что функция будет включена в состав zimtest1, а rregtest будет исключен из "комплекса".

zmonoff (ZiMbra ON/OFF) - скрипт, выполняющий, собственно, включение/выключение переадресации. Используется здесь в случаях, когда дата начала переадресации уже прошла или наступила сегодня для немедленного включения переадресации, либо когда дата отключения уже прошла или наступила сегодня, для немедленного отключения.

Переданные даты отдаются на проверку сценарию rregtest, а емайлы проверяются внутри скрипта силами зимбры. Изначально, опять же, я писал валидатор для емайлов, но потом отказался от него и запускаю zmprov ga. Чтобы не делать пустую проверку, для красоты получаю в ее ходе от зимбры человеческое имя пользователя. Пока оно просто выводится на экран, но в теории может пригодиться для чего-нибудь полезного.

Для тех же красивостей вычисляется количество дней между начальной и конечной датами действия переадресации. Сходный алгоритм используется чуть позже для вычисления времени, оставшегося до включения/отключения переадресации.

После проверки "а не указана ли конечная дата раньше начальной?" начинается собственно формирование файла данных для обработки по крону.

Если выясняется, что переданная дата уже наступила, то действие выполняется немедленно и в файл данных для дальнейшей обработки ничего не заносится. Проверка на случай, когда обе даты в прошлом, не делается и если так и есть, то сначала переадресация включается, а потом сразу выключается. Не очень оптимально, но уже лень было делать лишнюю проверку.

Если же переданная дата еще не наступила, то информация о ней дописывается в конец файла данных zmsched.dat в виде строки:

@секунды:действие:аккаунт_кого:емайл_на_кого:дата_по-русски

Например:

Переадресовывать почту Васи Пупкина на Петю Попкина с 25.09.2013
@1380027600:on:pupkin_vasya:popkin_petya@my.domain:25.09.2013

Отменить с 25.09.2013 переадресацию почты Васи Пупкина. Поле емайл_на_кого пусто, но оно есть - это строка нулевой длины между третьим и четвертым двоеточиями.
@1380027600:off:pupkin_vasya::25.09.2013

@секунды - дата выполнения действия в формате

date -d "дата 0:00" +@%s

то есть, количество секунд с начала "эпохи" до нуля часов нужного дня. Такой формат выбран для удобства сравнения в обработчике.

действие - принимает одно из трех возможных значений: on, off, skip. Действие skip будет описано ниже в описании обработчика zimawk.awk. Действия on и off самоочевидны: включить или выключить переадресацию для аккаунт_кого, указав, в случае включения емайл_на_кого.

аккаунт_кого - либо имя пользователя либо емайл пользователя, чью почту переадресовывать. Как говорилось выше, в этом поле достаточно использовать только имя аккаунта. Емайл тоже можно, но это целесообразно только при наличии на сервере нескольких доменов. Когда домен один, достаточно имени пользователя.

емайл_на_кого - емайл и только емайл, на который будет переадресовываться почта. Это просто строка, которая будет помещаться в соответствующее поле в LDAP-записи про аккаунт_кого. Если указано действие off, то содержимое этого поля может быть пустым - оно никак не анализируется в такой ситуации, хотя и обязано присутствовать.

дата_по-русски - то же самое, что @секунды, но в формате дд.мм.гггг. Поле добавлено только для удобочитаемости человеком. Теоретически возможно отказаться от первого поля @секунды, чтобы файл можно было править вообще вручную.

RREGTEST

Подключаемая библиотека-сценарий. Содержит только одну функцию validdate(), которая изначально задумывалась как полноценный валидатор дат, но позже была упрощена.

Дата проверяется на минимальную правильность по шаблону, примерно соответствующему дате в русском формате дд.мм.гггг. Причем этот шаблон очень нечеткий и допускает, например, 39.00.2016 (тридцать девятое число нулевого месяца). Это сделано умышленно, чтобы просто удостовериться, что в параметре передана именно дата, а не что-то другое: при любом большем несоответствии скрипт вываливается с exit 1, останавливая работу вызвавших его скриптов.

Дальше дата разбирается на запчасти и день меняется местами с месяцем, образуя дату в американском формате мм/дд/гггг: увы и ах, но юниксы были написаны американцами и штатная date никак не воспринимает на входе русский формат. Японский гггг/мм/дд, кстати, тоже.

Сформированную дату пытаемся вывести на экран, и тут уже пусть date сама проверяет ее допустимость. Неправильно что-то? Вываливаемся!

На случай, если дата допустимая, отдельно проверяется год - он должен быть не меньше предыдущего и не больше следующего. Сейчас просто выводится сообщение, если год неправильный, но это можно использовать для каких-нибудь более жестких проверок

ZIMPARSER

Скрипт-обёртка, запускаемый по крону. Устанавливает некоторые служебные переменные и вызывает собственно обработчик файла настроек.
Файл со скриптом обработчика и файл настроек должны находиться в одном с ним каталоге. Возможно, в будущем их местоположение будет передаваться в параметрах.

ZIMAWK.AWK

Основной обработчик файла данных zimsched.dat. Файл считывается построчно и если строка проходит ряд проверок, выполняется указанное в ней действие.
Проверки:
1. если в строке не пять полей, то строка считается неправильной и не обрабатывается, о чем делается запись в логе
2. если указано действие skip, то эта строка была обработана на прошлом проходе и ее обработка не требуется. Строка пропускается.

Прошедшая эти проверки строка считывается в массив для последующего переформирования файла данных. Если дата действия еще не наступила, то строка дальше не обрабатывается.

В подходящих для обработки строках действие заменяется с on или off на skip, чтобы удалить их на следующем проходе, и вызывается zmonoff для выполнения нужной операции.

После обработки всего файла создается временный файл zmsched.new, в который первой строкой выводится дата/время его создания, а далее построчно дописывается содержимое массива.

Старый файл данных переименовывается в zmsched.DOW, где DOW - номер дня недели, одна цифра, что позволяет вести историю изменений файла данных за последнюю неделю.

Файл zmsched.new копируется под именем zmsched.dat и система готова к новому циклу.

---
Использовались материалы:

Bash Scripting Guide

AWK

Еще awk и sed.

Под катом исходники.