RE: aurtorizace uživatele ve squidu - nefunkčnost v IE 7

Vancl Miroslav (QRIS) Miroslav.Vancl na qris.cz
Pátek Říjen 26 15:46:24 CEST 2007


> Používám squid autorizaci uživatele pro přístup na net. V 
...
O jakou autorizaci (nebo spis autentikaci) se jedna ? Je to ntlm_auth ?
S tim bohuzel neporadim, mam ale jiny tip - vykaslat se na autentikaci
proverovanim jmeno/heslo a pouzit pouze informaci o prave prihlasenem
uzivateli Windouz, podobne jako muse byt pouzita sluzba ident na jinych
operacnich systemech. 
K tomu jsem pouzil dotaz na jmena registrovana na jeho Wind. stanici. Pokud
tam totiz bezi sluzba Messenger (v XP cesky Kuryrni sluzba), pripadne to
jsou jeste Win9x, vraci stanice mezi jmeny take username<03>. Napsal jsem si
jednoduchy Perl skriptik, ktery se pak vola ze Squidu jako
external_acl_type.
Tady je:

====
#!/usr/bin/perl

use Socket;
use IO::Handle;

STDOUT->autoflush(1);
main:
while (<>) {
  chomp;
  $ip=$_;
  $trnid=int(rand(65536));
  $query=" CK".("A"x30)."\0";
  $data=pack("nnnnnna34nn",$trnid,0,1,0,0,0,$query,0x21,1);
  close(S);
  socket(S, PF_INET, SOCK_DGRAM, getprotobyname("udp")) or die "socket: $!";
  $ipaddr=inet_aton($ip);
  $portaddr=sockaddr_in(137,$ipaddr);
  send(S,$data,0,$portaddr)==length($data) or die "send";
  vec($mask,fileno(S),1)=1;
  unless (select($mask,undef,undef,0.1)) {
    print "ERR\n";
    next;
  }
  $portaddr=recv(S,$buf,1500,0) or die "recv";
  ($id,$flg,$q,$ans,$aut,$add,$datar,$type,$class,$ttl,$len,$n,$buf)=
    unpack("nnnnnna34nnNnCa*",$buf);
  @names=();
  for ($i=0;$i<$n;$i++) {
    ($name,$type,$flags,$buf)=unpack("a15Cna*",$buf);
    next if ($flags&0x8000 or ($type!=0 and $type!=3));
    $name=~s/ +$//;
    $name=lc($name);
    if ($type==3) {
      push @names,$name;
    } else {
      $wkst=$name;
    }
  }
  if ($#names<=1) {
    while ($name=pop @names) {
      next if ($name eq $wkst);
      print "OK user=$name\n";
      next main;
    }
  }
  print "ERR\n";
}
====

Vracene jmeno uzivatele se pak da ve Squidu pouzit stejne jako jmeno
prihlaseneho uzivatele nebo jmeno ziskane pomoci sluzby ident (tcp 113),
kterou Win systemy nemaji.

M. Vancl



Další informace o konferenci Linux