LINUX.ORG.RU

Сообщения cyclon

 

Kerberos + wildfly

Добрых суток. Пытаюсь прикрутить kerberos к wildfly 15.0.1 (забегая вперёд, оно работает почти как надо).

Вот пример с apache+krb:

<Location />
	AuthType Kerberos
	AuthName "Kerberos authenticated intranet"
	KrbAuthRealms MY.DOMAIN.COM
	KrbServiceName HTTP/srv.my.domain.com
	Krb5Keytab /etc/srv.my.domain.com.keytab
	KrbMethodNegotiate On
	KrbMethodK5Passwd On
	require valid-user
</Location>
Тут всё работает, машины из домена заходят, у прочих появляется окно запроса логина и пароля, после ввода то же заходят.

А вот c дикой мухой всё сложнее. Вот конфиг:

/subsystem=undertow/application-security-domain=mySPNEGO:read-resource
{
    "outcome" => "success",
    "result" => {
        "enable-jacc" => false,
        "enable-jaspi" => true,
        "http-authentication-factory" => "spnegoHTTP",
        "integrated-jaspi" => true,
        "override-deployment-config" => true,
        "security-domain" => undefined,
        "setting" => undefined
    }
}
/subsystem=elytron/http-authentication-factory=spnegoHTTP:read-resource
{
    "outcome" => "success",
    "result" => {
        "http-server-mechanism-factory" => "global",
        "mechanism-configurations" => [
            {
                "mechanism-name" => "SPNEGO",
                "credential-security-factory" => "krbSPNEGO"
            },
            {"mechanism-name" => "BASIC"}
        ],
        "security-domain" => "spnegoSD"
    }
}
/subsystem=elytron/kerberos-security-factory=krbSPNEGO:read-resource
{
    "outcome" => "success",
    "result" => {
        "debug" => true,
        "fail-cache" => undefined,
        "mechanism-names" => [
            "KRB5",
            "SPNEGO"
        ],
        "mechanism-oids" => undefined,
        "minimum-remaining-lifetime" => 0,
        "obtain-kerberos-ticket" => true,
        "options" => undefined,
        "principal" => "HTTP/srv.my.domain.com@MY.DOMAIN.COM",
        "request-lifetime" => 2147483647,
        "required" => false,
        "server" => true,
        "wrap-gss-credential" => false,
        "path" => "srv.my.domain.com.keytab",
        "relative-to" => "jboss.server.config.dir"
    }
}
/subsystem=elytron/security-domain=spnegoSD:read-resource
{
    "outcome" => "success",
    "result" => {
        "default-realm" => "realmSPNEGO",
        "outflow-anonymous" => false,
        "outflow-security-domains" => undefined,
        "permission-mapper" => "default-permission-mapper",
        "post-realm-principal-transformer" => undefined,
        "pre-realm-principal-transformer" => undefined,
        "principal-decoder" => undefined,
        "realm-mapper" => undefined,
        "realms" => [{
            "realm" => "realmSPNEGO",
            "role-decoder" => "groups-to-roles"
        }],
        "role-mapper" => undefined,
        "security-event-listener" => undefined,
        "trusted-security-domains" => undefined
    }
}
/subsystem=elytron/properties-realm=realmSPNEGO:read-resource
{
    "outcome" => "success",
    "result" => {
        "groups-attribute" => "groups",
        "groups-properties" => {
            "path" => "spnego-roles.properties",
            "relative-to" => "jboss.server.config.dir"
        },
        "users-properties" => {
            "path" => "spnego-users.properties",
            "relative-to" => "jboss.server.config.dir",
            "digest-realm-name" => "MY.DOMAIN.COM",
            "plain-text" => true
        }
    }
}
$ cat spnego-users.properties 
aivanov@MY.DOMAIN.COM=
test@MY.DOMAIN.COM=
$ cat spnego-roles.properties
...<empty>...

Если заходить с машины в домене под пользователем, что прописан в spnego-users.properties, то всё работает. Но если это делать от другого пользователя, то не пускает.

Во всех статьях, что находились гуглом, предлагается использовать properties-realm с файлами пользователей и ролей из-за чего аутнетификация проходит только для тех, кто записан в файле пользователей (как в примере выше). Если же там никого не прописовать

