之后拿来YY web版的客户端或者加上权限控制啥的直接抛弃命令行都可以的哈。
记录一下。顺便痛恨expect的语法。
» 阅读全文
Submitted by ╰☆往事如风 on 2010, January 14, 9:50 PM
之后拿来YY web版的客户端或者加上权限控制啥的直接抛弃命令行都可以的哈。
记录一下。顺便痛恨expect的语法。
» 阅读全文
Submitted by ╰☆往事如风 on 2009, October 26, 2:03 PM
工作需要用到这个,顺便收集一份列表以备后查。
» 阅读全文
Submitted by ╰☆往事如风 on 2009, October 13, 3:43 PM
Python的比较雷人的urllib
» 阅读全文
Submitted by ╰☆往事如风 on 2009, October 6, 5:37 PM
twiki官方站上有一个插件:X509UserPlugin,看说明是用来支持证书登录的。不过鼓捣了半天还是没成效,直接报错说viewauth没权限。几天还是没啥进展,直接火大,决定山寨解决。
首先配置twiki的服务器支持SSL,用SSL来获取客户端证书并验证客户端证书的有效性。
与twiki相关配置如下:
twiki.conf:
SSLCACertificateFile /etc/pki/tls/certs/test.crt
SSLOptions +FakeBasicAuth +StrictRequire +OptRenegotiate
SSLVerifyClient require
SSLVerifydepth 1
其中 test.crt为签发客户端证书的有效根证书,用于在ssl中验证客户端证书的有效性。
然后就是twiki本身。由于twiki是后台使用perl实现的无数据库wiki,本身的用户权限关系比较简单,直接是用当前的用户名和保存的权限列表比较,在里面则有权限,所以只需要验证的时候判断是来自证书的用户名并且ssl证书验证成功(废话一句,ssl通过数据才会到达程序处理),则跳过密码验证即可。
twiki的登录管理为:./lib/TWiki/LoginManager, 在此目录下新建一个perl的LoginManager 就可以通过https://twikisite/bin/configure 设置登录使用该LoginManager进行。
这里因为希望实现证书登录和密码登录并存,使用原生的TemplateLogin.pm复制一份进行修改满足需要(cp TemplateLogin.pm X509TemplateLogin.pm & 新文件的权限和属主与原文件相同)。
里面修改的关键代码如下:
---+ package TWiki::LoginManager::X509TemplateLogin
package TWiki::LoginManager::X509TemplateLogin;
my $origurl = $query->param( 'origurl' );
# 以下为修改部分,判断是否为证书登录,是则用户名取用证书中的用户名:DN_CN
my $loginName = "";
if($ENV{'SSL_CLIENT_VERIFY'} && $ENV{'SSL_CLIENT_VERIFY'} eq 'SUCCESS'){
$loginName = $ENV{'SSL_CLIENT_S_DN_CN'};
}else{
$loginName = $query->param( 'username' );
}
if( $loginName ) {
#以下为修改部分,判断如果是证书登录,则跳过密码验证并且认证结果为成功。
#由于ssl已经确认了证书的合法性,此处不需要重复进行证书合法性验证。
my $validation;
if($ENV{'SSL_CLIENT_VERIFY'} && $ENV{'SSL_CLIENT_VERIFY'} eq 'SUCCESS'){
$validation = 1;
}else{
$validation = $users->checkPassword( $loginName, $loginPass );
$error = $users->passwordError();
}
然后去http://twikisite/bin/configure 中修改 security setup中的LoginManager为TWiki::LoginManager::X509TemplateLogin,保存。
使用方式:
使用https://twikisite/ 进行访问,如果本地有合法的客户端证书,则点击登录按钮后直接用证书身份登入wiki.权限设置使用证书中的DN_CN名作为用户名即可。
不足:如果希望使用原有的用户名密码登录。目前只能通过http://twikisite/访问进行。暂时还没有更好的想法。
有不足之处或者对证书和密码并存登录twiki有更好的想法,请诸位多多留言指点。。
Submitted by ╰☆往事如风 on 2009, September 7, 2:38 AM
一种看起来比较优雅:
e.g.
12 @staticmethod
13 def init(host,databasename):
14 return pg.connect(dbname=''+databasename+'',host=''+host+'''')
即在方法名前加入@staticmethod做修饰即可,不过这种方式仅支持python2.4及以上的版本
在2.3中,则要用一种比较猥琐的写法了
e.g.
13 def init(host,databasename):
14 return pg.connect(dbname=''+databasename+'',host=''+host+'''')
15 init = staticmethod(init)
即通过手工的用staticmethod函数对原先的自定义函数进行一个包装来进行。
Submitted by ╰☆往事如风 on 2009, March 21, 5:13 PM
因为Merge功能的快捷键和系统上dell默认的音量控制冲突。没办法改,手工修改TortoiseSVN代码,重新编译了次解决。
记录下碰到的一些问题和一些注意的点。
» 阅读全文
Submitted by ╰☆往事如风 on 2009, February 15, 2:07 PM
Security by XSLT Transform
» 阅读全文