среда, 26 ноября 2014 г.

Немного о часовых поясах в Python 2.7

Началось всё с того, что я столкнулся с невозможностью сравнить абсолютное и относительное время в Python. PostreSQL возвращал абсолютное, а datetime.now() относительное. Про разницу очень хорошо расписано здесь:
http://asvetlov.blogspot.ru/2011/02/date-and-time.html
Проблема оказалась лишь в том, что dateutil не в курсе последнего изменения часовых поясов. Смещения он берет из time.timezone, а оно в свою очередь возвращает -11 для моего часового пояса. Откуда он его берет пока не разобрался. Поставил pytz и tzlocal по рекомендации отсюда:
http://regebro.wordpress.com/2012/09/12/presenting-tzlocal-a-simple-way-to-get-your-local-timezone-for-pytz/
>>> from tzlocal import get_localzone
>>> from datetime import datetime
>>> print(datetime.now(get_localzone()))
2014-11-27 08:31:01.458893+10:00 

вторник, 11 ноября 2014 г.

Не работал squid_ldap_group

Настраивал связку Squid+AD. Negotiate авторизация завелась без проблем, захотелось, чтобы пользователи ходили по группам из LDAP. По мануалам настроил external acl, но оно не взлетело. В cache.log при запуске сыпалось:
2014/11/12 10:04:41| helperOpenServers: Starting 5/5 'squid_ldap_group' processes
2014/11/12 10:04:41| commBind: Cannot bind socket FD 31 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 32 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
2014/11/12 10:04:41| commBind: Cannot bind socket FD 34 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 35 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
2014/11/12 10:04:41| commBind: Cannot bind socket FD 37 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 38 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
2014/11/12 10:04:41| commBind: Cannot bind socket FD 39 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 40 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
2014/11/12 10:04:41| commBind: Cannot bind socket FD 41 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| commBind: Cannot bind socket FD 42 to [::1]: (99) Cannot assign requested address
2014/11/12 10:04:41| ipcCreate: Failed to create child FD.
2014/11/12 10:04:41| WARNING: Cannot run '/usr/lib/squid3/squid_ldap_group' process.
Вилы были в том, что squid был собран с поддержкой ipv6, и он пытался взаимодействовать со своими плагинами с помощью ipv6. Чтобы этого избежать, нужно явно указать, что необходимо использовать ipv4:
external_acl_type ldap_verify ipv4 %LOGIN /usr/lib/squid3/squid_lda...