09:46:36,027 TRACE [org.wildfly.security] (default task-1) PropertiesRealm: identity [test@MY.DOMAIN.COM] does not exist
09:46:36,027 TRACE [org.wildfly.security] (default task-1) Authorization failed - realm identity does not exists
Собственно это первая проблема, которую не знаю как решить. Вторая, состоит в том, что при использовании BASIC при вводе логина и пароля, пользователя не пускает (даже если он есть в spnego-users.properties), как это происходит в apache
09:56:52,410 TRACE [org.wildfly.security] (default task-1) Handling MechanismInformationCallback type='HTTP' name='BASIC' host-name='srv.my.domain.com' protocol='http'
09:56:52,410 TRACE [org.wildfly.security] (default task-1) Handling AvailableRealmsCallback: realms = []
09:56:52,410 DEBUG [org.wildfly.security.http.password] (default task-1) Username authentication. Realm: [null], Username: [test@MY.DOMAIN.COM].
09:56:52,410 TRACE [org.wildfly.security] (default task-1) Handling NameCallback: authenticationName = test@MY.DOMAIN.COM
09:56:52,410 TRACE [org.wildfly.security] (default task-1) Principal assigning: [test@MY.DOMAIN.COM], pre-realm rewritten: [test@MY.DOMAIN.COM], realm name: [realmSPNEGO], post-realm rewritten: [test@MY.DOMAIN.COM], realm rewritten: [test@MY.DOMAIN.COM]
09:56:52,410 TRACE [org.wildfly.security] (default task-1) Attempting to authenticate account test@MY.DOMAIN.COM using LegacyPropertiesSecurityRealm.
09:56:52,410 DEBUG [org.wildfly.security.http.basic] (default task-1) User test@MY.DOMAIN.COM authentication failed.
09:56:52,410 TRACE [org.wildfly.security] (default task-1) Handling AuthenticationCompleteCallback: fail

Может кто сталкивался с этим или располагает нормальной статьёй по этому поводу. Хотелось бы обойтись без LDAP (ведь apache и так может).

Заранее спасибо.

 , ,

cyclon
()

Сборка приложения под java 11 для WildFly 14.0.1

Добрых суток.

Пытаюсь собрать проект (тестовый, т.е. без ничего) исползую 11ую яву, в нём есть бин:

import javax.ejb.Local;

@Local
public interface Bean {
    public String getText();
}
import javax.ejb.LocalBean;
import javax.ejb.Stateless;

@Stateless
@LocalBean
public class MyBean implements Bean {
	public String getText() {
		return "test bean";
	}
}

WildFly запускается с указанием версии:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

В градле указываю версию:

sourceCompatibility = 11
targetCompatibility = 11

Но при деплое получаю такое:

{"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"restapp.war\".WeldStartService" => "Failed to start service
    Caused by: org.jboss.weld.exceptions.WeldException: WELD-001524: Unable to load proxy class for bean Session bean [class MyBean with qualifiers [@Any @Default]; local interfaces are [Bean, MyBean] with class class MyBean using classloader ModuleClassLoader for Module \"deployment.restapp.war\" from Service Module Loader
    Caused by: java.lang.RuntimeException: java.lang.ClassFormatError: Illegal class name \"/MyBean$Proxy$_$$_Weld$EnterpriseProxy$\" in class file /MyBean$Proxy$_$$_Weld$EnterpriseProxy$
    Caused by: java.lang.ClassFormatError: Illegal class name \"/MyBean$Proxy$_$$_Weld$EnterpriseProxy$\" in class file /MyBean$Proxy$_$$_Weld$EnterpriseProxy$"}}

Может кто знает, WildFly вообще нормально работает с 11ой явой или может изменился способ создания бинов?

П.С. всё то же самое под 1.8 собирается и деплоится прекрасно.

Заранее спасибо.

 , javax,

cyclon
()

Multipart и wildfire

Добрых суток.

Пытаюсь использовать resteasy-multipart-provider (из org.jboss.resteasy.). Но как только в зависимостях я его подключаю

compile group: 'org.jboss.resteasy', name: 'resteasy-multipart-provider', version: '3.6.2.Final'
rest перестаёт инициализвароться и я наблюдаю ошибку 404, а в логах wildfire (WildFire 14.0.1) исчезает
Deploying javax.ws.rs.core.Application: class RestApplication
Т.е. пока эта зависимость закомментирована, всё работает и rest отвечает. Я так полагаю, что resteasy подтягивает что-то ещё, что ломает текущий rest. Добавление jboss-deployment-structure.xml с таким содержимым не помогает
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <!--deployment>
        <exclude-subsystems>
            <subsystem name="resteasy" />
        </exclude-subsystems>
        <exclusions>
            <module name="javaee.api" />
            <module name="javax.ws.rs.api"/>
            <module name="org.jboss.resteasy.resteasy-multipart-provider" />
        </exclusions>
        <local-last value="true" />
    </deployment-->
