вторник, 20 октября 2015 г.

show disabled users and not hiden from address book (include witout mailbox)
get-mailbox -ResultSize Unlimited * | where {(-not $_.HiddenFromAddressListsEnabled) -and (-not (get-aduser $_.samaccountname).enabled)} | sort-object name | select name, alias

вторник, 11 августа 2015 г.

четверг, 6 августа 2015 г.

сразу несколько штук для памяти:
работа в скрипте с длинными именами+пробелы (linux bash)

#!/bin/bash
find /tmp -name "*.gz" -type f -print0 | while read -d $'\0' i
do
  gzip -d "$i"
done

=========

приравнять пользователя по правам и затем отобрать их назад(windows powershell)
# {}.memberof <===> Select-Object -ExpandProperty memberof ------ выбор объекта
#сохраняем текущие группы в файл
(Get-ADUser -Identity SaraDavis -property memberof).memberof | export-clixml SaraDavis-memberof.xml
#назначаем
(Get-ADUser -Identity User123 -property memberof).memberof | Add-ADGroupMember [-members] SaraDavis[,User2,User3]

#а теперь отбираем
$old1=import-clixml SaraDavis-memberof.xml
foreach($i in (Get-ADPrincipalGroupMembership -Identity SaraDavis -property memberof).memberof){
  if(-not($old1 -contains $i)){"$i" | Remove-ADGroupMember SaraDavis}}


profit

четверг, 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)

четверг, 14 мая 2015 г.

How to prevent python decompile procedure?
Unfortunatly, python is a interpretation programming language
How we can defence our authority rights?
One way: use gcc and write python module for some critical data, for example some often used function or constats.

Как защитить python-код от декомпиляции?
Хреновость состоит в том что python является интерпритационным языком, а как известно любые программы компиляции в байт-код несостоятельны против декомпиляторов. 
(такие процедуры как py_compile.compile или даже py_installer - это все не годится)
Проще говоря если хочешь защитить код то стандартным способом из python это хрен сделаешь. Как быть? Ответ один: использовать пакет для python development и писать python-модуль который будет содержать некие критические данные, будь-то функции или константы.

apt-get install python-dev

Напишем-ка для примера модуль одна функция которого будет возвращать login для сайта superjob

#include <Python.h>

char *
_SJ1LOGIN(void)
{
    return "sj1loginname";
}

static PyObject*
SJ1LOGIN(PyObject* self, PyObject* args)
{
    return Py_BuildValue("s", _SJ1LOGIN());
}

static PyMethodDef SecureMethods[] = {
    {"sj1login", SJ1LOGIN, METH_NOARGS, "superjob login name"},
    {NULL, NULL, 0, NULL}
};

PyMODINIT_FUNC
initsecuredata(void)
{
    (void) Py_InitModule("securedata", SecureMethods);
}

Так же создадим в том же каталоге py-файлик для компиляции этого всего дела и назовем его setup.py

from distutils.core import setup, Extension

module1 = Extension('securedata', sources = ['securedata.c'])

setup (name = 'securedata',
        version = '1.0',
        description = '',
        ext_modules = [module1])

делаем 
python setup.py build

в каталоге build ищем securedata.so
далее это дело можно подцепить из ipython:

import securedata
print(securedata.sj1login())

что и требовалось доказать
литература:


вторник, 5 мая 2015 г.

Фото для echange в AD:

Пункт первый: Схема AD. Требуется небольшое редактирование схемы — щелчок аттрибуту thumbnailPhoto, для его репликации в Global Catalog.

Если вы еще не регистрировали оснастку MMC “AD Schema” — самое время:
Regsvr32 schmmgmt.dll
Открывайте оснастку “AD Schema”
Разверните раздел “Attributes” и найдите thumbnailPhoto. (В оснастке AD Schema аттрибуты сортируются по ldapDisplayName).
На странице свойств аттрибута выберите “Replicate this attribute to the Global Catalog” , и OK.

Теперь можно приступать к загрузке фотографий с помощью командлета Import-RecipientDataProperty, как показано ниже:

Import-RecipientDataProperty -Identity "Vasya Pupkin" -Picture -FileData ([Byte[]]$(Get-Content -Path "C:picturesVasyaPupkin.jpg" -Encoding Byte -ReadCount 0))

Можно задействовать поточную операцию, применяя Get-Mailbox с фильтрами (или Get-DistributionGroupMember если вам нужны члены групп), а результаты потом отправить в циклforeach. Имена пользователей и пути до изображений можно брать из CSV/TXT списка.



Убрать фотку:

Q. How can I remove a user's photo from Active Directory?
A. The Import-RecipientDataProperty and Export-RecipientDataProperty cmdlets allow you to import and export the photo blob to and from thumbnailPhoto attribute, but there's no Remove-RecipientDataProperty cmdlet to remove it. You can use the RemovePicture switch of Set-Mailboxcmdlet to remove a user's photo. For example:

Set-Mailbox "Bharat Suneja" -RemovePicture

You can also use Active Directory tools such as ADSIEdit to null the thumbnailPhoto attribute.

If you want to disable GAL Photos in Outlook 2010 but want to retain 
the thumbnail for other applications, you can do so using a client-side 
registry value or group policy setting, as answered above.



=====================

литература:

http://maximumexchange.ru/2010/03/15/gal-photos-in-exchange-2010-and-outlook-2010/

https://social.technet.microsoft.com/Forums/ru-RU/efcfec6e-0244-4a6f-b6a8-9859a981aa9f/-outlook?forum=exchange2010ru


четверг, 19 марта 2015 г.

Сохраняем телефонные разговоры asterisk

[default-ololo]
exten => _X.,1,Set(dirname="/var/www/asterisk/mp3/${STRFTIME(${EPOCH},,%d_%m_%Y)}")
SIPCALLID=${SIPCALLID}" >> /tmp/1111.txt)
exten => _X.,n,Set(fname="${STRFTIME(${EPOCH},,%d_%m_%Y_%H:%M)}-${CALLERID(num)}-${EXTEN}")
exten => _X.,n,Set(monopt= nice -n 14 /usr/bin/lame -b 16 --silent "/tmp/wav/${fname}.wav" "${dirname}/${fname}.mp3" && chmod o+r,g+r "${dirname}/${fname}.mp
exten => _X.,n,MixMonitor(/tmp/wav/${fname}.wav,b,${monopt})
exten => _X.,n,Dial(SIP/avaya/${EXTEN})
exten => _X.,n,Hangup()