Guest
Public paste!

Adam C Taylor

By: a guest | May 18th, 2009 | Syntax: PHP | Size: 3.07 KB | Hits: 121 | Expires: Never
Copy text to clipboard
  1. <?php
  2. $ntlmserver = "smtpserver.local";
  3.  
  4. function left($string, $count){
  5.         return substr($string, 0, $count);
  6. }
  7.  
  8.  
  9. if (!isset($headers['Authorization'])){
  10.         header('HTTP/1.1 401 Unauthorized');
  11.         header('WWW-Authenticate: NTLM');
  12.         exit;
  13. }
  14.  
  15. $auth = $headers['Authorization'];
  16.  
  17.  
  18. if (substr($auth,0,5) == 'NTLM ') {
  19.         $msg = base64_decode(substr($auth, 5));
  20.         if (substr($msg, 0, 8) != "NTLMSSP\x00")
  21.                 die('error header not recognised');
  22.  
  23.         if ($msg[8] == "\x01") {
  24.                 $holder = apache_request_headers();
  25.                 $_SESSION['TYPE1MSG'] = $holder['Authorization'];
  26.  
  27.  
  28.         if(!$_SESSION['AUTH']){
  29.                 $smtp_server = pfsockopen($ntlmserver, 25, $errno, $errstr, 30);
  30.                 if(!$smtp_server)
  31.                         {
  32.                                 exit;
  33.                         }
  34.                 fwrite($smtp_server, "EHLO\r\n");
  35.  
  36.                 $stop=0;
  37.  
  38.                 while (!$stop)
  39.                         {
  40.                                 $data = fgets($smtp_server, 512);
  41.  
  42.                                 if(left($data,6)=="250 OK")
  43.                                 {
  44.                                 fwrite($smtp_server, "AUTH $_SESSION[TYPE1MSG]\r\n");
  45.                                 }
  46.                                 else if(left($data,3)=="334")
  47.                                 {
  48.                                 $_SESSION['TYPE2MSG']=substr($data,4);
  49.                                 $stop=1;
  50.                                 }
  51.  
  52.                         }
  53.  
  54.                 $_SESSION['AUTH']=1;
  55.                 }
  56.  
  57.                 $msg2 = $_SESSION['TYPE2MSG'];
  58.                 header('HTTP/1.1 401 Unauthorized');
  59.                 header('WWW-Authenticate: NTLM '.trim($msg2));
  60.                 exit;
  61.         }
  62.         else if ($msg[8] == "\x03") {
  63.                 $holder = apache_request_headers();
  64.                 $_SESSION['TYPE3MSG'] = substr($holder['Authorization'],5);
  65.  
  66.                 if(!$_SESSION['AUTH2']){
  67.                                 $smtp_server = pfsockopen($ntlmserver, 25, $errno, $errstr, 30);
  68.                                 if(!$smtp_server)
  69.                                         {
  70.                                                 exit;
  71.                                         }
  72.  
  73.                                 $stop=0;
  74.  
  75.                                 fwrite($smtp_server, "$_SESSION[TYPE3MSG]\r\n");
  76.  
  77.                                 while (!$stop)
  78.                                         {
  79.                                                 $data = fgets($smtp_server, 512);
  80.                                                 //print_r($data);
  81.  
  82.                                                 if(left($data,3)=="235")
  83.                                                 {
  84.                                                 $_SESSION['AUTH']="235";
  85.                                                 $stop=1;
  86.                                                 }
  87.                                                 else if(left($data,3)=="535")
  88.                                                 {
  89.                                                 $_SESSION['AUTH']="535";
  90.                                                 $stop=1;
  91.                                                 exit;
  92.                                                 }
  93.  
  94.                                         }
  95.  
  96.                                         fwrite($smtp_server, "QUIT\r\n");
  97.                                         fclose($smtp_server);
  98.                                 $_SESSION['AUTH2']=1;
  99.                 }
  100.  
  101.                 function get_msg_str($msg, $start, $unicode = true) {
  102.                         $len = (ord($msg[$start+1]) * 256) + ord($msg[$start]);
  103.                         $off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]);
  104.                         if ($unicode)
  105.                                 return str_replace("\0", '', substr($msg, $off, $len));
  106.                         else
  107.                                 return substr($msg, $off, $len);
  108.                 }
  109.                 $_SESSION['USER'] = get_msg_str($msg, 36);
  110.                 $_SESSION['DOMAIN'] = get_msg_str($msg, 28);
  111.                 $_SESSION['WORKSTATION'] = get_msg_str($msg, 44);
  112.  
  113.                 //print_r($auth);
  114.         }
  115.  
  116.  
  117. }
  118.  
  119. print_r($_SESSION);
  120. ?>