</jboss-deployment-structure>

Как задействовать resteasy-multipart-provider и не сломать rest?

Заранее спасибо.

 , resteasy, wildfire

cyclon
()

Как проверить качество канала (vpn)

Есть два хоста связанных через впн (openvpn). Если проверять всякими iperf(3) то как бы скорость норм 50-70мбит, да и пинг 2-3мс, но при всём этом vnc достаточно ощутимо подтормаживает (лагает), т.е. не отклик на движение курсором и нажатие кнопок, а именно частота кадров (ну к примеру если смотреть видео в разрешении до 1024х700, выглядит как 10-12фпс).

Вопрос в том, чем можно проверить канал без использования vnc (просто не удобно), что бы подбирать параметры openvpn и e.t.c.

Спасибо.

 , ,

cyclon
()

Логгирование трафика с port mirror

Доброго времени суток.

Есть ли в природе что-то, что могло вести логи того, что получило с port mirror (сниффер)? Т.е. что-то типа ntopng но с логированием и возможностью потом посмотреть кто куда и обязательно с возможностью смотреть SNI в ssl.

 , , ntopng

cyclon
()

forward если A запись не найдена

Добрых суток.

Есть сервер с bind 9.8, есть зона local.ru для которой он мастер. Есть ли способ forward-ить запросы, для которых нет А записи на этом сервере на другой сервер?

Заранее спасибо.

 , ,

cyclon
()

SSL: NO_SHARED_CIPHER

Добрых суток.

Есть небольшой многопоточный сервер на питоне, которому нужно обслуживать ssl подключения. Для определения имени хоста и выбора подходящего сертификата, используется SNI в TLS. Для этого использую set_servername_callback, для задания функции в которой происходит обработка имени сервера.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import time
import socket
import threading
import ssl

class client(threading.Thread):
	def __init__(self, sock, host, port):
		threading.Thread.__init__(self)
		self.daemon = True
		self.srvname = None
		self.sock = sock
		self.host = host
		self.port = port
		self.context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
		self.context.set_servername_callback(self.sni)

	def sni(self, sock, sni, context):
		self.srvname = sni
		if self.srvname:
			self.context.load_cert_chain(certfile = self.srvname + '.crt', keyfile = self.srvname + '.key')
		else:
			self.context.load_cert_chain(certfile = 'server.crt', keyfile = 'server.key')
		print "SNI: ", sni

	def run(self):
		try:
			sslsock = self.context.wrap_socket(self.sock, server_side=True)
			sslsock.settimeout(5)
                        ...тут что-то делаем...
		except socket.error as msg:
			print "Exception in client thread: " + str(msg)

class server(threading.Thread):
	def __init__(self, host, port):
		threading.Thread.__init__(self)
		self.daemon = True
		self.port = port
		self.host = host
		self.clients = []
		self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
		self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

	def run(self):
		self.sock.bind((self.host, self.port))
		self.sock.listen(5)
		while True:
			sock, addr = self.sock.accept()
			clnt = client(sock, addr[0], addr[1])
			clnt.start()
			self.clients.append(clnt)

if __name__ == '__main__':
	srv = server('127.0.0.1', 9999)
	srv.start()

	try:
		while True:
			time.sleep(1)

	except KeyboardInterrupt:
		print "\rGoodbye!"
		sys.exit()

Но как бы я не менял код получаю такое:

SNI: SNI:  server.local.ru
 server.local.ru
Exception in client thread: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:590)
 Exception in client thread: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:590)
SNI:  server.local.ru
Exception in client thread: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:590)
Exception in client thread: [SSL: INAPPROPRIATE_FALLBACK] inappropriate fallback (_ssl.c:590)
SNI:  server.local.ru
Exception in client thread: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:590)
SNI:  server.local.ru
Exception in client thread: [SSL: NO_SHARED_CIPHER] no shared cipher (_ssl.c:590)
Exception in client thread: [SSL: INAPPROPRIATE_FALLBACK] inappropriate fallback (_ssl.c:590)

Есть ли способ заставить работать такую конструкцию?

