设为首页 收藏本站
查看: 1158|回复: 0

[经验分享] cat /usr/lib64/squid/squid_db_auth

[复制链接]

尚未签到

发表于 2015-9-3 07:44:50 | 显示全部楼层 |阅读模式
  [danny@ip-172-31-21-147 ~]$ sudo cat /usr/lib64/squid/squid_db_auth
#!/usr/bin/perl
use strict;
use DBI;
use Getopt::Long;
use Pod::Usage;
use Digest::MD5 qw(md5 md5_hex md5_base64);
$|=1;
  =pod
  =head1 NAME
  squid_db_auth - Database auth helper for Squid
  =cut
  my $dsn = "DBI:mysql:database=squid";
my $db_user = undef;
my $db_passwd = undef;
my $db_table = "passwd";
my $db_usercol = "user";
my $db_passwdcol = "password";
my $db_cond = "enabled = 1";
my $plaintext = 0;
my $md5 = 0;
my $persist = 0;
my $isjoomla = 0;
my $debug = 0;
my $hashsalt = undef;
  =pod
  =head1 SYNOPSIS
  squid_db_auth [options]
  =head1 DESCRIPTOIN
  This program verifies username & password to a database
  =over 8
  =item   B<--dsn>
  Database DSN. Default "DBI:mysql:database=squid"
  =item   B<--user>
  Database User
  =item   B<--password>
  Database password
  =item   B<--table>
  Database table. Default "passwd".
  =item   B<--usercol>
  Username column. Default "user".
  =item   B<--passwdcol>
  Password column. Default "password".
  =item   B<--cond>
  Condition, defaults to enabled=1. Specify 1 or "" for no condition
If you use --joomla flag, this condition will be changed to block=0
  =item   B<--plaintext>
  Database contains plain-text passwords
  =item   B<--md5>
  Database contains unsalted md5 passwords
  =item   B<--salt>
  Selects the correct salt to evaluate passwords
  =item   B<--persist>
  Keep a persistent database connection open between queries.
  =item  B<--joomla>
  Tells helper that user database is Joomla DB.  So their unusual salt
hashing is understood.
  =back
  =cut
  GetOptions(
        'dsn=s' => \$dsn,
        'user=s' => \$db_user,
        'password=s' => \$db_passwd,
        'table=s' => \$db_table,
        'usercol=s' => \$db_usercol,
        'passwdcol=s' => \$db_passwdcol,
        'cond=s' => \$db_cond,
        'plaintext' => \$plaintext,
        'md5' => \$md5,
        'persist' => \$persist,
        'joomla' => \$isjoomla,
        'debug' => \$debug,
        'salt=s' => \$hashsalt,
        );
  my ($_dbh, $_sth);
$db_cond = "block = 0" if $isjoomla;
  sub close_db()
{
    return if !defined($_dbh);
    undef $_sth;
    $_dbh->disconnect();
    undef $_dbh;
}
  sub open_db()
{
    return $_sth if defined $_sth;
    $_dbh = DBI->connect($dsn, $db_user, $db_passwd);
    if (!defined $_dbh) {
        warn ("Could not connect to $dsn\n");
        return undef;
    }
    my $sql_query;
    $sql_query = "SELECT $db_passwdcol FROM $db_table WHERE $db_usercol = ?" . ($db_cond ne "" ? " AND $db_cond" : "");
    $_sth = $_dbh->prepare($sql_query) || die;
    return $_sth;
}
  sub check_password($$)
{
    my ($password, $key) = @_;
  if ($isjoomla){
        my $salt;
        my $key2;
        ($key2,$salt) = split (/:/, $key);
        return 1 if md5_hex($password.$salt).':'.$salt eq $key;
    }
    else{
        return 1 if defined $hashsalt && crypt($password, $hashsalt) eq $key;
        return 1 if crypt($password, $key) eq $key;
        return 1 if $md5 && md5_hex($password) eq $key;
        return 1 if $plaintext && $password eq $key;
    }
  return 0;
}
  sub query_db($) {
    my ($user) = @_;
    my ($sth) = open_db() || return undef;
    if (!$sth->execute($user)) {
        close_db();
        open_db() || return undef;
        $sth->execute($user) || return undef;;
    }
    return $sth;
}
my $status;
  while (<>) {
    my ($user, $password) = split;
    $status = "ERR";
    $user =~ s/%(..)/pack("H*", $1)/ge;
    $password =~ s/%(..)/pack("H*", $1)/ge;
  $status = "ERR database error";
    my $sth = query_db($user) || next;
    $status = "ERR unknown login";
    my $row = $sth->fetchrow_arrayref() || next;
    $status = "ERR login failure";
    next if (!check_password($password, @$row[0]));
    $status = "OK";
} continue {
    close_db() if (!$persist);
    print $status . "\n";
}
  =pod
  =head1 COPYRIGHT
  Copyright (C) 2007 Henrik Nordstrom <henrik@henriknordstrom.net>
Copyright (C) 2010 Luis Daniel Lucio Quiroz <dlucio@okay.com.mx> (Joomla support)
This program is free software. You may redistribute copies of it under the
terms of the GNU General Public License version 2, or (at youropinion) any
later version.
  =cut

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-108850-1-1.html 上篇帖子: 最有价值的squid3.0配置说明:squid对应不同端口提供服务 下篇帖子: [squid] kid1| ERROR: No forward-proxy ports configured.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表