Version 11 of autoproxy

Updated 2003-01-26 21:37:11

El soporte de poderes con el paquete HTTP es aburrido y error propenso y tiene que ser hecho para cada uso alternadamente. He hecho algunos de �stos y finalmente decidido esto puede ser hecho por un paquete externo. Aqu� est� el segundo bosquejo. Para utilizar esto: el paquete requiere el autoproxy autoproxy::init autoproxy::configure - b�sico - luser del usuario - el tok determinado del sEkRet del paso [ http::geturl http://mini.net/tcl/autoproxy ] http::data $$tok http::cleanup $$tok he incorporado el c�digo de Thoyts de la palmadita en un proyecto y trabaja como un encanto. La �nica edici�n peque�a que es que no existe ProxyOverride al parecer siempre (seg�n un informe del problema que recib�) el -jcw 11dec02 jcw - otro problema es que ProxyEnable puede existir pero no ser un boleano v�lido. PINTA 21Jan03: �Ululaci�n - esto se incluye en el starkit del gatito! Esto me ha motivado para revisitar este c�digo, para ponerlo en orden para arriba y para darle vuelta en un paquete apropiado. Tambi�n he tomado a bordo de los comentarios de Anders de abajo - aunque el punto verdadero del paquete del autoproxy es intentar tomar poder y los ajustes del usuario autom�ticamente. �Debe este extremo subir en tcllib?? ' ' ' el jefe de la autorizaci�n del poder de Automagic ' ' ' por Anders Ramdahl el filtro se cambia f�cilmente automagically para agregar un jefe de la autorizaci�n del poder cuando est� necesitado. Recuerde fijar ' ' el de autoproxy::user y ' ' de autoproxy::password antes de que la primera ' ' llamada del de http::geturl. el proc autoproxy::filter { anfitri�n } { no_proxy variable del usuario del poder variable variable variable de la contrase�a si { $$proxy(host) == { } } { vuelta { } } el dominio del foreach $$no_proxy { si { f�sforo $$domain $$host de la secuencia } { vuelta { } } } # agrega el h(Proxy-Authorization) determinado del arsenal del estado del estado del jefe de la autorizaci�n del poder _ h $_state(-headers) determinado upvar base del concat [ base64::encode $$user:$password ] fij� _ la vuelta de los state(-jefes) el arsenal consigue h lista $$proxy(host) $$proxy(port) } que esto fallar� si ' ' el de autoproxy::user o ' ' '' de autoproxy::password no se fija. Debo agregar probablemente una declaraci�n del ret�n en alguna parte. # autoproxy.tcl - la palmadita Thoyts < [email protected] > del copyright (c) 2002 # # en Unix un est�ndar que emerge para identificar el proxy server local del HTTP # se parece deber utilizar el http_proxy o el ftp_proxy de la variable de entorno y # no_proxy para enumerar esos dominios que se excluir�n de proxying. # # en Windows podemos recuperar los valores de los ajustes del Internet del registro # obtener bastante mucho la misma informaci�n. # # con esta informaci�n podemos setup un procedimiento conveniente del filtro para # paquete del HTTP del Tcl y arreglar para el uso autom�tico del poder. # # ejemplo: # el paquete requiere autoproxy # autoproxy::init # autoproxy::configure b�sico; # incorpore los valores en di�logo # fijan el tok [ http::getutl http://wiki.tcl.tk/ ] # http::data $$tok # # all� es un esqueleto para el resumen de soporte o la autorizaci�n de NTLM pero # esto no se apoya actualmente. No puedo encontrar un poder para probar el resumen # encendido y todav�a no tenemos una puesta en pr�ctica del Tcl para NTLM. # # winregkey determinado del winregkey variable eval del autoproxy del namespace de @(#)$Id: 2879,v 1.12 2003-01-27 09:00:22 jcw Exp $ $$Id: 2879,v 1.12 2003-01-27 09:00:22 jcw Exp $ { opciones variables de la versi�n 1,1 variables variables del rcsid { } si {! el Info existe las opciones } { opciones determinadas del arsenal ntlm b�sico del resumen del no_proxy del proxy_port 80 { del proxy_host "" { } { } { } { } } } ensamble { software Microsoft Windows CurrentVersion" ajustes de HKEY_CURRENT_USER del Internet "} \ \ } # # descripci�n: # obtenga las opciones de la configuraci�n para el servidor. # proc autoproxy::cget { opci�n } { las opciones variables cambian - glob -- $$option ] { - ho * - - proxy_h * { fije el options(proxy_host) } - po * - - proxy_p * { fije el options(proxy_port) } - no * { fije el options(no_proxy) } - b * { fije el options(basic) } - d * { fije el options(digest) } - NT * { fije el options(ntlm) } defecto { fije yerran ensamble [ lsort [ el arsenal nombra opciones ] ", - "] vuelta - el error" mal \"lindex 0\":\ $$args del c�digo de la opci�n debe ser uno de -$options "} } } # # descripci�n: # configure los ajustes del paquete del autoproxy. # usted puede configurar solamente un tipo de autorizaci�n a la vez como una vez que golpe�ramos # - b�sico, - resumen o - el ntlm - todos los otros args se pasa al protocolo # escritura espec�fica. # # por supuesto, la mayor�a del punto de este paquete debe llenar tanto de �stos # los campos como sea posible autom�ticamente. Usted debe llamar autoproxy::init # hace la configuraci�n autom�tica y despu�s llama este m�todo para refinar los detalles. # proc autoproxy::configure { args } { opciones variables si { == 0 $$args del llength } { foreach { valor del OPT } el arsenal consigue las opciones { lappend r -$opt $$value } vuelta $$r } mientras que { f�sforo de la secuencia "- *" [ lindex $$args 0 ] } { interruptor - glob -- lindex $$args 0 { - ho * - - proxy_h * { fije el options(proxy_host) args 1 del estallido } - po * - - proxy_p * { fije el options(proxy_port) args 1 } - no * { fije el options(no_proxy) args 1 del estallido } - b del estallido * { los args del estallido; configure:basic $$args; rotura } - d * { args del estallido; configure:digest $$args; rotura } - NT * { args del estallido; configure:ntlm $$args; rotura } -- { args del estallido; el defecto de la rotura } { fije yerran ensamble [ lsort [ el arsenal nombra opciones ] ", - "] vuelta - error" mal \"lindex 0\":\ $$args del c�digo de la opci�n debe ser uno de args del estallido de -$options "} } } } # # descripci�n: # inicialice la informaci�n del poder del HTTP del ambiente o # el registro (Win32) # # este procedimiento cargar� el paquete del HTTP y reescribe # m�todo de http::geturl a agregar en el jefe de la autorizaci�n. # # una soluci�n mejor de A ser� arreglar para que el paquete del HTTP solicite # llave de la autorizaci�n en la recepci�n de una autorizaci�n ma's reqest. # proc autoproxy::init { } { el paquete requiere winregkey variable del env global global del tcl_platform del uri que el no_proxy fijado las opciones variables { } fij� httpproxy { } # busca variables de entorno. si { el Info existe env(http_proxy) } { fije el no_proxy $$env(http_proxy) determinado del httpproxy $$env(no_proxy) } { si {) $$tcl_platform(platform == "ventanas" } { el paquete requiere el registro determinado del arsenal del registro 1,0 { ProxyEnable 0 ProxyServer "" ProxyOverride { } } ret�n otro { fije el reg(ProxyEnable) el registro consigue $$winregkey" ProxyEnable " fijan el reg(ProxyServer) registro consiga $$winregkey" ProxyServer " fijan el reg(ProxyOverride) el registro consigue $$winregkey" ProxyOverride " } si { el!string es bool $$reg(ProxyEnable) } { fije el reg(ProxyEnable) 0 } si { $$reg(ProxyEnable) } { fije el no_proxy $$reg(ProxyServer) determinado del httpproxy $$reg(ProxyOverride) } } } # si encontramos algo... si { $$httpproxy! = { } } { # el http_proxy se supone para ser un URL - deja para cerciorarse de. si {!regexp { \w://.*} $$httpproxy } { fije el httpproxy "http://$httpproxy " } # descomponga la secuencia. el poder determinado del arsenal uri::split $$httpproxy # vuelta el valor del no_proxy en un no_proxy determinado de la lista del tcl mapa de la secuencia {;""," "} $$no_proxy # se configura configura - proxy_host $$proxy(host) \ - vuelta $$proxy(port) del proxy_port \ - $$no_proxy el no_proxy # setup y configura el paquete del paquete del HTTP requiere HTTP 2,0 http::config - del proxyfilter filtro del origen del namespace } $$httpproxy } # # descripci�n: # estallido el nth elemento de una lista. Utilizado en el proceso de las opciones. proc autoproxy::Pop { varname { nth 0 } } { los args $$varname upvar fijaron r lindex $$args $$nth fijaron vuelta de los args $$args $$nth $$nth lreplace $$r } # # descripci�n: # ayuda del instrumento para el esquema b�sico de la autentificaci�n (RFC 2617). # opciones: # - usuario userid - pase en la identificaci�n del usuario (mayo requiere dominio de Windows NT # como DOMAIN\\username) # - pwd de la contrase�a - pasan en la contrase�a del usuario. # el foreach del proc autoproxy::configure:basic { arglist } { el sistema variable del arsenal de las opciones opta { passwd del usuario { } { } } { valor } del OPT $$arglist { interruptor - glob -- $$opt { - u * { fije el opts(user) $$value } - p * { fije el opts(passwd) $$value } defecto { vuelta - cifre la opci�n inv�lida \"$opt del error "\": debe ser un de \ - username o - contrase�a "} } } # si no se proporcion� nada, asume que desean un aviso interactivo. si { $$opts(user) == { }||$$opts(passwd) == { } } { el paquete requiere BWidget que r determinado d de PasswdDlg - logintext $$opts(user) - passwdtext $$opts(passwd) fij� el opts(user) lindex $$r 0 fij� el opts(passwd) lindex $$r 1 } # nota: almacenamos solamente la contrase�a ' codificada '. Evite de guardar plaintext. el paquete requiere el options(basic) determinado base64 lista "" \ [" b�sico de la Poder-Autorizacio'n \ [ del concat "base64::encode $$opts(user):$opts(passwd) ] ] } # # descripci�n: # ayuda del instrumento para el esquema de la autentificaci�n del resumen (nnnn del RFC). # opciones: # - usuario userid - pase en la identificaci�n del usuario (mayo requiere dominio de Windows NT # como DOMAIN\\username) # - pwd de la contrase�a - pasan en la contrase�a del usuario. # - dominio del reino - el foreach del reino # del proc autoproxy::configure:digest { arglist } de la autorizaci�n { el sistema variable del arsenal de las opciones opta { reino del passwd del usuario { } { } { } } { valor } del OPT $$arglist { interruptor - glob -- $$opt { - u * { fije el opts(user) $$value } - p * { fije el opts(passwd) $$value } - r * { fije el opts(realm) $$value } defecto { vuelta - cifre la opci�n inv�lida \"$opt del error "\": debe ser un de \ - username, - reino o - contrase�a "} } } # si no se proporcion� nada, asume que desean un aviso interactivo. si { $$opts(user) == { }||$$opts(passwd) == { } } { el paquete requiere BWidget que r determinado d de PasswdDlg - "\ - $$opts(realm) del reino del t�tulo" logintext $$opts(user) \ - passwdtext $$opts(passwd) fij� el opts(user) lindex $$r 0 fij� el opts(passwd) lindex $$r 1 } # nota: almacenamos solamente la suma de comprobaci�n MD5 de la contrase�a. el paquete requiere md5 que A1 determinado md5::md5 "$$opts(user):$opts(realm):$opts(passwd)" fij� vuelta del options(digest) $$opts(user) $$opts(realm) $$A1 lista } # # descripci�n: # esquema de NTLM de Suport Microsoft # no hecho hasta ahora. # proc autoproxy::configure:ntlm { arglist } { vuelta variable de las opciones - cifre el error "autorizaci�n de NTLM no est� disponible" } # # descripci�n: # un filtro del poder del paquete del HTTP. Esto procura resolverse es una petici�n # debe ir v�a el poder configurado usando una comparaci�n del glob contra # los art�culos de la lista del no_proxy. Una lista t�pica del no_proxy pudo ser # el localhost de la lista * my.domain.com 127,0,0,1 # # si vamos a utilizar el poder - entonces inserta la autorizaci�n # el jefe del poder. # proc autoproxy::filter { anfitri�n } { opciones variables si { $$options(proxy_host) == { } } { vuelta { } } el dominio del foreach $$options(no_proxy) { si { f�sforo $$domain $$host de la secuencia } { la vuelta { } } } # agrega el jefe de la autorizaci�n al estado upvar del estado de la petici�n (por Anders Ramdahl) si { $$options(basic)! = { } } { fije State(-headers) concat $$options(basic) } elseif { $$options(digest)! = { } } { # F�JEME all� es m�s a digerir que esto # fij� State(-headers) linsert 0 $$options(digest) } vuelta lista $$options(proxy_host) $$options(proxy_port) } # el paquete proporciona autoproxy $$autoproxy::version # # # las variables locales: # modo: tcl # mellar-lengu!eta-modo: nada # extremo: [ [ Paquete De la Categor�a|Internet De la Categor�a ] ]