Заранее спасибо.

 , ,

cyclon
()

Проблемы с openvpn только на одном провайдере

День добрый, есть openvpn сервер и клиент. При подключении с этими же настройками через мобильный интернет никаких проблем нет, всё работает. Однако с этими же настройками через проводной интернет наблюдается проблема с передачей данных. tcpdump'ом на tun0 сервера видны только запросы к днс, пинги идут. Но ничего из локальной сети не открывается и даже не ловится tcpdump'ом. Пробовал всякие mtu-test, mssfix, fragment, ничего не помогает.

Клиент:

client
proto tcp
remote XXX.XXX.XXX.XXX
dhcp-option DNS 10.10.1.1
dev-type tun
dev tap
tun-mtu 1430
port 81
pull
script-security 3
cipher BF-CBC
auth-user-pass
comp-lzo adaptive
keysize 128
...
Сервер:
...
keepalive 10 120

verb 4
mute 3
daemon

server 10.10.1.0 255.255.255.0

port 81
topology subnet
proto tcp
dev tun0
client-to-client
tun-mtu 1430

cipher bf-cbc
keysize 128
comp-lzo yes
tls-server

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so /etc/pam.d/login
client-cert-not-required
username-as-common-name

client-config-dir /etc/openvpn/ccd
ifconfig-pool-persist /tmp/openvpn/ip-pool2 86400
script-security 2

push "dhcp-option DNS 10.10.1.1"
push "route 192.168.0.0 255.255.255.0 10.10.1.1"

log    /var/log/openvpn/openvpn-server2.log
status /var/log/openvpn/openvpn-server2-status.log

Как можно починить? Полагаю проблема в mtu, но уже не понятно куда двигаться, ставил tun-mtu 1400 ничего не меняется.

Заранее спасибо.

 ,

cyclon
()

Content-Length меняет размер для одного и того же файла

День добрый.

Делаю пост из браузера (ff в моём случае) и каждый (не всегда, но зависимость выяснить не получилось) раз меняется значение Content-Length.

Вот форма отправки файла:

line = """
<html><body>
<form enctype="multipart/form-data" method="post">
<p>File: <input type="file" name="file"></p>
<p><input type="submit" value="Upload"></p>
</form>
</body></html>"""
Вот заголовки двух подряд POST'ов:
{'Content-Length': '1009778941', 'Accept-Language': 'ru', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv', 'Host': '127.0.0.1', 'Referer': 'http', 'Content-Type': 'multipart/form-data; boundary=---------------------------31697937816872145351280698052'}

{'Content-Length': '1009778939', 'Accept-Language': 'ru', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'keep-alive', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv', 'Host': '127.0.0.1', 'Referer': 'http', 'Content-Type': 'multipart/form-data; boundary=---------------------------7535397141970478903656988012'}

Это нормально поведение?

П.С. проверял tcpdump'ом заголовок именно такой, тут нет ошибки при парсенге запроса.

Заранее спасибо.

 , ,

cyclon
()

Прокси для не веб приложения.

Есть приложение которое гоняет байты до сервера и обратно. Можно ли с помощью apache и/или nginx пробрасвать это приложение наружу? Нужно это потому, что в некоторых случаях интернет доступен либо через прокси, либо доступен только 80 порт (иногда 443). Или же нужно делать в серверной части поддержку POST/GET?

Заранее спасибо.

 , , ,

cyclon
()

загрузка файла на python с помощью CGIHTTPServer

День добрый, возник такой вопрос. Ниже есть два варианта обработки POST запроса загрузки файла.

class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
	def do_POST(self):
		form = cgi.FieldStorage(
			fp=self.rfile,
			headers=self.headers,
			environ={'REQUEST_METHOD':'POST',
				'CONTENT_TYPE':self.headers['Content-Type'],
			})
		length = int(self.headers['content-length'])
		data = form['file'].file.read(length)
		open("/tmp/file.a", "wb").write(data)
		self.send_response(200)
class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
	def do_POST(self):
		length = int(self.headers['content-length'])
		data = self.rfile.read(int(length))
		with open("/tmp/file.b", "wb") as f:
			f.write(data)
		self.send_response(200)
Но в первом случае загрузка идёт очень медленно (на loopback скорость не превышает 900КБ/с), а во-втором на полной скорости (макисмум, что видел 100МБ/с). Но во-втором случае в начало файла дописываются куски заголовков:
------WebKitFormBoundaryNWzcRXF9BitXxqdz
Content-Disposition: form-data; name="file"; filename="debian-8.1.0-amd64-netinst.iso"
Content-Type: application/x-cd-image

Можно конечно, во-втором случае, парсить начало загрузки и пропускать до первой пустой строки, но как-то это не кошерно. Что можно сделать в обоих случаях?

Заранее спасибо.

 , ,

cyclon
()

ppp через нуль модем, через socat

Добрых суток, не получается настроить ppp через null modem. Всё осложняется тем, что один serial интерфейс в qemu машине

-serial telnet:127.0.0.1:10232,server,nowait
, а другой создаётся socat:
# socat -d -d TCP:localhost:10232 pty,nonblock,waitlock=/var/run/tty36.lock,raw,echo=0
# ln -s /dev/pts/36 /dev/ttyS99
Вот настройки на вм:
# cat options.ttyS1 
crtscts
lock
192.168.1.1:192.168.1.2
debug
local
noauth
nodeflate
nobsdcomp
на хост машине:
# cat options.ttyS99 
crtscts
lock
192.168.1.2:192.168.1.1
debug
local
noauth
nodeflate
nobsdcomp

Если после всего этого запустить pppd, то на вм:

# pppd nodetach /dev/ttyS1
using channel 37
Using interface ppp0
Connect: ppp0 <--> /dev/ttyS1
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
LCP: timeout sending Config-Requests
Connection terminated.
Modem hangup

на хосте:
# pppd nodetach /dev/ttyS99
Removed stale lock on ttyS99 (pid 20840)
using channel 19
Using interface ppp0
Connect: ppp0 <--> /dev/ttyS99
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xfe82ce78> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x527e8860> <pcomp> <accomp>]
LCP: timeout sending Config-Requests
Connection terminated.
Modem hangup

При этом echo «something» > /dev/ttyS1(S99) отрабатывают и через cat /dev/ttyS1(99) виден вывод.

П.С. да-да нужно именно serial интерфейс в qemu и на хосте :-)

