четверг, 11 августа 2016 г.

firefox: разрешить неподписанные расширения

Оказывается, просто:

1. В адресной строке вбить about:config

2. В открывшемся списке опций найти xpinstall.signatures.required и сделать её false

пятница, 17 июня 2016 г.

MSSQL: подслушать обмен клиентского приложения с сервером

На самом деле иногда бывает сильно интересно, какие sql-запросы посылает клиентское приложение. Если дело происходит под линуксом, через unixodbc, то там легко - приписываем в odbcinst.ini (который находится где-то то ли в /etc, то ли в /usr/local/etc) пару строк:
[ODBC]
Trace=Yes
TraceFile=/home/huh-muh/sql.log
и в своем домашнем каталоге лицезреем весь обмен. Под windows, думалось, должны быть аналогичные механизмы, но всё оказалось чуть-чуть сложнее.

Во-первых, есть хорошая статья о том, как включить трассировку для клиентов SQL Servera. Вкратце:

1. Стаскиваем и разворачиваем самораспаковывающийся архив по этой ссылке.

2. В реестре находим (или создаём) ветку
HKEY_LOCAL_MACHINE\Software\Microsoft\BidInterface\Loader
в которой создаём ключ с именем ":Path" (двоеточие тут вроде как существенно) и значением:
"%SYSTEMROOT%\Microsoft.NET\Framework\v2.0.50727\ADONETDiag.dll", если хотим трассировать ADO.NET
или
"%SYSTEMROOT%\SYSTEM32\msdaDiag.dll", если хотим трассировать прочих клиентов (mdac, dao и т.п.)

3. в кучке каталогов из п.1 находим MOF_Files и в нем выполняем команду:
mofcomp all.mof (а чего мелочиться-то)
эта команда компилирует и регистрирует трассировочные схемы (без понятия, что это такое). Результат этой регистрации можно проверить командой:
Logman query providers

4. Затем забираемся в корневой каталог этого распакованного архива и в нем выполняем команду:
Logman start MyTrace -pf "control_GUID_files/ctrl.guid.all" -o Out.etl -ets
в результате чего в этом каталоге создастся файл Out.etl, содержащий интересующую нас трассировку.
Тут есть маленькая тонкость. Если эта команда файл ctrl.guid.all не увидит (ну там, путь неправильно указали, или ещё что-то), она сильно не огорчится, но ничего ловить не будет. Поэтому надо внимательно присмотреться, пишет ли она в момент запуска раздел "Поставщики:" , в котором перечисляет guid-ы механизмов, которые будет отслеживать.

5. Запускаем приложение, которое хотим отследить, и пока мы там работаем, в файле из п.4 копится инфа в неудобоваримом виде.

6. Когда по нашему мнению наловится достаточно информации, завершаем трассировку командой:
Logman stop MyTrace -ets

7. Наконец, перегоняем информацию из этого Out.etl во что-то более текстовое командой:
TraceRPT /y Out.etl

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

Этот огорчительный момент вернул меня к старому доброму подслушиванию сети. Обычно я использую Packetyzer, а тут наткнулся на Microsoft Network Monitor 3.4 и решил попробовать его. Там, правда, было написано, что нужно ещё установить дополнительно NMDecrypt, но, по-моему, он ловит всё и так.(*) Для более новых систем есть Microsoft Message Analyzer, но у меня WinXP, так что тут без вариантов. Правда, результатом подслушивания является мешанина данных в кодировке ANSI и UCS-2e, но с этим приходится мириться, главное, что хоть какие-то обрывки получаются в читабельном виде.

* на одной машине потребовалось ещё доустановить Network Monitor Parsers и выбрать в меню Tools - пунт Options - вкладка Parser profiles профиль Default, чтобы программа перестала жаловаться "unable to build conversation"

воскресенье, 8 мая 2016 г.

msiexec: журналирование

Оказывается, при инсталляции пакета .msi можно включить журналирование. Делается это так:
msiexec /i пакет.msi /L*V имя_файла_журнала.log

воскресенье, 10 апреля 2016 г.

vim: небольшая шпаргалка

Vim при запуске читает настройки из файла ~/.vimrc. Если хочется, чтобы для каждого проекта эти настройки были свои, нужно в ~/.vimrc прописать:
set exrc
set secure
Вторая строка тут вроде как отключает в vim возможность выполнять из-под себя команды оболочки.

Так или иначе, теперь vim будет сперва искать и подхватывать файлы .vimrc, находящиеся в текущей директории. Например, с таким содержанием:
syntax off
set shiftwidth=4
set tabwidth=4
set expandtab
Ну перестала мне с каких-то пор нравиться подсветка синтаксиса. Это, конечно, сильно упрощало бы чтение кода и ускоряло бы разработку, но я стал совсем казуалом, так что подобные штуки уже непринципиальны.

вторник, 5 апреля 2016 г.

Windows: сбросить лишние терминальные сессии

Если при попытке прицепиться к терминальному серверу по RDP, например, командой
mstsc /v:myServer
выдаётся ошибка "Превышено максимальное допустимое количество подключений", то остаётся только одно: выкинуть кого-нибудь из уже подключенных пользователей.

Как оказалось, делается это достаточно просто:

1. Авторизуемся на сервере командой:
net use \\myServer

2. Просматриваем список терминальных сессий командой:
qwinsta /server:myServer

3. Прибиваем лишние сеансы командой:
rwinsta /server:myServer <id сессии>

понедельник, 28 марта 2016 г.

Linux: cron и mpg123

Обновился с ubuntu 14.10 до 15.10 - отвалился будильник.

Ну, то есть, в crontab была строчка:
30  07  *  *  1-5  huhmuh   /home/huhmuh/budilnik.sh
которая успешно выполняла скрипт budilnik.sh:
#!/bin/sh
mpg123 -l 0 "/home/huhmuh/budilnik.mp3"
возвращавший меня в реальность каждое утро.

После обновления эта строчка перестала подавать признаки жизни, зато в /var/log/syslog появились такие интересные сообщения:
pulseaudio[12765]: [pulseaudio] source.c: Default and alternate sample rates are the same.
pulseaudio[12765]: [pulseaudio] socket-server.c: bind(): Адрес уже используется
pulseaudio[12765]: [pulseaudio] module.c: Failed to load module "module-esound-protocol-unix" (argument: ""): initialization failed.
pulseaudio[12765]: [pulseaudio] main.c: Module load failed.
pulseaudio[12765]: [pulseaudio] main.c: Не удалось инициализировать демон.
pulseaudio[12762]: [pulseaudio] main.c: Не удалось запустить демон.

Не знаю, что это такое, но побороть как-то удалось. Правда, теперь вышеупомянутая строчка выглядит так:
30  07  *  *  1-5  huhmuh   export XDG_RUNTIME_DIR=/run/user/1000 && /home/huhmuh/budilnik.sh
(конкретное значение переменной окружения XDG_RUNTIME_DIR подсмотрел командой printenv)

понедельник, 25 января 2016 г.

Разбирал тут у себя в почте квитанции о недоставленных сообщениях. Среди привычных "mailbox is full" и "account is disabled" обнаружилось зловещее:
Message was not accepted -- invalid mailbox. Local mailbox XXX@mail.ru is unavailable: user is terminated
Вот прямо даже не знаю, что и подумать...