php写的squid验证辅助器
2008-11-08 23:17
公司的代理服务器用的是squid,基于IP地址和MAC地址进行权限验证允许部分用户访问Internet。无奈列位高手们早已通晓盗用IP、MAC的方法来绕过squid的限制。近来考虑改为帐号认证。
由于同时在维护一个邮件服务器(qmail + vpopmail + mysql),邮件帐号用mysql管理,内网用户人手一邮箱。为了便于用户记忆,想直接使用邮件帐号和密码作为squid的帐号密码。
程序嘛,比较靠谱的是
mysql_auth
,无奈对c一窍不通,只能借鉴一下它的思路......干脆自己写一个吧。
其他已知资料:
《Squid中文权威指南》
,第12章有一个perl的例子以及以下文字:
在squid和基本验证器之间的接口非常简单。squid发送用户名和密码到验证器进程,他们以空格分开并以新行结束。验证器在其他stdin里读取用户名和密码。在检查信用项后,验证器将OK或ERR写入stdout。
任何“不安全的URL”字符会参照RFC1738规则进行编码。这样,名字“jack+jill”变成了"jack%2bjill"。squid接受包含
空格的用户名和密码。例如“a password”变成了“a%20password”。在解码用户名和密码后,验证器程序能处理空格和其他的特殊字符。
要点总结:从stdin读取用户名和密码,用户名和密码以空格分隔,可能涉及解码。vpopmail里用户帐号和密码分别
是pw_name和pw_passwd列,建一个表squid,只有一列pw_name,把有权用户的用户名添加到表squid里,用pw_name列关
联两个表查询获得pw_passwd,和用户的输入做比较,一致即验证成功。
PHP代码如下:
#
!
/
usr/
bin/
php
<
?
php
ini_set
(
"display_errors"
,
false
)
;
function
valid(
$
u
,
$
p
,
$
sql_link
)
{
$
result
=
false
;
$
res
=
mysql_query
(
"select pw_passwd from squid a, vpopmail b where a.pw_name='$u' and a.pw_name=b.pw_name"
,
$
sql_link
)
;
$
rows
=
mysql_num_rows
(
$
res
)
;
if
(
1 =
=
$
rows
)
{
$
data
=
mysql_fetch_object
(
$
res
)
;
$
passwd
=
$
data
-
相关文档:
<?php
/**
* @author qqzer.com
* @copyright 2010
*/
function baidu_decode($url,$sertim='',$k=array())
{
$E=strlen($url);
$C="";
$I=array();
$F=array();
$J=$sertim % 26;
$J=$J?$J:1;
foreach((array)$k as $str){
list($O,$L,$M) = explode(',',$str);
for($N=$O;$N<=$L;$N++){
......
【2010/3/8】
1:
array_pop($array());//php中删除数组最后一个元素
array_shift($array());//删除第一个元素
2:
java1.5上写的程序,让放在java1.4的服务器上运行,如何办,上网搜索了一下,
可以下一个字节码转换工具,将1.5编译的*.class文件转换成1.4的,有一个叫Retrotranslator的工具。
How to use Retrotransl ......
PHP 的错误报告
display_errors = Off
error_reporting = E_ALL
display_errors 是否显示错误。默认值是 Off。要让开发过程更加轻松,请把这个值设为 On:
display_errors = On
error_reporting 变量的默认值是 E_ALL。这个设置会显示从不良编码实践到无害提示到出错的所有信息。E_ALL 对于开发过程来说有点太细 ......
Google 在一年前发布了Google App Engine (GAE) 。这是一个免费的 App Engine 主机,可以让你的每个Application(免费的最多有10个)有1GB的磁盘空间和43.6个CPU小时与10GB的上传和10GB的下载带宽,以及2000个电子邮件。如果你需要地更多,那就是付钱了。
GAE 最近发布了正式支持Java的通知。于是,互 ......
一、如何选择 PHP5.3 的 VC9 版本和 VC6 版本
VC6 版本是使用 Visual Studio 6 编译器编译的,如果你的 PHP 是用 Apache 来架设的,那你就选择 VC6 版本。
VC9 版本是使用 Visual Studio 2008 编译器编译的,如果你的 PHP 是用 IIS 来架设的,那你就选择 VC9 版本。
二、如何选择 PHP5.3 的 Thread Safe 和 Non Thread S ......