Что не так настроено?

Спасибо.

 ppp null-modem socat

cyclon
()

Как быстро передать файл в apache cgi?

День добрый. Пытаюсь передать с помощью httplib файл в apache cgi.

Клиент:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import urllib
import httplib
import sys

conn = httplib.HTTPConnection("127.0.0.1")
file = open("in.zip")

seek_data = 0
data = file.read(4096)
while data:
  conn.connect()

  size_data = sys.getsizeof(data)
  struct = {'seek': seek_data, 'data': data}
  encode_data = urllib.urlencode(struct)
  seek_data += size_data

  conn.request("POST", "/", encode_data)
  response = conn.getresponse()
  conn.close()

  data = file.read(4096)

Сервер:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# enable debugging

import cgitb
import sys
import os
import urlparse

cgitb.enable()

print "Content-Type: text/plain\r\n\r\n"

str = ''
for char in sys.stdin.readline():
  str += char

pars = urlparse.parse_qs(str)
data_block = pars['data'][0]
seek_block = pars['seek'][0]
size_data = sys.getsizeof(data_block)

if int(seek_block) == 0:
  if os.path.exists('out.zip'):
    os.remove('out.zip')
  dumped = open('out.zip', 'wb')
else:
  dumped = open('out.zip', 'a')

dumped.seek(int(seek_block), 0)
dumped.write(data_block)

Проблема в том, что процесс идёт очень долго. Как я понимаю, причина в открытии и закрытии соединения (иначе POST не работает). Увеличение размера чтения файла, результата не даёт.

Есть ли способ передать в apache cgi поток данных (из файла например) быстрее, чем через POST.

Заранее спасибо.

 , ,

cyclon
()

ScrolledWindow в gtk.Layout()

Добрых суток.

Разбираюсь с pygtk и столкнулся с такой проблемой. Если ScrolledWindow размещён в VBox, а VBox в окне, то всё нормально работает и список с прокруткой отображается. Однако если вместо VBox использовать Layout и его помещать в окно, то отображается пустое окно.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import gtk, gobject

COLUMN_STRING = 1

data = [
    [ 'first row' ],
    [ 'second row' ],
    ]

select = []

def list_selections(self, param, d=None):
    i = list(param)[0]
    select.append(data[i])

def selection_cb(selection):
    global select
    select = []
    selection.selected_foreach(list_selections)
    for e in select:
      print e

def main():
    win = gtk.Window()
    win.set_title("Main Window")
    win.connect("destroy", lambda win: gtk.main_quit())

    vbox = gtk.VBox()
    layout = gtk.Layout()
    win.add(vbox)
    #win.add(layout)

    sw = gtk.ScrolledWindow(None, None)
    sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC)
    vbox.pack_start(sw)
    #layout.put(sw, 0, 0)

    ls = gtk.ListStore(gobject.TYPE_UINT, gobject.TYPE_STRING)
    for item in data:
        iter = ls.append()
        ls.set(iter, COLUMN_STRING, item[0])
    tv = gtk.TreeView(ls)
    sw.add(tv)

    selection = tv.get_selection()
    selection.set_mode(gtk.SELECTION_MULTIPLE)
    selection.connect("changed", selection_cb)

    renderer = gtk.CellRendererText()
    col = gtk.TreeViewColumn('String', renderer, text=COLUMN_STRING)
    tv.append_column(col)
    
    win.set_default_size (200,300)
    win.show_all()
    gtk.main()
    
if __name__ == '__main__':
    main()

Это такая особенность ScrolledWindow или это можно как-то исправить?

Заранее спасибо

 ,

cyclon
()

CUCM 7.1.5.35901-1 Unrestricted

Добрых суток, прошу помощи ибо негде больше)

Буквально на днях исек сервис контракт кошек и больше не дают скачать некоторые файлы с сайта. Очень нужен исо образ CUCM 7.1.5.35901-1 Unrestricted (7.1(5b)SU6a) - UCSInstall_UCOS_UNRST_7.1.5.35901-1.sgn.iso

Лежит тут http://software.cisco.com/download/release.html?mdfid=282421166&release=7...

Если кто может выложите куда нибудь.

Заранее спасибо.

 , cucm, ,

cyclon
()

HP Care Pack EVA 4400, крик о помощи

Добрых суток, извиняюсь за оффтоп, но надеюсь на понимание.

Есть ли укого HP Care Pack (возможно нужен именно под hp eva 4400) и возможность посмотреть статью по этой ссылке?

http://h20566.www2.hp.com/portal/site/hpsc/template.PAGE/action.process/publi...

Буду очень признателен, за скриншот данной статьи, заранее спасибо!

 hp eva зло

cyclon
()

android imap клиент множит директории

Добрых суток.

Есть телефон htc one (но и на прежних моделях htc вело себя так же), сервер dovecot с настроенным imap ssl (1.2.15), ОС debian 6.0.8.

конфиг dovecot:

base_dir = /var/run/dovecot
protocols = imaps
listen = *, [::]
first_valid_uid = 1
first_valid_gid = 1
log_path = /var/log/dovecot/error.log
info_log_path = /var/log/dovecot/info.log
log_timestamp = "%Y-%m-%d %H:%M:%S "
syslog_facility = mail
ssl = yes
ssl_cert_file = /etc/ssl/domain.ru/startssl/mail.domain.ru.crt
ssl_key_file = /etc/ssl/domain.ru/startssl/mail.domain.ru.key
ssl_ca_file = /etc/ssl/domain.ru/startssl/ca.pem
verbose_ssl = yes
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = vmail
mail_location = maildir:/var/spool/mail/%d/%n
namespace private {
   inbox = yes
}
namespace shared {
}
mail_uid = mail
mail_gid = mail
mail_privileged_group = mail
mail_access_groups = mail
mail_debug = yes
protocol imap {
  login_executable = /usr/lib/dovecot/imap-login
  ssl_listen = *, [::]:993
}
  
pop3_uidl_format = %08Xu%08Xv
protocol managesieve {
}
protocol lda {
  postmaster_address = root@domain.ru
  hostname = mail.domain.ru
  rejection_subject = Rejected: %s
  rejection_reason = Your message to <%t> was automatically rejected:%n%r
  auth_socket_path = /var/run/dovecot/auth-master
}
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_verbose = yes
auth_debug = yes
auth default {
  mechanisms = plain
  passdb sql {
    args = /etc/dovecot/dovecot-sql.conf
  }
  userdb sql {
    args = /etc/dovecot/dovecot-sql.conf
  }
  user = mail
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0777
      user = mail
      group = mail
    }
    client {
      path = /var/run/dovecot/auth-client
      mode = 0777
    }
  }
}

Наблюдаю странное поведение почтового клиента смартфона, который используется для получения почты по imap'у. А именно после каждой синхронизации, у меня появляется дубль созданных вручную директорий. Т.е. я создаю в почтовом ящике директорию «Тест», нажимаю обновить и получаю две таких же директории, ещё раз обновляю, ещё одна копия. НО они множатся только в клиенте, при этом в почтовом клиенте в телефоне от моторолы такой проблемы нет. Так же такой проблемы нет в thunderbird'e и в roundcub'e.

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

Заранее спасибо.

 , , ,

cyclon
()

Debian, bridge и IPv6

Добрых суток всем.

Имеется:

- хост debian sid 2001:x:x:1::3

- kvm

- две сети real 2001:x:x:1::/64 и virtual 2001:x:x:2::/64

- на хосте два интерфейса br0 (смотрит в real, здесь же eth0 хоста) и virbr0 (смотрит в virtual)

- для real шлюз по умолчанию - вафельный роутер 2001:x:x:1::1, в этой сети клиенты

- в virtual - сервера, для неё шлюз по умолчанию является хост 2001:x:x:2::1

Возникла такая проблема, не устанавливается tcp соединение между сетями в br0 и virbr0. При этом icmpv6 ходят в одну сторону (из br0 в virbr0).

Как я понял причина в топологии, пакет идущий от клиента в br0 к серверу в virbr0 идёт через шлюз по умолчанию (вафельный роутер) (поскольку о virbr0 клиент ничего не знает).

2001:x:x:1::10 (клиент) > 2001:x:x:1::1 > 2001:x:x:1::3 > 2001:x:x:2::1 > 2001:x:x:2::20 (сервер)
Пакет от сервера в virbr0 к клиенту в br0 идёт через хост (kvm), поскольку он является маршрутизатором по умполчанию для virbr0 и сразу оказываться в сети br0 не проходя через вафельный роутер.
2001:x:x:2::20 (сервер) > 2001:x:x:2::1 > 2001:x:x:1::3 > 2001:x:x:10 (клиент)

Костыль:

ip -6 route add 2001:x:x:1::/64 via 2001:x:x:1::1 table 100
ip -6 rule add from 2001:x:x:2::/64 table 100

В чём может быть причина такого поведения (не самой маршрутизации, а не возможности установить соединение).

_НО_ при той же топологии IPv4 работает _нормально_

Заранее спасибо.

 ,

cyclon
()

kvm и IPv6

Добрых суток. Происходит странное, создаю такой файл:

# cat  /etc/libvirt/qemu/networks/vm-routed-net.xml
<network>
  <name>vm-routed-net</name>
  <forward dev='eth0' mode='route'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <ip address='192.168.120.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.120.2' end='192.168.120.254' />
    </dhcp>
  </ip>
  <ip family="ipv6" address="2001:xxxx:xxxx:xxxx::1" prefix="48" />
</network>
Далее делаю:
virsh net-define /etc/libvirt/qemu/networks/vm-routed-net.xml
После этого строка:
  <ip family="ipv6" address="2001:xxxx:xxxx:xxxx::1" prefix="48" />
пропадает.

С чем такое может быть связано. Дистр debian squeeze.

В /etc/sysctl.conf форвард ipv6 включен:

net.ipv6.conf.all.forwarding=1

Заранее спасибо.

 ,

cyclon
()

входящий звонок через sip trunk на asterisk

Добрых суток.

Имеется * с настроенным транком с CUCM. Всё вроде бы хорошо, но когда идёт входящий звонок от cucm'а, он не перебрасывается в нужный контекст.

Имеется users.conf:

[cucm_in]
trunkname = cucm
host = 172.16.200.10/255.255.255.255
context = cucm_in
type = user
disallow = all
allow = alaw
canreinvite = yes
dtmfmode = rfc2833
qualify = yes
trunk = yes

входящий звнок от хоста 172.16.200.10 должен оказаться в контексте cucm_in, но он оказывается в том, что определён в sip.conf

...
context = local
...

в логе:

chan_sip.c: Call from '' to extension '7999' rejected because extension not found in context 'local'.

extension.conf:

[local]
exten => 5101,1,Answer()
exten => 5101,n,Dial(SIP/user1,60,g)
exten => 5101,n,Hangup()

[cucm_in]
include => some_t

Можно ли как то поменять поведение, что бы входящий звонок оказывался в нужном контексте?

 

cyclon
()

RSS подписка на новые темы