@@ -39,6 +39,10 @@ discard block |
||
39 | 39 | // $key: The cache key. |
40 | 40 | // Returns: |
41 | 41 | // The object which was previously stored, or false if a cache miss occurred. |
42 | + |
|
43 | + /** |
|
44 | + * @param string $key |
|
45 | + */ |
|
42 | 46 | public function get($key) { |
43 | 47 | //return false; |
44 | 48 | if (($this->cleanInterval == 1) || |
@@ -59,6 +63,10 @@ discard block |
||
59 | 63 | // Parameters: |
60 | 64 | // $key: The cache key. |
61 | 65 | // $value: The object to store. |
66 | + |
|
67 | + /** |
|
68 | + * @param string $key |
|
69 | + */ |
|
62 | 70 | public function set($key, $value) { |
63 | 71 | if (($this->cleanInterval == 1) || |
64 | 72 | (rand(1, $this->cleanInterval) == $this->cleanInterval)) { |
@@ -30,7 +30,7 @@ discard block |
||
30 | 30 | if ($cleanInterval < 1) $cleanInterval = 1; |
31 | 31 | $this->cleanInterval = (int)$cleanInterval; |
32 | 32 | |
33 | - if ($directoryDepth<1) $directoryDepth=1; else if ($directoryDepth>10) $directoryDepth=10; |
|
33 | + if ($directoryDepth < 1) $directoryDepth = 1; else if ($directoryDepth > 10) $directoryDepth = 10; |
|
34 | 34 | $this->directoryDepth = (int)$directoryDepth; |
35 | 35 | } |
36 | 36 | |
@@ -41,8 +41,8 @@ discard block |
||
41 | 41 | // The object which was previously stored, or false if a cache miss occurred. |
42 | 42 | public function get($key) { |
43 | 43 | //return false; |
44 | - if (($this->cleanInterval == 1) || |
|
45 | - (rand(1, $this->cleanInterval) == $this->cleanInterval)) { |
|
44 | + if (($this->cleanInterval==1) || |
|
45 | + (rand(1, $this->cleanInterval)==$this->cleanInterval)) { |
|
46 | 46 | $this->clean(); |
47 | 47 | } |
48 | 48 | $val = false; |
@@ -60,12 +60,12 @@ discard block |
||
60 | 60 | // $key: The cache key. |
61 | 61 | // $value: The object to store. |
62 | 62 | public function set($key, $value) { |
63 | - if (($this->cleanInterval == 1) || |
|
64 | - (rand(1, $this->cleanInterval) == $this->cleanInterval)) { |
|
63 | + if (($this->cleanInterval==1) || |
|
64 | + (rand(1, $this->cleanInterval)==$this->cleanInterval)) { |
|
65 | 65 | $this->clean(); |
66 | 66 | } |
67 | 67 | $fn = $this->getCacheFilename($key, true); |
68 | - $fileData = file_put_contents($fn,serialize($value)); |
|
68 | + $fileData = file_put_contents($fn, serialize($value)); |
|
69 | 69 | } |
70 | 70 | |
71 | 71 | // Delete an object from the cache. |
@@ -97,11 +97,11 @@ discard block |
||
97 | 97 | foreach (@glob($path.'/*', GLOB_NOSORT) as $fn) { |
98 | 98 | if (@is_dir($fn)) { |
99 | 99 | $this->cleanPath($fn); |
100 | - } else if (@filemtime($fn) <= $exptime) { |
|
100 | + }else if (@filemtime($fn) <= $exptime) { |
|
101 | 101 | @unlink($fn); |
102 | 102 | } |
103 | 103 | } |
104 | - if ($path != $this->path) { |
|
104 | + if ($path!=$this->path) { |
|
105 | 105 | @rmdir($path); |
106 | 106 | } |
107 | 107 | } |
@@ -118,7 +118,7 @@ discard block |
||
118 | 118 | } |
119 | 119 | |
120 | 120 | public function fixPermissions($user) { |
121 | - $cmd = escapeshellcmd('chown -R '.$user.':'.$user. ' ' . $this->path); |
|
121 | + $cmd = escapeshellcmd('chown -R '.$user.':'.$user.' '.$this->path); |
|
122 | 122 | exec($cmd); |
123 | 123 | } |
124 | 124 |
@@ -24,13 +24,21 @@ discard block |
||
24 | 24 | |
25 | 25 | $this->path = '/tmp/_FileCache_/'.(string)$path; |
26 | 26 | |
27 | - if ($expirationTimeInSeconds < 1) $expirationTimeInSeconds = 1; |
|
27 | + if ($expirationTimeInSeconds < 1) { |
|
28 | + $expirationTimeInSeconds = 1; |
|
29 | + } |
|
28 | 30 | $this->expirationTimeInSeconds = (int)$expirationTimeInSeconds; |
29 | 31 | |
30 | - if ($cleanInterval < 1) $cleanInterval = 1; |
|
32 | + if ($cleanInterval < 1) { |
|
33 | + $cleanInterval = 1; |
|
34 | + } |
|
31 | 35 | $this->cleanInterval = (int)$cleanInterval; |
32 | 36 | |
33 | - if ($directoryDepth<1) $directoryDepth=1; else if ($directoryDepth>10) $directoryDepth=10; |
|
37 | + if ($directoryDepth<1) { |
|
38 | + $directoryDepth=1; |
|
39 | + } else if ($directoryDepth>10) { |
|
40 | + $directoryDepth=10; |
|
41 | + } |
|
34 | 42 | $this->directoryDepth = (int)$directoryDepth; |
35 | 43 | } |
36 | 44 | |
@@ -80,7 +88,9 @@ discard block |
||
80 | 88 | $refPath = rtrim($this->path, "/\\"); |
81 | 89 | $dir = rtrim(dirname($fn), "/\\"); |
82 | 90 | for ($i = 0; $i < $this->directoryDepth; $i++) { |
83 | - if (!@rmdir($dir)) break; |
|
91 | + if (!@rmdir($dir)) { |
|
92 | + break; |
|
93 | + } |
|
84 | 94 | $dir = rtrim(dirname($dir), "/\\"); |
85 | 95 | } |
86 | 96 | } |
@@ -112,7 +122,9 @@ discard block |
||
112 | 122 | for ($i = 0, $idx = 0; $i < $this->directoryDepth; $i++, $idx += 2) { |
113 | 123 | $path .= '/'.substr($hash, $idx, 2); |
114 | 124 | } |
115 | - if ($autoCreateDirectory) @mkdir($path, 0777, true); |
|
125 | + if ($autoCreateDirectory) { |
|
126 | + @mkdir($path, 0777, true); |
|
127 | + } |
|
116 | 128 | $path .= '/'.$hash; |
117 | 129 | return $path; |
118 | 130 | } |
@@ -929,7 +929,7 @@ |
||
929 | 929 | * Send raw data to the server. |
930 | 930 | * @param string $data The data to send |
931 | 931 | * @access public |
932 | - * @return integer|boolean The number of bytes sent to the server or false on error |
|
932 | + * @return integer The number of bytes sent to the server or false on error |
|
933 | 933 | */ |
934 | 934 | public function client_send($data) |
935 | 935 | { |
@@ -227,7 +227,7 @@ discard block |
||
227 | 227 | default: |
228 | 228 | //Normalize line breaks |
229 | 229 | $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str); |
230 | - echo gmdate('Y-m-d H:i:s') . "\t" . str_replace( |
|
230 | + echo gmdate('Y-m-d H:i:s')."\t".str_replace( |
|
231 | 231 | "\n", |
232 | 232 | "\n \t ", |
233 | 233 | trim($str) |
@@ -274,14 +274,14 @@ discard block |
||
274 | 274 | $socket_context = stream_context_create($options); |
275 | 275 | //Suppress errors; connection failures are handled at a higher level |
276 | 276 | $this->smtp_conn = @stream_socket_client( |
277 | - $host . ":" . $port, |
|
277 | + $host.":".$port, |
|
278 | 278 | $errno, |
279 | 279 | $errstr, |
280 | 280 | $timeout, |
281 | 281 | STREAM_CLIENT_CONNECT, |
282 | 282 | $socket_context |
283 | 283 | ); |
284 | - } else { |
|
284 | + }else { |
|
285 | 285 | //Fall back to fsockopen which should work in more places, but is missing some features |
286 | 286 | $this->edebug( |
287 | 287 | "Connection: stream_socket_client not available, falling back to fsockopen", |
@@ -303,7 +303,7 @@ discard block |
||
303 | 303 | $errstr |
304 | 304 | ); |
305 | 305 | $this->edebug( |
306 | - 'SMTP ERROR: ' . $this->error['error'] |
|
306 | + 'SMTP ERROR: '.$this->error['error'] |
|
307 | 307 | . ": $errstr ($errno)", |
308 | 308 | self::DEBUG_CLIENT |
309 | 309 | ); |
@@ -312,17 +312,17 @@ discard block |
||
312 | 312 | $this->edebug('Connection: opened', self::DEBUG_CONNECTION); |
313 | 313 | // SMTP server can take longer to respond, give longer timeout for first read |
314 | 314 | // Windows does not have support for this timeout function |
315 | - if (substr(PHP_OS, 0, 3) != 'WIN') { |
|
315 | + if (substr(PHP_OS, 0, 3)!='WIN') { |
|
316 | 316 | $max = ini_get('max_execution_time'); |
317 | 317 | // Don't bother if unlimited |
318 | - if ($max != 0 && $timeout > $max) { |
|
318 | + if ($max!=0 && $timeout > $max) { |
|
319 | 319 | @set_time_limit($timeout); |
320 | 320 | } |
321 | 321 | stream_set_timeout($this->smtp_conn, $timeout, 0); |
322 | 322 | } |
323 | 323 | // Get any announcement |
324 | 324 | $announce = $this->get_lines(); |
325 | - $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER); |
|
325 | + $this->edebug('SERVER -> CLIENT: '.$announce, self::DEBUG_SERVER); |
|
326 | 326 | return true; |
327 | 327 | } |
328 | 328 | |
@@ -381,9 +381,9 @@ discard block |
||
381 | 381 | return false; |
382 | 382 | } |
383 | 383 | |
384 | - self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL); |
|
384 | + self::edebug('Auth method requested: '.($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL); |
|
385 | 385 | self::edebug( |
386 | - 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']), |
|
386 | + 'Auth methods available on the server: '.implode(',', $this->server_caps['AUTH']), |
|
387 | 387 | self::DEBUG_LOWLEVEL |
388 | 388 | ); |
389 | 389 | |
@@ -417,7 +417,7 @@ discard block |
||
417 | 417 | // Send encoded username and password |
418 | 418 | if (!$this->sendCommand( |
419 | 419 | 'User & Password', |
420 | - base64_encode("\0" . $username . "\0" . $password), |
|
420 | + base64_encode("\0".$username."\0".$password), |
|
421 | 421 | 235 |
422 | 422 | ) |
423 | 423 | ) { |
@@ -463,7 +463,7 @@ discard block |
||
463 | 463 | |
464 | 464 | if (!$this->sendCommand( |
465 | 465 | 'AUTH NTLM', |
466 | - 'AUTH NTLM ' . base64_encode($msg1), |
|
466 | + 'AUTH NTLM '.base64_encode($msg1), |
|
467 | 467 | 334 |
468 | 468 | ) |
469 | 469 | ) { |
@@ -495,7 +495,7 @@ discard block |
||
495 | 495 | $challenge = base64_decode(substr($this->last_reply, 4)); |
496 | 496 | |
497 | 497 | // Build the response |
498 | - $response = $username . ' ' . $this->hmac($challenge, $password); |
|
498 | + $response = $username.' '.$this->hmac($challenge, $password); |
|
499 | 499 | |
500 | 500 | // send encoded credentials |
501 | 501 | return $this->sendCommand('Username', base64_encode($response), 235); |
@@ -539,7 +539,7 @@ discard block |
||
539 | 539 | $k_ipad = $key ^ $ipad; |
540 | 540 | $k_opad = $key ^ $opad; |
541 | 541 | |
542 | - return md5($k_opad . pack('H*', md5($k_ipad . $data))); |
|
542 | + return md5($k_opad.pack('H*', md5($k_ipad.$data))); |
|
543 | 543 | } |
544 | 544 | |
545 | 545 | /** |
@@ -622,13 +622,13 @@ discard block |
||
622 | 622 | |
623 | 623 | $field = substr($lines[0], 0, strpos($lines[0], ':')); |
624 | 624 | $in_headers = false; |
625 | - if (!empty($field) && strpos($field, ' ') === false) { |
|
625 | + if (!empty($field) && strpos($field, ' ')===false) { |
|
626 | 626 | $in_headers = true; |
627 | 627 | } |
628 | 628 | |
629 | 629 | foreach ($lines as $line) { |
630 | 630 | $lines_out = array(); |
631 | - if ($in_headers and $line == '') { |
|
631 | + if ($in_headers and $line=='') { |
|
632 | 632 | $in_headers = false; |
633 | 633 | } |
634 | 634 | //Break this line up into several smaller lines if it's too long |
@@ -640,18 +640,18 @@ discard block |
||
640 | 640 | //Deliberately matches both false and 0 |
641 | 641 | if (!$pos) { |
642 | 642 | //No nice break found, add a hard break |
643 | - $pos = self::MAX_LINE_LENGTH - 1; |
|
643 | + $pos = self::MAX_LINE_LENGTH-1; |
|
644 | 644 | $lines_out[] = substr($line, 0, $pos); |
645 | 645 | $line = substr($line, $pos); |
646 | - } else { |
|
646 | + }else { |
|
647 | 647 | //Break at the found point |
648 | 648 | $lines_out[] = substr($line, 0, $pos); |
649 | 649 | //Move along by the amount we dealt with |
650 | - $line = substr($line, $pos + 1); |
|
650 | + $line = substr($line, $pos+1); |
|
651 | 651 | } |
652 | 652 | //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1 |
653 | 653 | if ($in_headers) { |
654 | - $line = "\t" . $line; |
|
654 | + $line = "\t".$line; |
|
655 | 655 | } |
656 | 656 | } |
657 | 657 | $lines_out[] = $line; |
@@ -659,17 +659,17 @@ discard block |
||
659 | 659 | //Send the lines to the server |
660 | 660 | foreach ($lines_out as $line_out) { |
661 | 661 | //RFC2821 section 4.5.2 |
662 | - if (!empty($line_out) and $line_out[0] == '.') { |
|
663 | - $line_out = '.' . $line_out; |
|
662 | + if (!empty($line_out) and $line_out[0]=='.') { |
|
663 | + $line_out = '.'.$line_out; |
|
664 | 664 | } |
665 | - $this->client_send($line_out . self::CRLF); |
|
665 | + $this->client_send($line_out.self::CRLF); |
|
666 | 666 | } |
667 | 667 | } |
668 | 668 | |
669 | 669 | //Message data has been sent, complete the command |
670 | 670 | //Increase timelimit for end of DATA command |
671 | 671 | $savetimelimit = $this->Timelimit; |
672 | - $this->Timelimit = $this->Timelimit * 2; |
|
672 | + $this->Timelimit = $this->Timelimit*2; |
|
673 | 673 | $result = $this->sendCommand('DATA END', '.', 250); |
674 | 674 | //Restore timelimit |
675 | 675 | $this->Timelimit = $savetimelimit; |
@@ -703,11 +703,11 @@ discard block |
||
703 | 703 | */ |
704 | 704 | protected function sendHello($hello, $host) |
705 | 705 | { |
706 | - $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250); |
|
706 | + $noerror = $this->sendCommand($hello, $hello.' '.$host, 250); |
|
707 | 707 | $this->helo_rply = $this->last_reply; |
708 | 708 | if ($noerror) { |
709 | 709 | $this->parseHelloFields($hello); |
710 | - } else { |
|
710 | + }else { |
|
711 | 711 | $this->server_caps = null; |
712 | 712 | } |
713 | 713 | return $noerror; |
@@ -733,9 +733,9 @@ discard block |
||
733 | 733 | if (!$n) { |
734 | 734 | $name = $type; |
735 | 735 | $fields = $fields[0]; |
736 | - } else { |
|
736 | + }else { |
|
737 | 737 | $name = array_shift($fields); |
738 | - if ($name == 'SIZE') { |
|
738 | + if ($name=='SIZE') { |
|
739 | 739 | $fields = ($fields) ? $fields[0] : 0; |
740 | 740 | } |
741 | 741 | } |
@@ -760,7 +760,7 @@ discard block |
||
760 | 760 | $useVerp = ($this->do_verp ? ' XVERP' : ''); |
761 | 761 | return $this->sendCommand( |
762 | 762 | 'MAIL FROM', |
763 | - 'MAIL FROM:<' . $from . '>' . $useVerp, |
|
763 | + 'MAIL FROM:<'.$from.'>'.$useVerp, |
|
764 | 764 | 250 |
765 | 765 | ); |
766 | 766 | } |
@@ -797,7 +797,7 @@ discard block |
||
797 | 797 | { |
798 | 798 | return $this->sendCommand( |
799 | 799 | 'RCPT TO', |
800 | - 'RCPT TO:<' . $toaddr . '>', |
|
800 | + 'RCPT TO:<'.$toaddr.'>', |
|
801 | 801 | array(250, 251) |
802 | 802 | ); |
803 | 803 | } |
@@ -828,7 +828,7 @@ discard block |
||
828 | 828 | $this->setError("Called $command without being connected"); |
829 | 829 | return false; |
830 | 830 | } |
831 | - $this->client_send($commandstring . self::CRLF); |
|
831 | + $this->client_send($commandstring.self::CRLF); |
|
832 | 832 | |
833 | 833 | $this->last_reply = $this->get_lines(); |
834 | 834 | // Fetch SMTP code and possible error code explanation |
@@ -842,14 +842,14 @@ discard block |
||
842 | 842 | '', |
843 | 843 | $this->last_reply |
844 | 844 | ); |
845 | - } else { |
|
845 | + }else { |
|
846 | 846 | // Fall back to simple parsing if regex fails |
847 | 847 | $code = substr($this->last_reply, 0, 3); |
848 | 848 | $code_ex = null; |
849 | 849 | $detail = substr($this->last_reply, 4); |
850 | 850 | } |
851 | 851 | |
852 | - $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); |
|
852 | + $this->edebug('SERVER -> CLIENT: '.$this->last_reply, self::DEBUG_SERVER); |
|
853 | 853 | |
854 | 854 | if (!in_array($code, (array)$expect)) { |
855 | 855 | $this->setError( |
@@ -859,7 +859,7 @@ discard block |
||
859 | 859 | $code_ex |
860 | 860 | ); |
861 | 861 | $this->edebug( |
862 | - 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply, |
|
862 | + 'SMTP ERROR: '.$this->error['error'].': '.$this->last_reply, |
|
863 | 863 | self::DEBUG_CLIENT |
864 | 864 | ); |
865 | 865 | return false; |
@@ -921,7 +921,7 @@ discard block |
||
921 | 921 | public function turn() |
922 | 922 | { |
923 | 923 | $this->setError('The SMTP TURN command is not implemented'); |
924 | - $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT); |
|
924 | + $this->edebug('SMTP NOTICE: '.$this->error['error'], self::DEBUG_CLIENT); |
|
925 | 925 | return false; |
926 | 926 | } |
927 | 927 | |
@@ -985,10 +985,10 @@ discard block |
||
985 | 985 | |
986 | 986 | // the tight logic knot ;) |
987 | 987 | if (!array_key_exists($name, $this->server_caps)) { |
988 | - if ($name == 'HELO') { |
|
988 | + if ($name=='HELO') { |
|
989 | 989 | return $this->server_caps['EHLO']; |
990 | 990 | } |
991 | - if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) { |
|
991 | + if ($name=='EHLO' || array_key_exists('EHLO', $this->server_caps)) { |
|
992 | 992 | return false; |
993 | 993 | } |
994 | 994 | $this->setError('HELO handshake was used. Client knows nothing about server extensions'); |
@@ -1027,7 +1027,7 @@ discard block |
||
1027 | 1027 | $endtime = 0; |
1028 | 1028 | stream_set_timeout($this->smtp_conn, $this->Timeout); |
1029 | 1029 | if ($this->Timelimit > 0) { |
1030 | - $endtime = time() + $this->Timelimit; |
|
1030 | + $endtime = time()+$this->Timelimit; |
|
1031 | 1031 | } |
1032 | 1032 | while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) { |
1033 | 1033 | $str = @fgets($this->smtp_conn, 515); |
@@ -1036,14 +1036,14 @@ discard block |
||
1036 | 1036 | $data .= $str; |
1037 | 1037 | $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL); |
1038 | 1038 | // If 4th character is a space, we are done reading, break the loop, micro-optimisation over strlen |
1039 | - if ((isset($str[3]) and $str[3] == ' ')) { |
|
1039 | + if ((isset($str[3]) and $str[3]==' ')) { |
|
1040 | 1040 | break; |
1041 | 1041 | } |
1042 | 1042 | // Timed-out? Log and break |
1043 | 1043 | $info = stream_get_meta_data($this->smtp_conn); |
1044 | 1044 | if ($info['timed_out']) { |
1045 | 1045 | $this->edebug( |
1046 | - 'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)', |
|
1046 | + 'SMTP -> get_lines(): timed-out ('.$this->Timeout.' sec)', |
|
1047 | 1047 | self::DEBUG_LOWLEVEL |
1048 | 1048 | ); |
1049 | 1049 | break; |
@@ -1052,7 +1052,7 @@ discard block |
||
1052 | 1052 | if ($endtime and time() > $endtime) { |
1053 | 1053 | $this->edebug( |
1054 | 1054 | 'SMTP -> get_lines(): timelimit reached ('. |
1055 | - $this->Timelimit . ' sec)', |
|
1055 | + $this->Timelimit.' sec)', |
|
1056 | 1056 | self::DEBUG_LOWLEVEL |
1057 | 1057 | ); |
1058 | 1058 | break; |
@@ -26,418 +26,418 @@ discard block |
||
26 | 26 | */ |
27 | 27 | class SMTP |
28 | 28 | { |
29 | - /** |
|
30 | - * The PHPMailer SMTP version number. |
|
31 | - * @type string |
|
32 | - */ |
|
33 | - const VERSION = '5.2.10'; |
|
34 | - |
|
35 | - /** |
|
36 | - * SMTP line break constant. |
|
37 | - * @type string |
|
38 | - */ |
|
39 | - const CRLF = "\r\n"; |
|
40 | - |
|
41 | - /** |
|
42 | - * The SMTP port to use if one is not specified. |
|
43 | - * @type integer |
|
44 | - */ |
|
45 | - const DEFAULT_SMTP_PORT = 25; |
|
46 | - |
|
47 | - /** |
|
48 | - * The maximum line length allowed by RFC 2822 section 2.1.1 |
|
49 | - * @type integer |
|
50 | - */ |
|
51 | - const MAX_LINE_LENGTH = 998; |
|
52 | - |
|
53 | - /** |
|
54 | - * Debug level for no output |
|
55 | - */ |
|
56 | - const DEBUG_OFF = 0; |
|
57 | - |
|
58 | - /** |
|
59 | - * Debug level to show client -> server messages |
|
60 | - */ |
|
61 | - const DEBUG_CLIENT = 1; |
|
62 | - |
|
63 | - /** |
|
64 | - * Debug level to show client -> server and server -> client messages |
|
65 | - */ |
|
66 | - const DEBUG_SERVER = 2; |
|
67 | - |
|
68 | - /** |
|
69 | - * Debug level to show connection status, client -> server and server -> client messages |
|
70 | - */ |
|
71 | - const DEBUG_CONNECTION = 3; |
|
72 | - |
|
73 | - /** |
|
74 | - * Debug level to show all messages |
|
75 | - */ |
|
76 | - const DEBUG_LOWLEVEL = 4; |
|
77 | - |
|
78 | - /** |
|
79 | - * The PHPMailer SMTP Version number. |
|
80 | - * @type string |
|
81 | - * @deprecated Use the `VERSION` constant instead |
|
82 | - * @see SMTP::VERSION |
|
83 | - */ |
|
84 | - public $Version = '5.2.10'; |
|
85 | - |
|
86 | - /** |
|
87 | - * SMTP server port number. |
|
88 | - * @type integer |
|
89 | - * @deprecated This is only ever used as a default value, so use the `DEFAULT_SMTP_PORT` constant instead |
|
90 | - * @see SMTP::DEFAULT_SMTP_PORT |
|
91 | - */ |
|
92 | - public $SMTP_PORT = 25; |
|
93 | - |
|
94 | - /** |
|
95 | - * SMTP reply line ending. |
|
96 | - * @type string |
|
97 | - * @deprecated Use the `CRLF` constant instead |
|
98 | - * @see SMTP::CRLF |
|
99 | - */ |
|
100 | - public $CRLF = "\r\n"; |
|
101 | - |
|
102 | - /** |
|
103 | - * Debug output level. |
|
104 | - * Options: |
|
105 | - * * self::DEBUG_OFF (`0`) No debug output, default |
|
106 | - * * self::DEBUG_CLIENT (`1`) Client commands |
|
107 | - * * self::DEBUG_SERVER (`2`) Client commands and server responses |
|
108 | - * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status |
|
109 | - * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages |
|
110 | - * @type integer |
|
111 | - */ |
|
112 | - public $do_debug = self::DEBUG_OFF; |
|
113 | - |
|
114 | - /** |
|
115 | - * How to handle debug output. |
|
116 | - * Options: |
|
117 | - * * `echo` Output plain-text as-is, appropriate for CLI |
|
118 | - * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output |
|
119 | - * * `error_log` Output to error log as configured in php.ini |
|
120 | - * |
|
121 | - * Alternatively, you can provide a callable expecting two params: a message string and the debug level: |
|
122 | - * <code> |
|
123 | - * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; |
|
124 | - * </code> |
|
125 | - * @type string|callable |
|
126 | - */ |
|
127 | - public $Debugoutput = 'echo'; |
|
128 | - |
|
129 | - /** |
|
130 | - * Whether to use VERP. |
|
131 | - * @link http://en.wikipedia.org/wiki/Variable_envelope_return_path |
|
132 | - * @link http://www.postfix.org/VERP_README.html Info on VERP |
|
133 | - * @type boolean |
|
134 | - */ |
|
135 | - public $do_verp = false; |
|
136 | - |
|
137 | - /** |
|
138 | - * The timeout value for connection, in seconds. |
|
139 | - * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2 |
|
140 | - * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure. |
|
141 | - * @link http://tools.ietf.org/html/rfc2821#section-4.5.3.2 |
|
142 | - * @type integer |
|
143 | - */ |
|
144 | - public $Timeout = 300; |
|
145 | - |
|
146 | - /** |
|
147 | - * How long to wait for commands to complete, in seconds. |
|
148 | - * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2 |
|
149 | - * @type integer |
|
150 | - */ |
|
151 | - public $Timelimit = 300; |
|
152 | - |
|
153 | - /** |
|
154 | - * The socket for the server connection. |
|
155 | - * @type resource |
|
156 | - */ |
|
157 | - protected $smtp_conn; |
|
158 | - |
|
159 | - /** |
|
160 | - * Error information, if any, for the last SMTP command. |
|
161 | - * @type array |
|
162 | - */ |
|
163 | - protected $error = array( |
|
164 | - 'error' => '', |
|
165 | - 'detail' => '', |
|
166 | - 'smtp_code' => '', |
|
167 | - 'smtp_code_ex' => '' |
|
168 | - ); |
|
169 | - |
|
170 | - /** |
|
171 | - * The reply the server sent to us for HELO. |
|
172 | - * If null, no HELO string has yet been received. |
|
173 | - * @type string|null |
|
174 | - */ |
|
175 | - protected $helo_rply = null; |
|
176 | - |
|
177 | - /** |
|
178 | - * The set of SMTP extensions sent in reply to EHLO command. |
|
179 | - * Indexes of the array are extension names. |
|
180 | - * Value at index 'HELO' or 'EHLO' (according to command that was sent) |
|
181 | - * represents the server name. In case of HELO it is the only element of the array. |
|
182 | - * Other values can be boolean TRUE or an array containing extension options. |
|
183 | - * If null, no HELO/EHLO string has yet been received. |
|
184 | - * @type array|null |
|
185 | - */ |
|
186 | - protected $server_caps = null; |
|
187 | - |
|
188 | - /** |
|
189 | - * The most recent reply received from the server. |
|
190 | - * @type string |
|
191 | - */ |
|
192 | - protected $last_reply = ''; |
|
193 | - |
|
194 | - /** |
|
195 | - * Output debugging info via a user-selected method. |
|
196 | - * @see SMTP::$Debugoutput |
|
197 | - * @see SMTP::$do_debug |
|
198 | - * @param string $str Debug string to output |
|
199 | - * @param integer $level The debug level of this message; see DEBUG_* constants |
|
200 | - * @return void |
|
201 | - */ |
|
202 | - protected function edebug($str, $level = 0) |
|
203 | - { |
|
204 | - if ($level > $this->do_debug) { |
|
205 | - return; |
|
206 | - } |
|
207 | - //Avoid clash with built-in function names |
|
208 | - if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) { |
|
209 | - call_user_func($this->Debugoutput, $str, $this->do_debug); |
|
210 | - return; |
|
211 | - } |
|
212 | - switch ($this->Debugoutput) { |
|
213 | - case 'error_log': |
|
214 | - //Don't output, just log |
|
215 | - error_log($str); |
|
216 | - break; |
|
217 | - case 'html': |
|
218 | - //Cleans up output a bit for a better looking, HTML-safe output |
|
219 | - echo htmlentities( |
|
220 | - preg_replace('/[\r\n]+/', '', $str), |
|
221 | - ENT_QUOTES, |
|
222 | - 'UTF-8' |
|
223 | - ) |
|
224 | - . "<br>\n"; |
|
225 | - break; |
|
226 | - case 'echo': |
|
227 | - default: |
|
228 | - //Normalize line breaks |
|
229 | - $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str); |
|
230 | - echo gmdate('Y-m-d H:i:s') . "\t" . str_replace( |
|
231 | - "\n", |
|
232 | - "\n \t ", |
|
233 | - trim($str) |
|
234 | - )."\n"; |
|
235 | - } |
|
236 | - } |
|
237 | - |
|
238 | - /** |
|
239 | - * Connect to an SMTP server. |
|
240 | - * @param string $host SMTP server IP or host name |
|
241 | - * @param integer $port The port number to connect to |
|
242 | - * @param integer $timeout How long to wait for the connection to open |
|
243 | - * @param array $options An array of options for stream_context_create() |
|
244 | - * @access public |
|
245 | - * @return boolean |
|
246 | - */ |
|
247 | - public function connect($host, $port = null, $timeout = 30, $options = array()) |
|
248 | - { |
|
249 | - static $streamok; |
|
250 | - //This is enabled by default since 5.0.0 but some providers disable it |
|
251 | - //Check this once and cache the result |
|
252 | - if (is_null($streamok)) { |
|
253 | - $streamok = function_exists('stream_socket_client'); |
|
254 | - } |
|
255 | - // Clear errors to avoid confusion |
|
256 | - $this->setError(''); |
|
257 | - // Make sure we are __not__ connected |
|
258 | - if ($this->connected()) { |
|
259 | - // Already connected, generate error |
|
260 | - $this->setError('Already connected to a server'); |
|
261 | - return false; |
|
262 | - } |
|
263 | - if (empty($port)) { |
|
264 | - $port = self::DEFAULT_SMTP_PORT; |
|
265 | - } |
|
266 | - // Connect to the SMTP server |
|
267 | - $this->edebug( |
|
268 | - "Connection: opening to $host:$port, timeout=$timeout, options=".var_export($options, true), |
|
269 | - self::DEBUG_CONNECTION |
|
270 | - ); |
|
271 | - $errno = 0; |
|
272 | - $errstr = ''; |
|
273 | - if ($streamok) { |
|
274 | - $socket_context = stream_context_create($options); |
|
275 | - //Suppress errors; connection failures are handled at a higher level |
|
276 | - $this->smtp_conn = @stream_socket_client( |
|
277 | - $host . ":" . $port, |
|
278 | - $errno, |
|
279 | - $errstr, |
|
280 | - $timeout, |
|
281 | - STREAM_CLIENT_CONNECT, |
|
282 | - $socket_context |
|
283 | - ); |
|
284 | - } else { |
|
285 | - //Fall back to fsockopen which should work in more places, but is missing some features |
|
286 | - $this->edebug( |
|
287 | - "Connection: stream_socket_client not available, falling back to fsockopen", |
|
288 | - self::DEBUG_CONNECTION |
|
289 | - ); |
|
290 | - $this->smtp_conn = fsockopen( |
|
291 | - $host, |
|
292 | - $port, |
|
293 | - $errno, |
|
294 | - $errstr, |
|
295 | - $timeout |
|
296 | - ); |
|
297 | - } |
|
298 | - // Verify we connected properly |
|
299 | - if (!is_resource($this->smtp_conn)) { |
|
300 | - $this->setError( |
|
301 | - 'Failed to connect to server', |
|
302 | - $errno, |
|
303 | - $errstr |
|
304 | - ); |
|
305 | - $this->edebug( |
|
306 | - 'SMTP ERROR: ' . $this->error['error'] |
|
307 | - . ": $errstr ($errno)", |
|
308 | - self::DEBUG_CLIENT |
|
309 | - ); |
|
310 | - return false; |
|
311 | - } |
|
312 | - $this->edebug('Connection: opened', self::DEBUG_CONNECTION); |
|
313 | - // SMTP server can take longer to respond, give longer timeout for first read |
|
314 | - // Windows does not have support for this timeout function |
|
315 | - if (substr(PHP_OS, 0, 3) != 'WIN') { |
|
316 | - $max = ini_get('max_execution_time'); |
|
317 | - // Don't bother if unlimited |
|
318 | - if ($max != 0 && $timeout > $max) { |
|
319 | - @set_time_limit($timeout); |
|
320 | - } |
|
321 | - stream_set_timeout($this->smtp_conn, $timeout, 0); |
|
322 | - } |
|
323 | - // Get any announcement |
|
324 | - $announce = $this->get_lines(); |
|
325 | - $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER); |
|
326 | - return true; |
|
327 | - } |
|
328 | - |
|
329 | - /** |
|
330 | - * Initiate a TLS (encrypted) session. |
|
331 | - * @access public |
|
332 | - * @return boolean |
|
333 | - */ |
|
334 | - public function startTLS() |
|
335 | - { |
|
336 | - if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { |
|
337 | - return false; |
|
338 | - } |
|
339 | - // Begin encrypted connection |
|
340 | - if (!stream_socket_enable_crypto( |
|
341 | - $this->smtp_conn, |
|
342 | - true, |
|
343 | - STREAM_CRYPTO_METHOD_TLS_CLIENT |
|
344 | - )) { |
|
345 | - return false; |
|
346 | - } |
|
347 | - return true; |
|
348 | - } |
|
349 | - |
|
350 | - /** |
|
351 | - * Perform SMTP authentication. |
|
352 | - * Must be run after hello(). |
|
353 | - * @see hello() |
|
354 | - * @param string $username The user name |
|
355 | - * @param string $password The password |
|
356 | - * @param string $authtype The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5) |
|
357 | - * @param string $realm The auth realm for NTLM |
|
358 | - * @param string $workstation The auth workstation for NTLM |
|
359 | - * @access public |
|
360 | - * @return boolean True if successfully authenticated. |
|
361 | - */ |
|
362 | - public function authenticate( |
|
363 | - $username, |
|
364 | - $password, |
|
365 | - $authtype = null, |
|
366 | - $realm = '', |
|
367 | - $workstation = '' |
|
368 | - ) { |
|
369 | - if (!$this->server_caps) { |
|
370 | - $this->setError('Authentication is not allowed before HELO/EHLO'); |
|
371 | - return false; |
|
372 | - } |
|
373 | - |
|
374 | - if (array_key_exists('EHLO', $this->server_caps)) { |
|
375 | - // SMTP extensions are available. Let's try to find a proper authentication method |
|
376 | - |
|
377 | - if (!array_key_exists('AUTH', $this->server_caps)) { |
|
378 | - $this->setError('Authentication is not allowed at this stage'); |
|
379 | - // 'at this stage' means that auth may be allowed after the stage changes |
|
380 | - // e.g. after STARTTLS |
|
381 | - return false; |
|
382 | - } |
|
383 | - |
|
384 | - self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL); |
|
385 | - self::edebug( |
|
386 | - 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']), |
|
387 | - self::DEBUG_LOWLEVEL |
|
388 | - ); |
|
389 | - |
|
390 | - if (empty($authtype)) { |
|
391 | - foreach (array('LOGIN', 'CRAM-MD5', 'NTLM', 'PLAIN') as $method) { |
|
392 | - if (in_array($method, $this->server_caps['AUTH'])) { |
|
393 | - $authtype = $method; |
|
394 | - break; |
|
395 | - } |
|
396 | - } |
|
397 | - if (empty($authtype)) { |
|
398 | - $this->setError('No supported authentication methods found'); |
|
399 | - return false; |
|
400 | - } |
|
401 | - self::edebug('Auth method selected: '.$authtype, self::DEBUG_LOWLEVEL); |
|
402 | - } |
|
403 | - |
|
404 | - if (!in_array($authtype, $this->server_caps['AUTH'])) { |
|
405 | - $this->setError("The requested authentication method \"$authtype\" is not supported by the server"); |
|
406 | - return false; |
|
407 | - } |
|
408 | - } elseif (empty($authtype)) { |
|
409 | - $authtype = 'LOGIN'; |
|
410 | - } |
|
411 | - switch ($authtype) { |
|
412 | - case 'PLAIN': |
|
413 | - // Start authentication |
|
414 | - if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) { |
|
415 | - return false; |
|
416 | - } |
|
417 | - // Send encoded username and password |
|
418 | - if (!$this->sendCommand( |
|
419 | - 'User & Password', |
|
420 | - base64_encode("\0" . $username . "\0" . $password), |
|
421 | - 235 |
|
422 | - ) |
|
423 | - ) { |
|
424 | - return false; |
|
425 | - } |
|
426 | - break; |
|
427 | - case 'LOGIN': |
|
428 | - // Start authentication |
|
429 | - if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) { |
|
430 | - return false; |
|
431 | - } |
|
432 | - if (!$this->sendCommand("Username", base64_encode($username), 334)) { |
|
433 | - return false; |
|
434 | - } |
|
435 | - if (!$this->sendCommand("Password", base64_encode($password), 235)) { |
|
436 | - return false; |
|
437 | - } |
|
438 | - break; |
|
439 | - case 'NTLM': |
|
440 | - /* |
|
29 | + /** |
|
30 | + * The PHPMailer SMTP version number. |
|
31 | + * @type string |
|
32 | + */ |
|
33 | + const VERSION = '5.2.10'; |
|
34 | + |
|
35 | + /** |
|
36 | + * SMTP line break constant. |
|
37 | + * @type string |
|
38 | + */ |
|
39 | + const CRLF = "\r\n"; |
|
40 | + |
|
41 | + /** |
|
42 | + * The SMTP port to use if one is not specified. |
|
43 | + * @type integer |
|
44 | + */ |
|
45 | + const DEFAULT_SMTP_PORT = 25; |
|
46 | + |
|
47 | + /** |
|
48 | + * The maximum line length allowed by RFC 2822 section 2.1.1 |
|
49 | + * @type integer |
|
50 | + */ |
|
51 | + const MAX_LINE_LENGTH = 998; |
|
52 | + |
|
53 | + /** |
|
54 | + * Debug level for no output |
|
55 | + */ |
|
56 | + const DEBUG_OFF = 0; |
|
57 | + |
|
58 | + /** |
|
59 | + * Debug level to show client -> server messages |
|
60 | + */ |
|
61 | + const DEBUG_CLIENT = 1; |
|
62 | + |
|
63 | + /** |
|
64 | + * Debug level to show client -> server and server -> client messages |
|
65 | + */ |
|
66 | + const DEBUG_SERVER = 2; |
|
67 | + |
|
68 | + /** |
|
69 | + * Debug level to show connection status, client -> server and server -> client messages |
|
70 | + */ |
|
71 | + const DEBUG_CONNECTION = 3; |
|
72 | + |
|
73 | + /** |
|
74 | + * Debug level to show all messages |
|
75 | + */ |
|
76 | + const DEBUG_LOWLEVEL = 4; |
|
77 | + |
|
78 | + /** |
|
79 | + * The PHPMailer SMTP Version number. |
|
80 | + * @type string |
|
81 | + * @deprecated Use the `VERSION` constant instead |
|
82 | + * @see SMTP::VERSION |
|
83 | + */ |
|
84 | + public $Version = '5.2.10'; |
|
85 | + |
|
86 | + /** |
|
87 | + * SMTP server port number. |
|
88 | + * @type integer |
|
89 | + * @deprecated This is only ever used as a default value, so use the `DEFAULT_SMTP_PORT` constant instead |
|
90 | + * @see SMTP::DEFAULT_SMTP_PORT |
|
91 | + */ |
|
92 | + public $SMTP_PORT = 25; |
|
93 | + |
|
94 | + /** |
|
95 | + * SMTP reply line ending. |
|
96 | + * @type string |
|
97 | + * @deprecated Use the `CRLF` constant instead |
|
98 | + * @see SMTP::CRLF |
|
99 | + */ |
|
100 | + public $CRLF = "\r\n"; |
|
101 | + |
|
102 | + /** |
|
103 | + * Debug output level. |
|
104 | + * Options: |
|
105 | + * * self::DEBUG_OFF (`0`) No debug output, default |
|
106 | + * * self::DEBUG_CLIENT (`1`) Client commands |
|
107 | + * * self::DEBUG_SERVER (`2`) Client commands and server responses |
|
108 | + * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status |
|
109 | + * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages |
|
110 | + * @type integer |
|
111 | + */ |
|
112 | + public $do_debug = self::DEBUG_OFF; |
|
113 | + |
|
114 | + /** |
|
115 | + * How to handle debug output. |
|
116 | + * Options: |
|
117 | + * * `echo` Output plain-text as-is, appropriate for CLI |
|
118 | + * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output |
|
119 | + * * `error_log` Output to error log as configured in php.ini |
|
120 | + * |
|
121 | + * Alternatively, you can provide a callable expecting two params: a message string and the debug level: |
|
122 | + * <code> |
|
123 | + * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; |
|
124 | + * </code> |
|
125 | + * @type string|callable |
|
126 | + */ |
|
127 | + public $Debugoutput = 'echo'; |
|
128 | + |
|
129 | + /** |
|
130 | + * Whether to use VERP. |
|
131 | + * @link http://en.wikipedia.org/wiki/Variable_envelope_return_path |
|
132 | + * @link http://www.postfix.org/VERP_README.html Info on VERP |
|
133 | + * @type boolean |
|
134 | + */ |
|
135 | + public $do_verp = false; |
|
136 | + |
|
137 | + /** |
|
138 | + * The timeout value for connection, in seconds. |
|
139 | + * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2 |
|
140 | + * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure. |
|
141 | + * @link http://tools.ietf.org/html/rfc2821#section-4.5.3.2 |
|
142 | + * @type integer |
|
143 | + */ |
|
144 | + public $Timeout = 300; |
|
145 | + |
|
146 | + /** |
|
147 | + * How long to wait for commands to complete, in seconds. |
|
148 | + * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2 |
|
149 | + * @type integer |
|
150 | + */ |
|
151 | + public $Timelimit = 300; |
|
152 | + |
|
153 | + /** |
|
154 | + * The socket for the server connection. |
|
155 | + * @type resource |
|
156 | + */ |
|
157 | + protected $smtp_conn; |
|
158 | + |
|
159 | + /** |
|
160 | + * Error information, if any, for the last SMTP command. |
|
161 | + * @type array |
|
162 | + */ |
|
163 | + protected $error = array( |
|
164 | + 'error' => '', |
|
165 | + 'detail' => '', |
|
166 | + 'smtp_code' => '', |
|
167 | + 'smtp_code_ex' => '' |
|
168 | + ); |
|
169 | + |
|
170 | + /** |
|
171 | + * The reply the server sent to us for HELO. |
|
172 | + * If null, no HELO string has yet been received. |
|
173 | + * @type string|null |
|
174 | + */ |
|
175 | + protected $helo_rply = null; |
|
176 | + |
|
177 | + /** |
|
178 | + * The set of SMTP extensions sent in reply to EHLO command. |
|
179 | + * Indexes of the array are extension names. |
|
180 | + * Value at index 'HELO' or 'EHLO' (according to command that was sent) |
|
181 | + * represents the server name. In case of HELO it is the only element of the array. |
|
182 | + * Other values can be boolean TRUE or an array containing extension options. |
|
183 | + * If null, no HELO/EHLO string has yet been received. |
|
184 | + * @type array|null |
|
185 | + */ |
|
186 | + protected $server_caps = null; |
|
187 | + |
|
188 | + /** |
|
189 | + * The most recent reply received from the server. |
|
190 | + * @type string |
|
191 | + */ |
|
192 | + protected $last_reply = ''; |
|
193 | + |
|
194 | + /** |
|
195 | + * Output debugging info via a user-selected method. |
|
196 | + * @see SMTP::$Debugoutput |
|
197 | + * @see SMTP::$do_debug |
|
198 | + * @param string $str Debug string to output |
|
199 | + * @param integer $level The debug level of this message; see DEBUG_* constants |
|
200 | + * @return void |
|
201 | + */ |
|
202 | + protected function edebug($str, $level = 0) |
|
203 | + { |
|
204 | + if ($level > $this->do_debug) { |
|
205 | + return; |
|
206 | + } |
|
207 | + //Avoid clash with built-in function names |
|
208 | + if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) { |
|
209 | + call_user_func($this->Debugoutput, $str, $this->do_debug); |
|
210 | + return; |
|
211 | + } |
|
212 | + switch ($this->Debugoutput) { |
|
213 | + case 'error_log': |
|
214 | + //Don't output, just log |
|
215 | + error_log($str); |
|
216 | + break; |
|
217 | + case 'html': |
|
218 | + //Cleans up output a bit for a better looking, HTML-safe output |
|
219 | + echo htmlentities( |
|
220 | + preg_replace('/[\r\n]+/', '', $str), |
|
221 | + ENT_QUOTES, |
|
222 | + 'UTF-8' |
|
223 | + ) |
|
224 | + . "<br>\n"; |
|
225 | + break; |
|
226 | + case 'echo': |
|
227 | + default: |
|
228 | + //Normalize line breaks |
|
229 | + $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str); |
|
230 | + echo gmdate('Y-m-d H:i:s') . "\t" . str_replace( |
|
231 | + "\n", |
|
232 | + "\n \t ", |
|
233 | + trim($str) |
|
234 | + )."\n"; |
|
235 | + } |
|
236 | + } |
|
237 | + |
|
238 | + /** |
|
239 | + * Connect to an SMTP server. |
|
240 | + * @param string $host SMTP server IP or host name |
|
241 | + * @param integer $port The port number to connect to |
|
242 | + * @param integer $timeout How long to wait for the connection to open |
|
243 | + * @param array $options An array of options for stream_context_create() |
|
244 | + * @access public |
|
245 | + * @return boolean |
|
246 | + */ |
|
247 | + public function connect($host, $port = null, $timeout = 30, $options = array()) |
|
248 | + { |
|
249 | + static $streamok; |
|
250 | + //This is enabled by default since 5.0.0 but some providers disable it |
|
251 | + //Check this once and cache the result |
|
252 | + if (is_null($streamok)) { |
|
253 | + $streamok = function_exists('stream_socket_client'); |
|
254 | + } |
|
255 | + // Clear errors to avoid confusion |
|
256 | + $this->setError(''); |
|
257 | + // Make sure we are __not__ connected |
|
258 | + if ($this->connected()) { |
|
259 | + // Already connected, generate error |
|
260 | + $this->setError('Already connected to a server'); |
|
261 | + return false; |
|
262 | + } |
|
263 | + if (empty($port)) { |
|
264 | + $port = self::DEFAULT_SMTP_PORT; |
|
265 | + } |
|
266 | + // Connect to the SMTP server |
|
267 | + $this->edebug( |
|
268 | + "Connection: opening to $host:$port, timeout=$timeout, options=".var_export($options, true), |
|
269 | + self::DEBUG_CONNECTION |
|
270 | + ); |
|
271 | + $errno = 0; |
|
272 | + $errstr = ''; |
|
273 | + if ($streamok) { |
|
274 | + $socket_context = stream_context_create($options); |
|
275 | + //Suppress errors; connection failures are handled at a higher level |
|
276 | + $this->smtp_conn = @stream_socket_client( |
|
277 | + $host . ":" . $port, |
|
278 | + $errno, |
|
279 | + $errstr, |
|
280 | + $timeout, |
|
281 | + STREAM_CLIENT_CONNECT, |
|
282 | + $socket_context |
|
283 | + ); |
|
284 | + } else { |
|
285 | + //Fall back to fsockopen which should work in more places, but is missing some features |
|
286 | + $this->edebug( |
|
287 | + "Connection: stream_socket_client not available, falling back to fsockopen", |
|
288 | + self::DEBUG_CONNECTION |
|
289 | + ); |
|
290 | + $this->smtp_conn = fsockopen( |
|
291 | + $host, |
|
292 | + $port, |
|
293 | + $errno, |
|
294 | + $errstr, |
|
295 | + $timeout |
|
296 | + ); |
|
297 | + } |
|
298 | + // Verify we connected properly |
|
299 | + if (!is_resource($this->smtp_conn)) { |
|
300 | + $this->setError( |
|
301 | + 'Failed to connect to server', |
|
302 | + $errno, |
|
303 | + $errstr |
|
304 | + ); |
|
305 | + $this->edebug( |
|
306 | + 'SMTP ERROR: ' . $this->error['error'] |
|
307 | + . ": $errstr ($errno)", |
|
308 | + self::DEBUG_CLIENT |
|
309 | + ); |
|
310 | + return false; |
|
311 | + } |
|
312 | + $this->edebug('Connection: opened', self::DEBUG_CONNECTION); |
|
313 | + // SMTP server can take longer to respond, give longer timeout for first read |
|
314 | + // Windows does not have support for this timeout function |
|
315 | + if (substr(PHP_OS, 0, 3) != 'WIN') { |
|
316 | + $max = ini_get('max_execution_time'); |
|
317 | + // Don't bother if unlimited |
|
318 | + if ($max != 0 && $timeout > $max) { |
|
319 | + @set_time_limit($timeout); |
|
320 | + } |
|
321 | + stream_set_timeout($this->smtp_conn, $timeout, 0); |
|
322 | + } |
|
323 | + // Get any announcement |
|
324 | + $announce = $this->get_lines(); |
|
325 | + $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER); |
|
326 | + return true; |
|
327 | + } |
|
328 | + |
|
329 | + /** |
|
330 | + * Initiate a TLS (encrypted) session. |
|
331 | + * @access public |
|
332 | + * @return boolean |
|
333 | + */ |
|
334 | + public function startTLS() |
|
335 | + { |
|
336 | + if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { |
|
337 | + return false; |
|
338 | + } |
|
339 | + // Begin encrypted connection |
|
340 | + if (!stream_socket_enable_crypto( |
|
341 | + $this->smtp_conn, |
|
342 | + true, |
|
343 | + STREAM_CRYPTO_METHOD_TLS_CLIENT |
|
344 | + )) { |
|
345 | + return false; |
|
346 | + } |
|
347 | + return true; |
|
348 | + } |
|
349 | + |
|
350 | + /** |
|
351 | + * Perform SMTP authentication. |
|
352 | + * Must be run after hello(). |
|
353 | + * @see hello() |
|
354 | + * @param string $username The user name |
|
355 | + * @param string $password The password |
|
356 | + * @param string $authtype The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5) |
|
357 | + * @param string $realm The auth realm for NTLM |
|
358 | + * @param string $workstation The auth workstation for NTLM |
|
359 | + * @access public |
|
360 | + * @return boolean True if successfully authenticated. |
|
361 | + */ |
|
362 | + public function authenticate( |
|
363 | + $username, |
|
364 | + $password, |
|
365 | + $authtype = null, |
|
366 | + $realm = '', |
|
367 | + $workstation = '' |
|
368 | + ) { |
|
369 | + if (!$this->server_caps) { |
|
370 | + $this->setError('Authentication is not allowed before HELO/EHLO'); |
|
371 | + return false; |
|
372 | + } |
|
373 | + |
|
374 | + if (array_key_exists('EHLO', $this->server_caps)) { |
|
375 | + // SMTP extensions are available. Let's try to find a proper authentication method |
|
376 | + |
|
377 | + if (!array_key_exists('AUTH', $this->server_caps)) { |
|
378 | + $this->setError('Authentication is not allowed at this stage'); |
|
379 | + // 'at this stage' means that auth may be allowed after the stage changes |
|
380 | + // e.g. after STARTTLS |
|
381 | + return false; |
|
382 | + } |
|
383 | + |
|
384 | + self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL); |
|
385 | + self::edebug( |
|
386 | + 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']), |
|
387 | + self::DEBUG_LOWLEVEL |
|
388 | + ); |
|
389 | + |
|
390 | + if (empty($authtype)) { |
|
391 | + foreach (array('LOGIN', 'CRAM-MD5', 'NTLM', 'PLAIN') as $method) { |
|
392 | + if (in_array($method, $this->server_caps['AUTH'])) { |
|
393 | + $authtype = $method; |
|
394 | + break; |
|
395 | + } |
|
396 | + } |
|
397 | + if (empty($authtype)) { |
|
398 | + $this->setError('No supported authentication methods found'); |
|
399 | + return false; |
|
400 | + } |
|
401 | + self::edebug('Auth method selected: '.$authtype, self::DEBUG_LOWLEVEL); |
|
402 | + } |
|
403 | + |
|
404 | + if (!in_array($authtype, $this->server_caps['AUTH'])) { |
|
405 | + $this->setError("The requested authentication method \"$authtype\" is not supported by the server"); |
|
406 | + return false; |
|
407 | + } |
|
408 | + } elseif (empty($authtype)) { |
|
409 | + $authtype = 'LOGIN'; |
|
410 | + } |
|
411 | + switch ($authtype) { |
|
412 | + case 'PLAIN': |
|
413 | + // Start authentication |
|
414 | + if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) { |
|
415 | + return false; |
|
416 | + } |
|
417 | + // Send encoded username and password |
|
418 | + if (!$this->sendCommand( |
|
419 | + 'User & Password', |
|
420 | + base64_encode("\0" . $username . "\0" . $password), |
|
421 | + 235 |
|
422 | + ) |
|
423 | + ) { |
|
424 | + return false; |
|
425 | + } |
|
426 | + break; |
|
427 | + case 'LOGIN': |
|
428 | + // Start authentication |
|
429 | + if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) { |
|
430 | + return false; |
|
431 | + } |
|
432 | + if (!$this->sendCommand("Username", base64_encode($username), 334)) { |
|
433 | + return false; |
|
434 | + } |
|
435 | + if (!$this->sendCommand("Password", base64_encode($password), 235)) { |
|
436 | + return false; |
|
437 | + } |
|
438 | + break; |
|
439 | + case 'NTLM': |
|
440 | + /* |
|
441 | 441 | * ntlm_sasl_client.php |
442 | 442 | * Bundled with Permission |
443 | 443 | * |
@@ -445,166 +445,166 @@ discard block |
||
445 | 445 | * http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx |
446 | 446 | * PROTOCOL Docs http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication |
447 | 447 | */ |
448 | - require_once 'extras/ntlm_sasl_client.php'; |
|
449 | - $temp = new stdClass; |
|
450 | - $ntlm_client = new ntlm_sasl_client_class; |
|
451 | - //Check that functions are available |
|
452 | - if (!$ntlm_client->Initialize($temp)) { |
|
453 | - $this->setError($temp->error); |
|
454 | - $this->edebug( |
|
455 | - 'You need to enable some modules in your php.ini file: ' |
|
456 | - . $this->error['error'], |
|
457 | - self::DEBUG_CLIENT |
|
458 | - ); |
|
459 | - return false; |
|
460 | - } |
|
461 | - //msg1 |
|
462 | - $msg1 = $ntlm_client->TypeMsg1($realm, $workstation); //msg1 |
|
463 | - |
|
464 | - if (!$this->sendCommand( |
|
465 | - 'AUTH NTLM', |
|
466 | - 'AUTH NTLM ' . base64_encode($msg1), |
|
467 | - 334 |
|
468 | - ) |
|
469 | - ) { |
|
470 | - return false; |
|
471 | - } |
|
472 | - //Though 0 based, there is a white space after the 3 digit number |
|
473 | - //msg2 |
|
474 | - $challenge = substr($this->last_reply, 3); |
|
475 | - $challenge = base64_decode($challenge); |
|
476 | - $ntlm_res = $ntlm_client->NTLMResponse( |
|
477 | - substr($challenge, 24, 8), |
|
478 | - $password |
|
479 | - ); |
|
480 | - //msg3 |
|
481 | - $msg3 = $ntlm_client->TypeMsg3( |
|
482 | - $ntlm_res, |
|
483 | - $username, |
|
484 | - $realm, |
|
485 | - $workstation |
|
486 | - ); |
|
487 | - // send encoded username |
|
488 | - return $this->sendCommand('Username', base64_encode($msg3), 235); |
|
489 | - case 'CRAM-MD5': |
|
490 | - // Start authentication |
|
491 | - if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) { |
|
492 | - return false; |
|
493 | - } |
|
494 | - // Get the challenge |
|
495 | - $challenge = base64_decode(substr($this->last_reply, 4)); |
|
496 | - |
|
497 | - // Build the response |
|
498 | - $response = $username . ' ' . $this->hmac($challenge, $password); |
|
499 | - |
|
500 | - // send encoded credentials |
|
501 | - return $this->sendCommand('Username', base64_encode($response), 235); |
|
502 | - default: |
|
503 | - $this->setError("Authentication method \"$authtype\" is not supported"); |
|
504 | - return false; |
|
505 | - } |
|
506 | - return true; |
|
507 | - } |
|
508 | - |
|
509 | - /** |
|
510 | - * Calculate an MD5 HMAC hash. |
|
511 | - * Works like hash_hmac('md5', $data, $key) |
|
512 | - * in case that function is not available |
|
513 | - * @param string $data The data to hash |
|
514 | - * @param string $key The key to hash with |
|
515 | - * @access protected |
|
516 | - * @return string |
|
517 | - */ |
|
518 | - protected function hmac($data, $key) |
|
519 | - { |
|
520 | - if (function_exists('hash_hmac')) { |
|
521 | - return hash_hmac('md5', $data, $key); |
|
522 | - } |
|
523 | - |
|
524 | - // The following borrowed from |
|
525 | - // http://php.net/manual/en/function.mhash.php#27225 |
|
526 | - |
|
527 | - // RFC 2104 HMAC implementation for php. |
|
528 | - // Creates an md5 HMAC. |
|
529 | - // Eliminates the need to install mhash to compute a HMAC |
|
530 | - // by Lance Rushing |
|
531 | - |
|
532 | - $bytelen = 64; // byte length for md5 |
|
533 | - if (strlen($key) > $bytelen) { |
|
534 | - $key = pack('H*', md5($key)); |
|
535 | - } |
|
536 | - $key = str_pad($key, $bytelen, chr(0x00)); |
|
537 | - $ipad = str_pad('', $bytelen, chr(0x36)); |
|
538 | - $opad = str_pad('', $bytelen, chr(0x5c)); |
|
539 | - $k_ipad = $key ^ $ipad; |
|
540 | - $k_opad = $key ^ $opad; |
|
541 | - |
|
542 | - return md5($k_opad . pack('H*', md5($k_ipad . $data))); |
|
543 | - } |
|
544 | - |
|
545 | - /** |
|
546 | - * Check connection state. |
|
547 | - * @access public |
|
548 | - * @return boolean True if connected. |
|
549 | - */ |
|
550 | - public function connected() |
|
551 | - { |
|
552 | - if (is_resource($this->smtp_conn)) { |
|
553 | - $sock_status = stream_get_meta_data($this->smtp_conn); |
|
554 | - if ($sock_status['eof']) { |
|
555 | - // The socket is valid but we are not connected |
|
556 | - $this->edebug( |
|
557 | - 'SMTP NOTICE: EOF caught while checking if connected', |
|
558 | - self::DEBUG_CLIENT |
|
559 | - ); |
|
560 | - $this->close(); |
|
561 | - return false; |
|
562 | - } |
|
563 | - return true; // everything looks good |
|
564 | - } |
|
565 | - return false; |
|
566 | - } |
|
567 | - |
|
568 | - /** |
|
569 | - * Close the socket and clean up the state of the class. |
|
570 | - * Don't use this function without first trying to use QUIT. |
|
571 | - * @see quit() |
|
572 | - * @access public |
|
573 | - * @return void |
|
574 | - */ |
|
575 | - public function close() |
|
576 | - { |
|
577 | - $this->setError(''); |
|
578 | - $this->server_caps = null; |
|
579 | - $this->helo_rply = null; |
|
580 | - if (is_resource($this->smtp_conn)) { |
|
581 | - // close the connection and cleanup |
|
582 | - fclose($this->smtp_conn); |
|
583 | - $this->smtp_conn = null; //Makes for cleaner serialization |
|
584 | - $this->edebug('Connection: closed', self::DEBUG_CONNECTION); |
|
585 | - } |
|
586 | - } |
|
587 | - |
|
588 | - /** |
|
589 | - * Send an SMTP DATA command. |
|
590 | - * Issues a data command and sends the msg_data to the server, |
|
591 | - * finializing the mail transaction. $msg_data is the message |
|
592 | - * that is to be send with the headers. Each header needs to be |
|
593 | - * on a single line followed by a <CRLF> with the message headers |
|
594 | - * and the message body being separated by and additional <CRLF>. |
|
595 | - * Implements rfc 821: DATA <CRLF> |
|
596 | - * @param string $msg_data Message data to send |
|
597 | - * @access public |
|
598 | - * @return boolean |
|
599 | - */ |
|
600 | - public function data($msg_data) |
|
601 | - { |
|
602 | - //This will use the standard timelimit |
|
603 | - if (!$this->sendCommand('DATA', 'DATA', 354)) { |
|
604 | - return false; |
|
605 | - } |
|
606 | - |
|
607 | - /* The server is ready to accept data! |
|
448 | + require_once 'extras/ntlm_sasl_client.php'; |
|
449 | + $temp = new stdClass; |
|
450 | + $ntlm_client = new ntlm_sasl_client_class; |
|
451 | + //Check that functions are available |
|
452 | + if (!$ntlm_client->Initialize($temp)) { |
|
453 | + $this->setError($temp->error); |
|
454 | + $this->edebug( |
|
455 | + 'You need to enable some modules in your php.ini file: ' |
|
456 | + . $this->error['error'], |
|
457 | + self::DEBUG_CLIENT |
|
458 | + ); |
|
459 | + return false; |
|
460 | + } |
|
461 | + //msg1 |
|
462 | + $msg1 = $ntlm_client->TypeMsg1($realm, $workstation); //msg1 |
|
463 | + |
|
464 | + if (!$this->sendCommand( |
|
465 | + 'AUTH NTLM', |
|
466 | + 'AUTH NTLM ' . base64_encode($msg1), |
|
467 | + 334 |
|
468 | + ) |
|
469 | + ) { |
|
470 | + return false; |
|
471 | + } |
|
472 | + //Though 0 based, there is a white space after the 3 digit number |
|
473 | + //msg2 |
|
474 | + $challenge = substr($this->last_reply, 3); |
|
475 | + $challenge = base64_decode($challenge); |
|
476 | + $ntlm_res = $ntlm_client->NTLMResponse( |
|
477 | + substr($challenge, 24, 8), |
|
478 | + $password |
|
479 | + ); |
|
480 | + //msg3 |
|
481 | + $msg3 = $ntlm_client->TypeMsg3( |
|
482 | + $ntlm_res, |
|
483 | + $username, |
|
484 | + $realm, |
|
485 | + $workstation |
|
486 | + ); |
|
487 | + // send encoded username |
|
488 | + return $this->sendCommand('Username', base64_encode($msg3), 235); |
|
489 | + case 'CRAM-MD5': |
|
490 | + // Start authentication |
|
491 | + if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) { |
|
492 | + return false; |
|
493 | + } |
|
494 | + // Get the challenge |
|
495 | + $challenge = base64_decode(substr($this->last_reply, 4)); |
|
496 | + |
|
497 | + // Build the response |
|
498 | + $response = $username . ' ' . $this->hmac($challenge, $password); |
|
499 | + |
|
500 | + // send encoded credentials |
|
501 | + return $this->sendCommand('Username', base64_encode($response), 235); |
|
502 | + default: |
|
503 | + $this->setError("Authentication method \"$authtype\" is not supported"); |
|
504 | + return false; |
|
505 | + } |
|
506 | + return true; |
|
507 | + } |
|
508 | + |
|
509 | + /** |
|
510 | + * Calculate an MD5 HMAC hash. |
|
511 | + * Works like hash_hmac('md5', $data, $key) |
|
512 | + * in case that function is not available |
|
513 | + * @param string $data The data to hash |
|
514 | + * @param string $key The key to hash with |
|
515 | + * @access protected |
|
516 | + * @return string |
|
517 | + */ |
|
518 | + protected function hmac($data, $key) |
|
519 | + { |
|
520 | + if (function_exists('hash_hmac')) { |
|
521 | + return hash_hmac('md5', $data, $key); |
|
522 | + } |
|
523 | + |
|
524 | + // The following borrowed from |
|
525 | + // http://php.net/manual/en/function.mhash.php#27225 |
|
526 | + |
|
527 | + // RFC 2104 HMAC implementation for php. |
|
528 | + // Creates an md5 HMAC. |
|
529 | + // Eliminates the need to install mhash to compute a HMAC |
|
530 | + // by Lance Rushing |
|
531 | + |
|
532 | + $bytelen = 64; // byte length for md5 |
|
533 | + if (strlen($key) > $bytelen) { |
|
534 | + $key = pack('H*', md5($key)); |
|
535 | + } |
|
536 | + $key = str_pad($key, $bytelen, chr(0x00)); |
|
537 | + $ipad = str_pad('', $bytelen, chr(0x36)); |
|
538 | + $opad = str_pad('', $bytelen, chr(0x5c)); |
|
539 | + $k_ipad = $key ^ $ipad; |
|
540 | + $k_opad = $key ^ $opad; |
|
541 | + |
|
542 | + return md5($k_opad . pack('H*', md5($k_ipad . $data))); |
|
543 | + } |
|
544 | + |
|
545 | + /** |
|
546 | + * Check connection state. |
|
547 | + * @access public |
|
548 | + * @return boolean True if connected. |
|
549 | + */ |
|
550 | + public function connected() |
|
551 | + { |
|
552 | + if (is_resource($this->smtp_conn)) { |
|
553 | + $sock_status = stream_get_meta_data($this->smtp_conn); |
|
554 | + if ($sock_status['eof']) { |
|
555 | + // The socket is valid but we are not connected |
|
556 | + $this->edebug( |
|
557 | + 'SMTP NOTICE: EOF caught while checking if connected', |
|
558 | + self::DEBUG_CLIENT |
|
559 | + ); |
|
560 | + $this->close(); |
|
561 | + return false; |
|
562 | + } |
|
563 | + return true; // everything looks good |
|
564 | + } |
|
565 | + return false; |
|
566 | + } |
|
567 | + |
|
568 | + /** |
|
569 | + * Close the socket and clean up the state of the class. |
|
570 | + * Don't use this function without first trying to use QUIT. |
|
571 | + * @see quit() |
|
572 | + * @access public |
|
573 | + * @return void |
|
574 | + */ |
|
575 | + public function close() |
|
576 | + { |
|
577 | + $this->setError(''); |
|
578 | + $this->server_caps = null; |
|
579 | + $this->helo_rply = null; |
|
580 | + if (is_resource($this->smtp_conn)) { |
|
581 | + // close the connection and cleanup |
|
582 | + fclose($this->smtp_conn); |
|
583 | + $this->smtp_conn = null; //Makes for cleaner serialization |
|
584 | + $this->edebug('Connection: closed', self::DEBUG_CONNECTION); |
|
585 | + } |
|
586 | + } |
|
587 | + |
|
588 | + /** |
|
589 | + * Send an SMTP DATA command. |
|
590 | + * Issues a data command and sends the msg_data to the server, |
|
591 | + * finializing the mail transaction. $msg_data is the message |
|
592 | + * that is to be send with the headers. Each header needs to be |
|
593 | + * on a single line followed by a <CRLF> with the message headers |
|
594 | + * and the message body being separated by and additional <CRLF>. |
|
595 | + * Implements rfc 821: DATA <CRLF> |
|
596 | + * @param string $msg_data Message data to send |
|
597 | + * @access public |
|
598 | + * @return boolean |
|
599 | + */ |
|
600 | + public function data($msg_data) |
|
601 | + { |
|
602 | + //This will use the standard timelimit |
|
603 | + if (!$this->sendCommand('DATA', 'DATA', 354)) { |
|
604 | + return false; |
|
605 | + } |
|
606 | + |
|
607 | + /* The server is ready to accept data! |
|
608 | 608 | * According to rfc821 we should not send more than 1000 characters on a single line (including the CRLF) |
609 | 609 | * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into |
610 | 610 | * smaller lines to fit within the limit. |
@@ -612,541 +612,541 @@ discard block |
||
612 | 612 | * NOTE: this does not count towards line-length limit. |
613 | 613 | */ |
614 | 614 | |
615 | - // Normalize line breaks before exploding |
|
616 | - $lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $msg_data)); |
|
615 | + // Normalize line breaks before exploding |
|
616 | + $lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $msg_data)); |
|
617 | 617 | |
618 | - /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field |
|
618 | + /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field |
|
619 | 619 | * of the first line (':' separated) does not contain a space then it _should_ be a header and we will |
620 | 620 | * process all lines before a blank line as headers. |
621 | 621 | */ |
622 | 622 | |
623 | - $field = substr($lines[0], 0, strpos($lines[0], ':')); |
|
624 | - $in_headers = false; |
|
625 | - if (!empty($field) && strpos($field, ' ') === false) { |
|
626 | - $in_headers = true; |
|
627 | - } |
|
628 | - |
|
629 | - foreach ($lines as $line) { |
|
630 | - $lines_out = array(); |
|
631 | - if ($in_headers and $line == '') { |
|
632 | - $in_headers = false; |
|
633 | - } |
|
634 | - //Break this line up into several smaller lines if it's too long |
|
635 | - //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len), |
|
636 | - while (isset($line[self::MAX_LINE_LENGTH])) { |
|
637 | - //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on |
|
638 | - //so as to avoid breaking in the middle of a word |
|
639 | - $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' '); |
|
640 | - //Deliberately matches both false and 0 |
|
641 | - if (!$pos) { |
|
642 | - //No nice break found, add a hard break |
|
643 | - $pos = self::MAX_LINE_LENGTH - 1; |
|
644 | - $lines_out[] = substr($line, 0, $pos); |
|
645 | - $line = substr($line, $pos); |
|
646 | - } else { |
|
647 | - //Break at the found point |
|
648 | - $lines_out[] = substr($line, 0, $pos); |
|
649 | - //Move along by the amount we dealt with |
|
650 | - $line = substr($line, $pos + 1); |
|
651 | - } |
|
652 | - //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1 |
|
653 | - if ($in_headers) { |
|
654 | - $line = "\t" . $line; |
|
655 | - } |
|
656 | - } |
|
657 | - $lines_out[] = $line; |
|
658 | - |
|
659 | - //Send the lines to the server |
|
660 | - foreach ($lines_out as $line_out) { |
|
661 | - //RFC2821 section 4.5.2 |
|
662 | - if (!empty($line_out) and $line_out[0] == '.') { |
|
663 | - $line_out = '.' . $line_out; |
|
664 | - } |
|
665 | - $this->client_send($line_out . self::CRLF); |
|
666 | - } |
|
667 | - } |
|
668 | - |
|
669 | - //Message data has been sent, complete the command |
|
670 | - //Increase timelimit for end of DATA command |
|
671 | - $savetimelimit = $this->Timelimit; |
|
672 | - $this->Timelimit = $this->Timelimit * 2; |
|
673 | - $result = $this->sendCommand('DATA END', '.', 250); |
|
674 | - //Restore timelimit |
|
675 | - $this->Timelimit = $savetimelimit; |
|
676 | - return $result; |
|
677 | - } |
|
678 | - |
|
679 | - /** |
|
680 | - * Send an SMTP HELO or EHLO command. |
|
681 | - * Used to identify the sending server to the receiving server. |
|
682 | - * This makes sure that client and server are in a known state. |
|
683 | - * Implements RFC 821: HELO <SP> <domain> <CRLF> |
|
684 | - * and RFC 2821 EHLO. |
|
685 | - * @param string $host The host name or IP to connect to |
|
686 | - * @access public |
|
687 | - * @return boolean |
|
688 | - */ |
|
689 | - public function hello($host = '') |
|
690 | - { |
|
691 | - //Try extended hello first (RFC 2821) |
|
692 | - return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host)); |
|
693 | - } |
|
694 | - |
|
695 | - /** |
|
696 | - * Send an SMTP HELO or EHLO command. |
|
697 | - * Low-level implementation used by hello() |
|
698 | - * @see hello() |
|
699 | - * @param string $hello The HELO string |
|
700 | - * @param string $host The hostname to say we are |
|
701 | - * @access protected |
|
702 | - * @return boolean |
|
703 | - */ |
|
704 | - protected function sendHello($hello, $host) |
|
705 | - { |
|
706 | - $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250); |
|
707 | - $this->helo_rply = $this->last_reply; |
|
708 | - if ($noerror) { |
|
709 | - $this->parseHelloFields($hello); |
|
710 | - } else { |
|
711 | - $this->server_caps = null; |
|
712 | - } |
|
713 | - return $noerror; |
|
714 | - } |
|
715 | - |
|
716 | - /** |
|
717 | - * Parse a reply to HELO/EHLO command to discover server extensions. |
|
718 | - * In case of HELO, the only parameter that can be discovered is a server name. |
|
719 | - * @access protected |
|
720 | - * @param string $type - 'HELO' or 'EHLO' |
|
721 | - */ |
|
722 | - protected function parseHelloFields($type) |
|
723 | - { |
|
724 | - $this->server_caps = array(); |
|
725 | - $lines = explode("\n", $this->last_reply); |
|
726 | - foreach ($lines as $n => $s) { |
|
727 | - $s = trim(substr($s, 4)); |
|
728 | - if (!$s) { |
|
729 | - continue; |
|
730 | - } |
|
731 | - $fields = explode(' ', $s); |
|
732 | - if (!empty($fields)) { |
|
733 | - if (!$n) { |
|
734 | - $name = $type; |
|
735 | - $fields = $fields[0]; |
|
736 | - } else { |
|
737 | - $name = array_shift($fields); |
|
738 | - if ($name == 'SIZE') { |
|
739 | - $fields = ($fields) ? $fields[0] : 0; |
|
740 | - } |
|
741 | - } |
|
742 | - $this->server_caps[$name] = ($fields ? $fields : true); |
|
743 | - } |
|
744 | - } |
|
745 | - } |
|
746 | - |
|
747 | - /** |
|
748 | - * Send an SMTP MAIL command. |
|
749 | - * Starts a mail transaction from the email address specified in |
|
750 | - * $from. Returns true if successful or false otherwise. If True |
|
751 | - * the mail transaction is started and then one or more recipient |
|
752 | - * commands may be called followed by a data command. |
|
753 | - * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF> |
|
754 | - * @param string $from Source address of this message |
|
755 | - * @access public |
|
756 | - * @return boolean |
|
757 | - */ |
|
758 | - public function mail($from) |
|
759 | - { |
|
760 | - $useVerp = ($this->do_verp ? ' XVERP' : ''); |
|
761 | - return $this->sendCommand( |
|
762 | - 'MAIL FROM', |
|
763 | - 'MAIL FROM:<' . $from . '>' . $useVerp, |
|
764 | - 250 |
|
765 | - ); |
|
766 | - } |
|
767 | - |
|
768 | - /** |
|
769 | - * Send an SMTP QUIT command. |
|
770 | - * Closes the socket if there is no error or the $close_on_error argument is true. |
|
771 | - * Implements from rfc 821: QUIT <CRLF> |
|
772 | - * @param boolean $close_on_error Should the connection close if an error occurs? |
|
773 | - * @access public |
|
774 | - * @return boolean |
|
775 | - */ |
|
776 | - public function quit($close_on_error = true) |
|
777 | - { |
|
778 | - $noerror = $this->sendCommand('QUIT', 'QUIT', 221); |
|
779 | - $err = $this->error; //Save any error |
|
780 | - if ($noerror or $close_on_error) { |
|
781 | - $this->close(); |
|
782 | - $this->error = $err; //Restore any error from the quit command |
|
783 | - } |
|
784 | - return $noerror; |
|
785 | - } |
|
786 | - |
|
787 | - /** |
|
788 | - * Send an SMTP RCPT command. |
|
789 | - * Sets the TO argument to $toaddr. |
|
790 | - * Returns true if the recipient was accepted false if it was rejected. |
|
791 | - * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF> |
|
792 | - * @param string $toaddr The address the message is being sent to |
|
793 | - * @access public |
|
794 | - * @return boolean |
|
795 | - */ |
|
796 | - public function recipient($toaddr) |
|
797 | - { |
|
798 | - return $this->sendCommand( |
|
799 | - 'RCPT TO', |
|
800 | - 'RCPT TO:<' . $toaddr . '>', |
|
801 | - array(250, 251) |
|
802 | - ); |
|
803 | - } |
|
804 | - |
|
805 | - /** |
|
806 | - * Send an SMTP RSET command. |
|
807 | - * Abort any transaction that is currently in progress. |
|
808 | - * Implements rfc 821: RSET <CRLF> |
|
809 | - * @access public |
|
810 | - * @return boolean True on success. |
|
811 | - */ |
|
812 | - public function reset() |
|
813 | - { |
|
814 | - return $this->sendCommand('RSET', 'RSET', 250); |
|
815 | - } |
|
816 | - |
|
817 | - /** |
|
818 | - * Send a command to an SMTP server and check its return code. |
|
819 | - * @param string $command The command name - not sent to the server |
|
820 | - * @param string $commandstring The actual command to send |
|
821 | - * @param integer|array $expect One or more expected integer success codes |
|
822 | - * @access protected |
|
823 | - * @return boolean True on success. |
|
824 | - */ |
|
825 | - protected function sendCommand($command, $commandstring, $expect) |
|
826 | - { |
|
827 | - if (!$this->connected()) { |
|
828 | - $this->setError("Called $command without being connected"); |
|
829 | - return false; |
|
830 | - } |
|
831 | - $this->client_send($commandstring . self::CRLF); |
|
832 | - |
|
833 | - $this->last_reply = $this->get_lines(); |
|
834 | - // Fetch SMTP code and possible error code explanation |
|
835 | - $matches = array(); |
|
836 | - if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) { |
|
837 | - $code = $matches[1]; |
|
838 | - $code_ex = (count($matches) > 2 ? $matches[2] : null); |
|
839 | - // Cut off error code from each response line |
|
840 | - $detail = preg_replace( |
|
841 | - "/{$code}[ -]".($code_ex ? str_replace('.', '\\.', $code_ex).' ' : '')."/m", |
|
842 | - '', |
|
843 | - $this->last_reply |
|
844 | - ); |
|
845 | - } else { |
|
846 | - // Fall back to simple parsing if regex fails |
|
847 | - $code = substr($this->last_reply, 0, 3); |
|
848 | - $code_ex = null; |
|
849 | - $detail = substr($this->last_reply, 4); |
|
850 | - } |
|
851 | - |
|
852 | - $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); |
|
853 | - |
|
854 | - if (!in_array($code, (array)$expect)) { |
|
855 | - $this->setError( |
|
856 | - "$command command failed", |
|
857 | - $detail, |
|
858 | - $code, |
|
859 | - $code_ex |
|
860 | - ); |
|
861 | - $this->edebug( |
|
862 | - 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply, |
|
863 | - self::DEBUG_CLIENT |
|
864 | - ); |
|
865 | - return false; |
|
866 | - } |
|
867 | - |
|
868 | - $this->setError(''); |
|
869 | - return true; |
|
870 | - } |
|
871 | - |
|
872 | - /** |
|
873 | - * Send an SMTP SAML command. |
|
874 | - * Starts a mail transaction from the email address specified in $from. |
|
875 | - * Returns true if successful or false otherwise. If True |
|
876 | - * the mail transaction is started and then one or more recipient |
|
877 | - * commands may be called followed by a data command. This command |
|
878 | - * will send the message to the users terminal if they are logged |
|
879 | - * in and send them an email. |
|
880 | - * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF> |
|
881 | - * @param string $from The address the message is from |
|
882 | - * @access public |
|
883 | - * @return boolean |
|
884 | - */ |
|
885 | - public function sendAndMail($from) |
|
886 | - { |
|
887 | - return $this->sendCommand('SAML', "SAML FROM:$from", 250); |
|
888 | - } |
|
889 | - |
|
890 | - /** |
|
891 | - * Send an SMTP VRFY command. |
|
892 | - * @param string $name The name to verify |
|
893 | - * @access public |
|
894 | - * @return boolean |
|
895 | - */ |
|
896 | - public function verify($name) |
|
897 | - { |
|
898 | - return $this->sendCommand('VRFY', "VRFY $name", array(250, 251)); |
|
899 | - } |
|
900 | - |
|
901 | - /** |
|
902 | - * Send an SMTP NOOP command. |
|
903 | - * Used to keep keep-alives alive, doesn't actually do anything |
|
904 | - * @access public |
|
905 | - * @return boolean |
|
906 | - */ |
|
907 | - public function noop() |
|
908 | - { |
|
909 | - return $this->sendCommand('NOOP', 'NOOP', 250); |
|
910 | - } |
|
911 | - |
|
912 | - /** |
|
913 | - * Send an SMTP TURN command. |
|
914 | - * This is an optional command for SMTP that this class does not support. |
|
915 | - * This method is here to make the RFC821 Definition complete for this class |
|
916 | - * and _may_ be implemented in future |
|
917 | - * Implements from rfc 821: TURN <CRLF> |
|
918 | - * @access public |
|
919 | - * @return boolean |
|
920 | - */ |
|
921 | - public function turn() |
|
922 | - { |
|
923 | - $this->setError('The SMTP TURN command is not implemented'); |
|
924 | - $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT); |
|
925 | - return false; |
|
926 | - } |
|
927 | - |
|
928 | - /** |
|
929 | - * Send raw data to the server. |
|
930 | - * @param string $data The data to send |
|
931 | - * @access public |
|
932 | - * @return integer|boolean The number of bytes sent to the server or false on error |
|
933 | - */ |
|
934 | - public function client_send($data) |
|
935 | - { |
|
936 | - $this->edebug("CLIENT -> SERVER: $data", self::DEBUG_CLIENT); |
|
937 | - return fwrite($this->smtp_conn, $data); |
|
938 | - } |
|
939 | - |
|
940 | - /** |
|
941 | - * Get the latest error. |
|
942 | - * @access public |
|
943 | - * @return array |
|
944 | - */ |
|
945 | - public function getError() |
|
946 | - { |
|
947 | - return $this->error; |
|
948 | - } |
|
949 | - |
|
950 | - /** |
|
951 | - * Get SMTP extensions available on the server |
|
952 | - * @access public |
|
953 | - * @return array|null |
|
954 | - */ |
|
955 | - public function getServerExtList() |
|
956 | - { |
|
957 | - return $this->server_caps; |
|
958 | - } |
|
959 | - |
|
960 | - /** |
|
961 | - * A multipurpose method |
|
962 | - * The method works in three ways, dependent on argument value and current state |
|
963 | - * 1. HELO/EHLO was not sent - returns null and set up $this->error |
|
964 | - * 2. HELO was sent |
|
965 | - * $name = 'HELO': returns server name |
|
966 | - * $name = 'EHLO': returns boolean false |
|
967 | - * $name = any string: returns null and set up $this->error |
|
968 | - * 3. EHLO was sent |
|
969 | - * $name = 'HELO'|'EHLO': returns server name |
|
970 | - * $name = any string: if extension $name exists, returns boolean True |
|
971 | - * or its options. Otherwise returns boolean False |
|
972 | - * In other words, one can use this method to detect 3 conditions: |
|
973 | - * - null returned: handshake was not or we don't know about ext (refer to $this->error) |
|
974 | - * - false returned: the requested feature exactly not exists |
|
975 | - * - positive value returned: the requested feature exists |
|
976 | - * @param string $name Name of SMTP extension or 'HELO'|'EHLO' |
|
977 | - * @return mixed |
|
978 | - */ |
|
979 | - public function getServerExt($name) |
|
980 | - { |
|
981 | - if (!$this->server_caps) { |
|
982 | - $this->setError('No HELO/EHLO was sent'); |
|
983 | - return null; |
|
984 | - } |
|
985 | - |
|
986 | - // the tight logic knot ;) |
|
987 | - if (!array_key_exists($name, $this->server_caps)) { |
|
988 | - if ($name == 'HELO') { |
|
989 | - return $this->server_caps['EHLO']; |
|
990 | - } |
|
991 | - if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) { |
|
992 | - return false; |
|
993 | - } |
|
994 | - $this->setError('HELO handshake was used. Client knows nothing about server extensions'); |
|
995 | - return null; |
|
996 | - } |
|
997 | - |
|
998 | - return $this->server_caps[$name]; |
|
999 | - } |
|
1000 | - |
|
1001 | - /** |
|
1002 | - * Get the last reply from the server. |
|
1003 | - * @access public |
|
1004 | - * @return string |
|
1005 | - */ |
|
1006 | - public function getLastReply() |
|
1007 | - { |
|
1008 | - return $this->last_reply; |
|
1009 | - } |
|
1010 | - |
|
1011 | - /** |
|
1012 | - * Read the SMTP server's response. |
|
1013 | - * Either before eof or socket timeout occurs on the operation. |
|
1014 | - * With SMTP we can tell if we have more lines to read if the |
|
1015 | - * 4th character is '-' symbol. If it is a space then we don't |
|
1016 | - * need to read anything else. |
|
1017 | - * @access protected |
|
1018 | - * @return string |
|
1019 | - */ |
|
1020 | - protected function get_lines() |
|
1021 | - { |
|
1022 | - // If the connection is bad, give up straight away |
|
1023 | - if (!is_resource($this->smtp_conn)) { |
|
1024 | - return ''; |
|
1025 | - } |
|
1026 | - $data = ''; |
|
1027 | - $endtime = 0; |
|
1028 | - stream_set_timeout($this->smtp_conn, $this->Timeout); |
|
1029 | - if ($this->Timelimit > 0) { |
|
1030 | - $endtime = time() + $this->Timelimit; |
|
1031 | - } |
|
1032 | - while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) { |
|
1033 | - $str = @fgets($this->smtp_conn, 515); |
|
1034 | - $this->edebug("SMTP -> get_lines(): \$data was \"$data\"", self::DEBUG_LOWLEVEL); |
|
1035 | - $this->edebug("SMTP -> get_lines(): \$str is \"$str\"", self::DEBUG_LOWLEVEL); |
|
1036 | - $data .= $str; |
|
1037 | - $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL); |
|
1038 | - // If 4th character is a space, we are done reading, break the loop, micro-optimisation over strlen |
|
1039 | - if ((isset($str[3]) and $str[3] == ' ')) { |
|
1040 | - break; |
|
1041 | - } |
|
1042 | - // Timed-out? Log and break |
|
1043 | - $info = stream_get_meta_data($this->smtp_conn); |
|
1044 | - if ($info['timed_out']) { |
|
1045 | - $this->edebug( |
|
1046 | - 'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)', |
|
1047 | - self::DEBUG_LOWLEVEL |
|
1048 | - ); |
|
1049 | - break; |
|
1050 | - } |
|
1051 | - // Now check if reads took too long |
|
1052 | - if ($endtime and time() > $endtime) { |
|
1053 | - $this->edebug( |
|
1054 | - 'SMTP -> get_lines(): timelimit reached ('. |
|
1055 | - $this->Timelimit . ' sec)', |
|
1056 | - self::DEBUG_LOWLEVEL |
|
1057 | - ); |
|
1058 | - break; |
|
1059 | - } |
|
1060 | - } |
|
1061 | - return $data; |
|
1062 | - } |
|
1063 | - |
|
1064 | - /** |
|
1065 | - * Enable or disable VERP address generation. |
|
1066 | - * @param boolean $enabled |
|
1067 | - */ |
|
1068 | - public function setVerp($enabled = false) |
|
1069 | - { |
|
1070 | - $this->do_verp = $enabled; |
|
1071 | - } |
|
1072 | - |
|
1073 | - /** |
|
1074 | - * Get VERP address generation mode. |
|
1075 | - * @return boolean |
|
1076 | - */ |
|
1077 | - public function getVerp() |
|
1078 | - { |
|
1079 | - return $this->do_verp; |
|
1080 | - } |
|
1081 | - |
|
1082 | - /** |
|
1083 | - * Set error messages and codes. |
|
1084 | - * @param string $message The error message |
|
1085 | - * @param string $detail Further detail on the error |
|
1086 | - * @param string $smtp_code An associated SMTP error code |
|
1087 | - * @param string $smtp_code_ex Extended SMTP code |
|
1088 | - */ |
|
1089 | - protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '') |
|
1090 | - { |
|
1091 | - $this->error = array( |
|
1092 | - 'error' => $message, |
|
1093 | - 'detail' => $detail, |
|
1094 | - 'smtp_code' => $smtp_code, |
|
1095 | - 'smtp_code_ex' => $smtp_code_ex |
|
1096 | - ); |
|
1097 | - } |
|
1098 | - |
|
1099 | - /** |
|
1100 | - * Set debug output method. |
|
1101 | - * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it. |
|
1102 | - */ |
|
1103 | - public function setDebugOutput($method = 'echo') |
|
1104 | - { |
|
1105 | - $this->Debugoutput = $method; |
|
1106 | - } |
|
1107 | - |
|
1108 | - /** |
|
1109 | - * Get debug output method. |
|
1110 | - * @return string |
|
1111 | - */ |
|
1112 | - public function getDebugOutput() |
|
1113 | - { |
|
1114 | - return $this->Debugoutput; |
|
1115 | - } |
|
1116 | - |
|
1117 | - /** |
|
1118 | - * Set debug output level. |
|
1119 | - * @param integer $level |
|
1120 | - */ |
|
1121 | - public function setDebugLevel($level = 0) |
|
1122 | - { |
|
1123 | - $this->do_debug = $level; |
|
1124 | - } |
|
1125 | - |
|
1126 | - /** |
|
1127 | - * Get debug output level. |
|
1128 | - * @return integer |
|
1129 | - */ |
|
1130 | - public function getDebugLevel() |
|
1131 | - { |
|
1132 | - return $this->do_debug; |
|
1133 | - } |
|
1134 | - |
|
1135 | - /** |
|
1136 | - * Set SMTP timeout. |
|
1137 | - * @param integer $timeout |
|
1138 | - */ |
|
1139 | - public function setTimeout($timeout = 0) |
|
1140 | - { |
|
1141 | - $this->Timeout = $timeout; |
|
1142 | - } |
|
1143 | - |
|
1144 | - /** |
|
1145 | - * Get SMTP timeout. |
|
1146 | - * @return integer |
|
1147 | - */ |
|
1148 | - public function getTimeout() |
|
1149 | - { |
|
1150 | - return $this->Timeout; |
|
1151 | - } |
|
623 | + $field = substr($lines[0], 0, strpos($lines[0], ':')); |
|
624 | + $in_headers = false; |
|
625 | + if (!empty($field) && strpos($field, ' ') === false) { |
|
626 | + $in_headers = true; |
|
627 | + } |
|
628 | + |
|
629 | + foreach ($lines as $line) { |
|
630 | + $lines_out = array(); |
|
631 | + if ($in_headers and $line == '') { |
|
632 | + $in_headers = false; |
|
633 | + } |
|
634 | + //Break this line up into several smaller lines if it's too long |
|
635 | + //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len), |
|
636 | + while (isset($line[self::MAX_LINE_LENGTH])) { |
|
637 | + //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on |
|
638 | + //so as to avoid breaking in the middle of a word |
|
639 | + $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' '); |
|
640 | + //Deliberately matches both false and 0 |
|
641 | + if (!$pos) { |
|
642 | + //No nice break found, add a hard break |
|
643 | + $pos = self::MAX_LINE_LENGTH - 1; |
|
644 | + $lines_out[] = substr($line, 0, $pos); |
|
645 | + $line = substr($line, $pos); |
|
646 | + } else { |
|
647 | + //Break at the found point |
|
648 | + $lines_out[] = substr($line, 0, $pos); |
|
649 | + //Move along by the amount we dealt with |
|
650 | + $line = substr($line, $pos + 1); |
|
651 | + } |
|
652 | + //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1 |
|
653 | + if ($in_headers) { |
|
654 | + $line = "\t" . $line; |
|
655 | + } |
|
656 | + } |
|
657 | + $lines_out[] = $line; |
|
658 | + |
|
659 | + //Send the lines to the server |
|
660 | + foreach ($lines_out as $line_out) { |
|
661 | + //RFC2821 section 4.5.2 |
|
662 | + if (!empty($line_out) and $line_out[0] == '.') { |
|
663 | + $line_out = '.' . $line_out; |
|
664 | + } |
|
665 | + $this->client_send($line_out . self::CRLF); |
|
666 | + } |
|
667 | + } |
|
668 | + |
|
669 | + //Message data has been sent, complete the command |
|
670 | + //Increase timelimit for end of DATA command |
|
671 | + $savetimelimit = $this->Timelimit; |
|
672 | + $this->Timelimit = $this->Timelimit * 2; |
|
673 | + $result = $this->sendCommand('DATA END', '.', 250); |
|
674 | + //Restore timelimit |
|
675 | + $this->Timelimit = $savetimelimit; |
|
676 | + return $result; |
|
677 | + } |
|
678 | + |
|
679 | + /** |
|
680 | + * Send an SMTP HELO or EHLO command. |
|
681 | + * Used to identify the sending server to the receiving server. |
|
682 | + * This makes sure that client and server are in a known state. |
|
683 | + * Implements RFC 821: HELO <SP> <domain> <CRLF> |
|
684 | + * and RFC 2821 EHLO. |
|
685 | + * @param string $host The host name or IP to connect to |
|
686 | + * @access public |
|
687 | + * @return boolean |
|
688 | + */ |
|
689 | + public function hello($host = '') |
|
690 | + { |
|
691 | + //Try extended hello first (RFC 2821) |
|
692 | + return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host)); |
|
693 | + } |
|
694 | + |
|
695 | + /** |
|
696 | + * Send an SMTP HELO or EHLO command. |
|
697 | + * Low-level implementation used by hello() |
|
698 | + * @see hello() |
|
699 | + * @param string $hello The HELO string |
|
700 | + * @param string $host The hostname to say we are |
|
701 | + * @access protected |
|
702 | + * @return boolean |
|
703 | + */ |
|
704 | + protected function sendHello($hello, $host) |
|
705 | + { |
|
706 | + $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250); |
|
707 | + $this->helo_rply = $this->last_reply; |
|
708 | + if ($noerror) { |
|
709 | + $this->parseHelloFields($hello); |
|
710 | + } else { |
|
711 | + $this->server_caps = null; |
|
712 | + } |
|
713 | + return $noerror; |
|
714 | + } |
|
715 | + |
|
716 | + /** |
|
717 | + * Parse a reply to HELO/EHLO command to discover server extensions. |
|
718 | + * In case of HELO, the only parameter that can be discovered is a server name. |
|
719 | + * @access protected |
|
720 | + * @param string $type - 'HELO' or 'EHLO' |
|
721 | + */ |
|
722 | + protected function parseHelloFields($type) |
|
723 | + { |
|
724 | + $this->server_caps = array(); |
|
725 | + $lines = explode("\n", $this->last_reply); |
|
726 | + foreach ($lines as $n => $s) { |
|
727 | + $s = trim(substr($s, 4)); |
|
728 | + if (!$s) { |
|
729 | + continue; |
|
730 | + } |
|
731 | + $fields = explode(' ', $s); |
|
732 | + if (!empty($fields)) { |
|
733 | + if (!$n) { |
|
734 | + $name = $type; |
|
735 | + $fields = $fields[0]; |
|
736 | + } else { |
|
737 | + $name = array_shift($fields); |
|
738 | + if ($name == 'SIZE') { |
|
739 | + $fields = ($fields) ? $fields[0] : 0; |
|
740 | + } |
|
741 | + } |
|
742 | + $this->server_caps[$name] = ($fields ? $fields : true); |
|
743 | + } |
|
744 | + } |
|
745 | + } |
|
746 | + |
|
747 | + /** |
|
748 | + * Send an SMTP MAIL command. |
|
749 | + * Starts a mail transaction from the email address specified in |
|
750 | + * $from. Returns true if successful or false otherwise. If True |
|
751 | + * the mail transaction is started and then one or more recipient |
|
752 | + * commands may be called followed by a data command. |
|
753 | + * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF> |
|
754 | + * @param string $from Source address of this message |
|
755 | + * @access public |
|
756 | + * @return boolean |
|
757 | + */ |
|
758 | + public function mail($from) |
|
759 | + { |
|
760 | + $useVerp = ($this->do_verp ? ' XVERP' : ''); |
|
761 | + return $this->sendCommand( |
|
762 | + 'MAIL FROM', |
|
763 | + 'MAIL FROM:<' . $from . '>' . $useVerp, |
|
764 | + 250 |
|
765 | + ); |
|
766 | + } |
|
767 | + |
|
768 | + /** |
|
769 | + * Send an SMTP QUIT command. |
|
770 | + * Closes the socket if there is no error or the $close_on_error argument is true. |
|
771 | + * Implements from rfc 821: QUIT <CRLF> |
|
772 | + * @param boolean $close_on_error Should the connection close if an error occurs? |
|
773 | + * @access public |
|
774 | + * @return boolean |
|
775 | + */ |
|
776 | + public function quit($close_on_error = true) |
|
777 | + { |
|
778 | + $noerror = $this->sendCommand('QUIT', 'QUIT', 221); |
|
779 | + $err = $this->error; //Save any error |
|
780 | + if ($noerror or $close_on_error) { |
|
781 | + $this->close(); |
|
782 | + $this->error = $err; //Restore any error from the quit command |
|
783 | + } |
|
784 | + return $noerror; |
|
785 | + } |
|
786 | + |
|
787 | + /** |
|
788 | + * Send an SMTP RCPT command. |
|
789 | + * Sets the TO argument to $toaddr. |
|
790 | + * Returns true if the recipient was accepted false if it was rejected. |
|
791 | + * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF> |
|
792 | + * @param string $toaddr The address the message is being sent to |
|
793 | + * @access public |
|
794 | + * @return boolean |
|
795 | + */ |
|
796 | + public function recipient($toaddr) |
|
797 | + { |
|
798 | + return $this->sendCommand( |
|
799 | + 'RCPT TO', |
|
800 | + 'RCPT TO:<' . $toaddr . '>', |
|
801 | + array(250, 251) |
|
802 | + ); |
|
803 | + } |
|
804 | + |
|
805 | + /** |
|
806 | + * Send an SMTP RSET command. |
|
807 | + * Abort any transaction that is currently in progress. |
|
808 | + * Implements rfc 821: RSET <CRLF> |
|
809 | + * @access public |
|
810 | + * @return boolean True on success. |
|
811 | + */ |
|
812 | + public function reset() |
|
813 | + { |
|
814 | + return $this->sendCommand('RSET', 'RSET', 250); |
|
815 | + } |
|
816 | + |
|
817 | + /** |
|
818 | + * Send a command to an SMTP server and check its return code. |
|
819 | + * @param string $command The command name - not sent to the server |
|
820 | + * @param string $commandstring The actual command to send |
|
821 | + * @param integer|array $expect One or more expected integer success codes |
|
822 | + * @access protected |
|
823 | + * @return boolean True on success. |
|
824 | + */ |
|
825 | + protected function sendCommand($command, $commandstring, $expect) |
|
826 | + { |
|
827 | + if (!$this->connected()) { |
|
828 | + $this->setError("Called $command without being connected"); |
|
829 | + return false; |
|
830 | + } |
|
831 | + $this->client_send($commandstring . self::CRLF); |
|
832 | + |
|
833 | + $this->last_reply = $this->get_lines(); |
|
834 | + // Fetch SMTP code and possible error code explanation |
|
835 | + $matches = array(); |
|
836 | + if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) { |
|
837 | + $code = $matches[1]; |
|
838 | + $code_ex = (count($matches) > 2 ? $matches[2] : null); |
|
839 | + // Cut off error code from each response line |
|
840 | + $detail = preg_replace( |
|
841 | + "/{$code}[ -]".($code_ex ? str_replace('.', '\\.', $code_ex).' ' : '')."/m", |
|
842 | + '', |
|
843 | + $this->last_reply |
|
844 | + ); |
|
845 | + } else { |
|
846 | + // Fall back to simple parsing if regex fails |
|
847 | + $code = substr($this->last_reply, 0, 3); |
|
848 | + $code_ex = null; |
|
849 | + $detail = substr($this->last_reply, 4); |
|
850 | + } |
|
851 | + |
|
852 | + $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); |
|
853 | + |
|
854 | + if (!in_array($code, (array)$expect)) { |
|
855 | + $this->setError( |
|
856 | + "$command command failed", |
|
857 | + $detail, |
|
858 | + $code, |
|
859 | + $code_ex |
|
860 | + ); |
|
861 | + $this->edebug( |
|
862 | + 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply, |
|
863 | + self::DEBUG_CLIENT |
|
864 | + ); |
|
865 | + return false; |
|
866 | + } |
|
867 | + |
|
868 | + $this->setError(''); |
|
869 | + return true; |
|
870 | + } |
|
871 | + |
|
872 | + /** |
|
873 | + * Send an SMTP SAML command. |
|
874 | + * Starts a mail transaction from the email address specified in $from. |
|
875 | + * Returns true if successful or false otherwise. If True |
|
876 | + * the mail transaction is started and then one or more recipient |
|
877 | + * commands may be called followed by a data command. This command |
|
878 | + * will send the message to the users terminal if they are logged |
|
879 | + * in and send them an email. |
|
880 | + * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF> |
|
881 | + * @param string $from The address the message is from |
|
882 | + * @access public |
|
883 | + * @return boolean |
|
884 | + */ |
|
885 | + public function sendAndMail($from) |
|
886 | + { |
|
887 | + return $this->sendCommand('SAML', "SAML FROM:$from", 250); |
|
888 | + } |
|
889 | + |
|
890 | + /** |
|
891 | + * Send an SMTP VRFY command. |
|
892 | + * @param string $name The name to verify |
|
893 | + * @access public |
|
894 | + * @return boolean |
|
895 | + */ |
|
896 | + public function verify($name) |
|
897 | + { |
|
898 | + return $this->sendCommand('VRFY', "VRFY $name", array(250, 251)); |
|
899 | + } |
|
900 | + |
|
901 | + /** |
|
902 | + * Send an SMTP NOOP command. |
|
903 | + * Used to keep keep-alives alive, doesn't actually do anything |
|
904 | + * @access public |
|
905 | + * @return boolean |
|
906 | + */ |
|
907 | + public function noop() |
|
908 | + { |
|
909 | + return $this->sendCommand('NOOP', 'NOOP', 250); |
|
910 | + } |
|
911 | + |
|
912 | + /** |
|
913 | + * Send an SMTP TURN command. |
|
914 | + * This is an optional command for SMTP that this class does not support. |
|
915 | + * This method is here to make the RFC821 Definition complete for this class |
|
916 | + * and _may_ be implemented in future |
|
917 | + * Implements from rfc 821: TURN <CRLF> |
|
918 | + * @access public |
|
919 | + * @return boolean |
|
920 | + */ |
|
921 | + public function turn() |
|
922 | + { |
|
923 | + $this->setError('The SMTP TURN command is not implemented'); |
|
924 | + $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT); |
|
925 | + return false; |
|
926 | + } |
|
927 | + |
|
928 | + /** |
|
929 | + * Send raw data to the server. |
|
930 | + * @param string $data The data to send |
|
931 | + * @access public |
|
932 | + * @return integer|boolean The number of bytes sent to the server or false on error |
|
933 | + */ |
|
934 | + public function client_send($data) |
|
935 | + { |
|
936 | + $this->edebug("CLIENT -> SERVER: $data", self::DEBUG_CLIENT); |
|
937 | + return fwrite($this->smtp_conn, $data); |
|
938 | + } |
|
939 | + |
|
940 | + /** |
|
941 | + * Get the latest error. |
|
942 | + * @access public |
|
943 | + * @return array |
|
944 | + */ |
|
945 | + public function getError() |
|
946 | + { |
|
947 | + return $this->error; |
|
948 | + } |
|
949 | + |
|
950 | + /** |
|
951 | + * Get SMTP extensions available on the server |
|
952 | + * @access public |
|
953 | + * @return array|null |
|
954 | + */ |
|
955 | + public function getServerExtList() |
|
956 | + { |
|
957 | + return $this->server_caps; |
|
958 | + } |
|
959 | + |
|
960 | + /** |
|
961 | + * A multipurpose method |
|
962 | + * The method works in three ways, dependent on argument value and current state |
|
963 | + * 1. HELO/EHLO was not sent - returns null and set up $this->error |
|
964 | + * 2. HELO was sent |
|
965 | + * $name = 'HELO': returns server name |
|
966 | + * $name = 'EHLO': returns boolean false |
|
967 | + * $name = any string: returns null and set up $this->error |
|
968 | + * 3. EHLO was sent |
|
969 | + * $name = 'HELO'|'EHLO': returns server name |
|
970 | + * $name = any string: if extension $name exists, returns boolean True |
|
971 | + * or its options. Otherwise returns boolean False |
|
972 | + * In other words, one can use this method to detect 3 conditions: |
|
973 | + * - null returned: handshake was not or we don't know about ext (refer to $this->error) |
|
974 | + * - false returned: the requested feature exactly not exists |
|
975 | + * - positive value returned: the requested feature exists |
|
976 | + * @param string $name Name of SMTP extension or 'HELO'|'EHLO' |
|
977 | + * @return mixed |
|
978 | + */ |
|
979 | + public function getServerExt($name) |
|
980 | + { |
|
981 | + if (!$this->server_caps) { |
|
982 | + $this->setError('No HELO/EHLO was sent'); |
|
983 | + return null; |
|
984 | + } |
|
985 | + |
|
986 | + // the tight logic knot ;) |
|
987 | + if (!array_key_exists($name, $this->server_caps)) { |
|
988 | + if ($name == 'HELO') { |
|
989 | + return $this->server_caps['EHLO']; |
|
990 | + } |
|
991 | + if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) { |
|
992 | + return false; |
|
993 | + } |
|
994 | + $this->setError('HELO handshake was used. Client knows nothing about server extensions'); |
|
995 | + return null; |
|
996 | + } |
|
997 | + |
|
998 | + return $this->server_caps[$name]; |
|
999 | + } |
|
1000 | + |
|
1001 | + /** |
|
1002 | + * Get the last reply from the server. |
|
1003 | + * @access public |
|
1004 | + * @return string |
|
1005 | + */ |
|
1006 | + public function getLastReply() |
|
1007 | + { |
|
1008 | + return $this->last_reply; |
|
1009 | + } |
|
1010 | + |
|
1011 | + /** |
|
1012 | + * Read the SMTP server's response. |
|
1013 | + * Either before eof or socket timeout occurs on the operation. |
|
1014 | + * With SMTP we can tell if we have more lines to read if the |
|
1015 | + * 4th character is '-' symbol. If it is a space then we don't |
|
1016 | + * need to read anything else. |
|
1017 | + * @access protected |
|
1018 | + * @return string |
|
1019 | + */ |
|
1020 | + protected function get_lines() |
|
1021 | + { |
|
1022 | + // If the connection is bad, give up straight away |
|
1023 | + if (!is_resource($this->smtp_conn)) { |
|
1024 | + return ''; |
|
1025 | + } |
|
1026 | + $data = ''; |
|
1027 | + $endtime = 0; |
|
1028 | + stream_set_timeout($this->smtp_conn, $this->Timeout); |
|
1029 | + if ($this->Timelimit > 0) { |
|
1030 | + $endtime = time() + $this->Timelimit; |
|
1031 | + } |
|
1032 | + while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) { |
|
1033 | + $str = @fgets($this->smtp_conn, 515); |
|
1034 | + $this->edebug("SMTP -> get_lines(): \$data was \"$data\"", self::DEBUG_LOWLEVEL); |
|
1035 | + $this->edebug("SMTP -> get_lines(): \$str is \"$str\"", self::DEBUG_LOWLEVEL); |
|
1036 | + $data .= $str; |
|
1037 | + $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL); |
|
1038 | + // If 4th character is a space, we are done reading, break the loop, micro-optimisation over strlen |
|
1039 | + if ((isset($str[3]) and $str[3] == ' ')) { |
|
1040 | + break; |
|
1041 | + } |
|
1042 | + // Timed-out? Log and break |
|
1043 | + $info = stream_get_meta_data($this->smtp_conn); |
|
1044 | + if ($info['timed_out']) { |
|
1045 | + $this->edebug( |
|
1046 | + 'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)', |
|
1047 | + self::DEBUG_LOWLEVEL |
|
1048 | + ); |
|
1049 | + break; |
|
1050 | + } |
|
1051 | + // Now check if reads took too long |
|
1052 | + if ($endtime and time() > $endtime) { |
|
1053 | + $this->edebug( |
|
1054 | + 'SMTP -> get_lines(): timelimit reached ('. |
|
1055 | + $this->Timelimit . ' sec)', |
|
1056 | + self::DEBUG_LOWLEVEL |
|
1057 | + ); |
|
1058 | + break; |
|
1059 | + } |
|
1060 | + } |
|
1061 | + return $data; |
|
1062 | + } |
|
1063 | + |
|
1064 | + /** |
|
1065 | + * Enable or disable VERP address generation. |
|
1066 | + * @param boolean $enabled |
|
1067 | + */ |
|
1068 | + public function setVerp($enabled = false) |
|
1069 | + { |
|
1070 | + $this->do_verp = $enabled; |
|
1071 | + } |
|
1072 | + |
|
1073 | + /** |
|
1074 | + * Get VERP address generation mode. |
|
1075 | + * @return boolean |
|
1076 | + */ |
|
1077 | + public function getVerp() |
|
1078 | + { |
|
1079 | + return $this->do_verp; |
|
1080 | + } |
|
1081 | + |
|
1082 | + /** |
|
1083 | + * Set error messages and codes. |
|
1084 | + * @param string $message The error message |
|
1085 | + * @param string $detail Further detail on the error |
|
1086 | + * @param string $smtp_code An associated SMTP error code |
|
1087 | + * @param string $smtp_code_ex Extended SMTP code |
|
1088 | + */ |
|
1089 | + protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '') |
|
1090 | + { |
|
1091 | + $this->error = array( |
|
1092 | + 'error' => $message, |
|
1093 | + 'detail' => $detail, |
|
1094 | + 'smtp_code' => $smtp_code, |
|
1095 | + 'smtp_code_ex' => $smtp_code_ex |
|
1096 | + ); |
|
1097 | + } |
|
1098 | + |
|
1099 | + /** |
|
1100 | + * Set debug output method. |
|
1101 | + * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it. |
|
1102 | + */ |
|
1103 | + public function setDebugOutput($method = 'echo') |
|
1104 | + { |
|
1105 | + $this->Debugoutput = $method; |
|
1106 | + } |
|
1107 | + |
|
1108 | + /** |
|
1109 | + * Get debug output method. |
|
1110 | + * @return string |
|
1111 | + */ |
|
1112 | + public function getDebugOutput() |
|
1113 | + { |
|
1114 | + return $this->Debugoutput; |
|
1115 | + } |
|
1116 | + |
|
1117 | + /** |
|
1118 | + * Set debug output level. |
|
1119 | + * @param integer $level |
|
1120 | + */ |
|
1121 | + public function setDebugLevel($level = 0) |
|
1122 | + { |
|
1123 | + $this->do_debug = $level; |
|
1124 | + } |
|
1125 | + |
|
1126 | + /** |
|
1127 | + * Get debug output level. |
|
1128 | + * @return integer |
|
1129 | + */ |
|
1130 | + public function getDebugLevel() |
|
1131 | + { |
|
1132 | + return $this->do_debug; |
|
1133 | + } |
|
1134 | + |
|
1135 | + /** |
|
1136 | + * Set SMTP timeout. |
|
1137 | + * @param integer $timeout |
|
1138 | + */ |
|
1139 | + public function setTimeout($timeout = 0) |
|
1140 | + { |
|
1141 | + $this->Timeout = $timeout; |
|
1142 | + } |
|
1143 | + |
|
1144 | + /** |
|
1145 | + * Get SMTP timeout. |
|
1146 | + * @return integer |
|
1147 | + */ |
|
1148 | + public function getTimeout() |
|
1149 | + { |
|
1150 | + return $this->Timeout; |
|
1151 | + } |
|
1152 | 1152 | } |
1153 | 1153 | \ No newline at end of file |
@@ -174,6 +174,10 @@ discard block |
||
174 | 174 | return trim($test); |
175 | 175 | } |
176 | 176 | |
177 | + /** |
|
178 | + * @param string $monitorType |
|
179 | + * @param boolean $isBlocked |
|
180 | + */ |
|
177 | 181 | public static function logBlockListStats($server, $monitorType, $isBlocked){ |
178 | 182 | if(Setup::$settings['log_rbl_stats']==0) return true; |
179 | 183 | $mysql = new _MySQL(); |
@@ -403,6 +407,12 @@ discard block |
||
403 | 407 | ); |
404 | 408 | } |
405 | 409 | |
410 | + /** |
|
411 | + * @param string $host |
|
412 | + * @param boolean $isBlocked |
|
413 | + * @param string $rDNS |
|
414 | + * @param string $status |
|
415 | + */ |
|
406 | 416 | public static function makeAPICallback($url, $host, $isBlocked, $rDNS, $status){ |
407 | 417 | if(substr($url,0,4)!='http') return false; |
408 | 418 | |
@@ -438,6 +448,10 @@ discard block |
||
438 | 448 | return false; |
439 | 449 | } |
440 | 450 | |
451 | + /** |
|
452 | + * @param string $beginText |
|
453 | + * @param string $endText |
|
454 | + */ |
|
441 | 455 | public static function parseBetweenText( |
442 | 456 | $text, |
443 | 457 | $beginText, |
@@ -471,6 +485,11 @@ discard block |
||
471 | 485 | return ($firstResultOnlyNoArray && empty($results) ? '' : $results); |
472 | 486 | } |
473 | 487 | |
488 | + /** |
|
489 | + * @param _MySQL $mysql |
|
490 | + * |
|
491 | + * @return string |
|
492 | + */ |
|
474 | 493 | public static function getNextMonitor($mysql){ |
475 | 494 | $ipDomain = $mysql->runQueryReturnVar("select ipDomain from monitors where beenChecked = 0"); |
476 | 495 | $mysql->runQuery("update monitors set beenChecked = 1 where ipDomain = '".$mysql->escape($ipDomain)."'"); |
@@ -518,6 +537,9 @@ discard block |
||
518 | 537 | } |
519 | 538 | } |
520 | 539 | |
540 | + /** |
|
541 | + * @param string $command |
|
542 | + */ |
|
521 | 543 | public static function run_in_background($command, $priority = 0) { |
522 | 544 | $log = Setup::$settings['log_path']; |
523 | 545 | if($priority !=0){ |
@@ -32,7 +32,7 @@ discard block |
||
32 | 32 | while($row = mysqli_fetch_array($rs, MYSQL_ASSOC)){ |
33 | 33 | if($row['monitorType']=='ip'){ |
34 | 34 | $cacheData['ips'][] = $row['host']; |
35 | - }else{ |
|
35 | + } else{ |
|
36 | 36 | $cacheData['domains'][] = $row['host']; |
37 | 37 | } |
38 | 38 | } |
@@ -58,20 +58,20 @@ discard block |
||
58 | 58 | if($r!='') { |
59 | 59 | self::$isBlocked = 1; |
60 | 60 | self::logBlockListStats($server, 'ip', true); |
61 | - }else{ |
|
61 | + } else{ |
|
62 | 62 | self::logBlockListStats($server, 'ip', false); |
63 | 63 | } |
64 | 64 | if($r!='' || $reportClean==true) { |
65 | 65 | $return[] = array(trim($server),$r); |
66 | 66 | } |
67 | 67 | } |
68 | - }else{ |
|
68 | + } else{ |
|
69 | 69 | foreach(self::$domainBlacklists as $server){ |
70 | 70 | $r = self::domainCheck($domainOrIp, $server); |
71 | 71 | if($r!='') { |
72 | 72 | self::$isBlocked = 1; |
73 | 73 | self::logBlockListStats($server, 'domain', true); |
74 | - }else{ |
|
74 | + } else{ |
|
75 | 75 | self::logBlockListStats($server, 'domain', false); |
76 | 76 | } |
77 | 77 | if($r!='' || $reportClean==true) { |
@@ -113,17 +113,23 @@ discard block |
||
113 | 113 | $testArray = explode("\t", $test); |
114 | 114 | $test = end($testArray); |
115 | 115 | $test = str_replace(array('\'','"'),'',$test); |
116 | - }else{ |
|
116 | + } else{ |
|
117 | 117 | $test = 'blocked'; |
118 | 118 | } |
119 | 119 | } |
120 | - if(strripos($test,'not found')!==false) return ''; |
|
121 | - if(strripos($test,'SERVFAIL')!==false) return ''; |
|
120 | + if(strripos($test,'not found')!==false) { |
|
121 | + return ''; |
|
122 | + } |
|
123 | + if(strripos($test,'SERVFAIL')!==false) { |
|
124 | + return ''; |
|
125 | + } |
|
122 | 126 | return trim($test); |
123 | 127 | } |
124 | 128 | |
125 | 129 | public static function ipCheck($ip, $server){ |
126 | - if(_IpAddresses::isIPAddress($ip)===false) return ''; |
|
130 | + if(_IpAddresses::isIPAddress($ip)===false) { |
|
131 | + return ''; |
|
132 | + } |
|
127 | 133 | $server = trim($server); |
128 | 134 | |
129 | 135 | $parts = explode('.', $ip); |
@@ -164,23 +170,31 @@ discard block |
||
164 | 170 | $test = (isset($a[1])) ? 'Listed ' . $a[1] : $test2; |
165 | 171 | break; |
166 | 172 | } |
167 | - if($test2!='') $test = $test2; |
|
168 | - }else{ |
|
173 | + if($test2!='') { |
|
174 | + $test = $test2; |
|
175 | + } |
|
176 | + } else{ |
|
169 | 177 | $test = 'blocked'; |
170 | 178 | } |
171 | 179 | } |
172 | - if(strripos($test,'not found')!==false) return ''; |
|
173 | - if(strripos($test,'SERVFAIL')!==false) return ''; |
|
180 | + if(strripos($test,'not found')!==false) { |
|
181 | + return ''; |
|
182 | + } |
|
183 | + if(strripos($test,'SERVFAIL')!==false) { |
|
184 | + return ''; |
|
185 | + } |
|
174 | 186 | return trim($test); |
175 | 187 | } |
176 | 188 | |
177 | 189 | public static function logBlockListStats($server, $monitorType, $isBlocked){ |
178 | - if(Setup::$settings['log_rbl_stats']==0) return true; |
|
190 | + if(Setup::$settings['log_rbl_stats']==0) { |
|
191 | + return true; |
|
192 | + } |
|
179 | 193 | $mysql = new _MySQL(); |
180 | 194 | $mysql->connect(Setup::$connectionArray); |
181 | 195 | if($isBlocked){ |
182 | 196 | $sql = "update blockLists set blocksToday=(blocksToday+1), lastBlockReport=now() where host = '".$mysql->escape($server)."' and monitorType = '$monitorType';"; |
183 | - }else{ |
|
197 | + } else{ |
|
184 | 198 | $sql = "update blockLists set cleanToday=(cleanToday+1) where host = '".$mysql->escape($server)."' and monitorType = '$monitorType';"; |
185 | 199 | } |
186 | 200 | $mysql->runQuery($sql); |
@@ -202,7 +216,9 @@ discard block |
||
202 | 216 | public static function updateDomains($domains, $monitorGroupId){ |
203 | 217 | $domains = trim($domains); |
204 | 218 | $monitorGroupId = (int)$monitorGroupId; |
205 | - if($monitorGroupId===0) return false; |
|
219 | + if($monitorGroupId===0) { |
|
220 | + return false; |
|
221 | + } |
|
206 | 222 | $mysql = new _MySQL(); |
207 | 223 | $mysql->connect(Setup::$connectionArray); |
208 | 224 | $mysql->runQuery("update monitors set keepOnUpdate = 0 where isDomain = 1 and monitorGroupId = $monitorGroupId"); |
@@ -241,7 +257,9 @@ discard block |
||
241 | 257 | public static function updateIPs($ips, $monitorGroupId){ |
242 | 258 | $ips = trim($ips); |
243 | 259 | $monitorGroupId = (int)$monitorGroupId; |
244 | - if($monitorGroupId===0) return false; |
|
260 | + if($monitorGroupId===0) { |
|
261 | + return false; |
|
262 | + } |
|
245 | 263 | $mysql = new _MySQL(); |
246 | 264 | $mysql->connect(Setup::$connectionArray); |
247 | 265 | $mysql->runQuery("update monitors set keepOnUpdate = 0 where isDomain = 0 and monitorGroupId = $monitorGroupId"); |
@@ -267,16 +285,25 @@ discard block |
||
267 | 285 | keepOnUpdate = 1 |
268 | 286 | "); |
269 | 287 | } |
270 | - }else{ |
|
288 | + } else{ |
|
271 | 289 | //cidr /24's max... |
272 | 290 | if(trim($i)!=''){ |
273 | - if(strpos($i, ' ')!==false) continue; |
|
274 | - if(strpos($i, ':')!==false) continue; |
|
291 | + if(strpos($i, ' ')!==false) { |
|
292 | + continue; |
|
293 | + } |
|
294 | + if(strpos($i, ':')!==false) { |
|
295 | + continue; |
|
296 | + } |
|
275 | 297 | $range = _IpAddresses::cidrToRange($i); |
276 | - if($range===false) continue; |
|
298 | + if($range===false) { |
|
299 | + continue; |
|
300 | + } |
|
277 | 301 | $start = explode('.', $range[0]); |
278 | 302 | $end = explode('.', $range[1]); |
279 | - if($range[0]==0) continue;// starts with 0 |
|
303 | + if($range[0]==0) { |
|
304 | + continue; |
|
305 | + } |
|
306 | + // starts with 0 |
|
280 | 307 | for($i = $start[3]; $i <= $end[3]; $i++){ |
281 | 308 | $host = "{$start[0]}.{$start[1]}.{$start[2]}.$i"; |
282 | 309 | if(_IpAddresses::isIPAddress($host)){ |
@@ -308,7 +335,7 @@ discard block |
||
308 | 335 | public static function isLoggedIn(){ |
309 | 336 | if(isset($_SESSION['id']) && (int)$_SESSION['id'] > 0){ |
310 | 337 | return $_SESSION['id']; |
311 | - }else{ |
|
338 | + } else{ |
|
312 | 339 | return false; |
313 | 340 | } |
314 | 341 | } |
@@ -353,7 +380,7 @@ discard block |
||
353 | 380 | where "; |
354 | 381 | if(trim($apiKey) != ''){ |
355 | 382 | $sql .= " apiKey = '".$mysql->escape($apiKey)."'"; |
356 | - }else{ |
|
383 | + } else{ |
|
357 | 384 | $sql .= " passwd = '".$mysql->escape(md5($passwd))."' |
358 | 385 | and username = '".$mysql->escape($userName)."'"; |
359 | 386 | } |
@@ -369,12 +396,12 @@ discard block |
||
369 | 396 | public static function lookupHostDNS($host){ |
370 | 397 | if(_IpAddresses::isIPAddress($host)){ |
371 | 398 | return _IpAddresses::getHostByIp($host); |
372 | - }else{ |
|
399 | + } else{ |
|
373 | 400 | $host = escapeshellarg($host); |
374 | 401 | exec('host -t a -W 2 '.$host, $output, $return); |
375 | 402 | if ($return !== 0) { |
376 | 403 | return ''; |
377 | - }else{ |
|
404 | + } else{ |
|
378 | 405 | $output = implode($output); |
379 | 406 | $ips = _IpAddresses::getAllIPsFromString($output, true); |
380 | 407 | $ir = ""; |
@@ -404,7 +431,9 @@ discard block |
||
404 | 431 | } |
405 | 432 | |
406 | 433 | public static function makeAPICallback($url, $host, $isBlocked, $rDNS, $status){ |
407 | - if(substr($url,0,4)!='http') return false; |
|
434 | + if(substr($url,0,4)!='http') { |
|
435 | + return false; |
|
436 | + } |
|
408 | 437 | |
409 | 438 | $vars = json_encode( |
410 | 439 | array( |
@@ -424,7 +453,9 @@ discard block |
||
424 | 453 | curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); |
425 | 454 | curl_setopt($ch,CURLOPT_HTTPHEADER, array('Content-Type: application/json')); |
426 | 455 | curl_exec($ch); |
427 | - if (curl_errno($ch)) $err = false; |
|
456 | + if (curl_errno($ch)) { |
|
457 | + $err = false; |
|
458 | + } |
|
428 | 459 | } catch (Exception $e) { |
429 | 460 | $err = false; |
430 | 461 | } |
@@ -449,10 +480,14 @@ discard block |
||
449 | 480 | $endPos = 0; |
450 | 481 | while(true) { |
451 | 482 | $beginPos = stripos($text, $beginText, $endPos); |
452 | - if($beginPos===false) break; |
|
483 | + if($beginPos===false) { |
|
484 | + break; |
|
485 | + } |
|
453 | 486 | $beginPos = $beginPos+strlen($beginText); |
454 | 487 | $endPos = stripos($text, $endText, $beginPos); |
455 | - if($endPos===false) break; |
|
488 | + if($endPos===false) { |
|
489 | + break; |
|
490 | + } |
|
456 | 491 | $result = substr($text, $beginPos, $endPos-$beginPos); |
457 | 492 | if($removeSpace){ |
458 | 493 | $result = str_replace("\t","",$result); |
@@ -465,8 +500,12 @@ discard block |
||
465 | 500 | if($removeHtmlTags){ |
466 | 501 | $result = strip_tags($result); |
467 | 502 | } |
468 | - if($firstResultOnlyNoArray) return $result; |
|
469 | - if($result != '') $results[] = $result; |
|
503 | + if($firstResultOnlyNoArray) { |
|
504 | + return $result; |
|
505 | + } |
|
506 | + if($result != '') { |
|
507 | + $results[] = $result; |
|
508 | + } |
|
470 | 509 | } |
471 | 510 | return ($firstResultOnlyNoArray && empty($results) ? '' : $results); |
472 | 511 | } |
@@ -480,40 +519,54 @@ discard block |
||
480 | 519 | public static function getHostChangeCount($mysql, $monitorGroupId = 0) { |
481 | 520 | $sql = ''; |
482 | 521 | $monitorGroupId = (int)$monitorGroupId; |
483 | - if($monitorGroupId > 0) $sql = " and monitorGroupId = $monitorGroupId"; |
|
522 | + if($monitorGroupId > 0) { |
|
523 | + $sql = " and monitorGroupId = $monitorGroupId"; |
|
524 | + } |
|
484 | 525 | return $mysql->runQueryReturnVar("select COALESCE(count(ipDomain),0) as cnt from monitors where lastStatusChanged = 1 $sql"); |
485 | 526 | } |
486 | 527 | |
487 | 528 | public static function getHostErrorCount($mysql, $monitorGroupId = 0, $onlyNew = false) { |
488 | 529 | $sql = ''; |
489 | 530 | $monitorGroupId = (int)$monitorGroupId; |
490 | - if($monitorGroupId > 0) $sql = " and monitorGroupId = $monitorGroupId"; |
|
491 | - if($onlyNew) $sql .= " and lastStatusChanged = 1 "; |
|
531 | + if($monitorGroupId > 0) { |
|
532 | + $sql = " and monitorGroupId = $monitorGroupId"; |
|
533 | + } |
|
534 | + if($onlyNew) { |
|
535 | + $sql .= " and lastStatusChanged = 1 "; |
|
536 | + } |
|
492 | 537 | return $mysql->runQueryReturnVar("select COALESCE(count(ipDomain),0) as cnt from monitors where isBlocked = 1 $sql"); |
493 | 538 | } |
494 | 539 | |
495 | 540 | public static function getHostCleanCount($mysql, $monitorGroupId = 0, $onlyNew = false) { |
496 | 541 | $sql = ''; |
497 | 542 | $monitorGroupId = (int)$monitorGroupId; |
498 | - if($monitorGroupId > 0) $sql = " and monitorGroupId = $monitorGroupId"; |
|
499 | - if($onlyNew) $sql .= " and lastStatusChanged = 1 "; |
|
543 | + if($monitorGroupId > 0) { |
|
544 | + $sql = " and monitorGroupId = $monitorGroupId"; |
|
545 | + } |
|
546 | + if($onlyNew) { |
|
547 | + $sql .= " and lastStatusChanged = 1 "; |
|
548 | + } |
|
500 | 549 | return $mysql->runQueryReturnVar("select COALESCE(count(ipDomain),0) as cnt from monitors where isBlocked = 0 $sql"); |
501 | 550 | } |
502 | 551 | |
503 | 552 | public static function getHostCount($mysql, $monitorGroupId = 0) { |
504 | 553 | $sql = ''; |
505 | 554 | $monitorGroupId = (int)$monitorGroupId; |
506 | - if($monitorGroupId > 0) $sql = " where monitorGroupId = $monitorGroupId"; |
|
555 | + if($monitorGroupId > 0) { |
|
556 | + $sql = " where monitorGroupId = $monitorGroupId"; |
|
557 | + } |
|
507 | 558 | return $mysql->runQueryReturnVar("select COALESCE(count(ipDomain),0) as cnt from monitors $sql"); |
508 | 559 | } |
509 | 560 | |
510 | 561 | //CREDIT: http://braincrafted.com/php-background-processes/ |
511 | 562 | public static function is_process_running($pid){ |
512 | 563 | $pid = (int)$pid; |
513 | - if($pid == 0) return false; |
|
564 | + if($pid == 0) { |
|
565 | + return false; |
|
566 | + } |
|
514 | 567 | if(file_exists('/proc/'.$pid)){ |
515 | 568 | return true; |
516 | - }else{ |
|
569 | + } else{ |
|
517 | 570 | return false; |
518 | 571 | } |
519 | 572 | } |
@@ -522,7 +575,7 @@ discard block |
||
522 | 575 | $log = Setup::$settings['log_path']; |
523 | 576 | if($priority !=0){ |
524 | 577 | $pid = shell_exec("nohup nice -n $priority $command >> $log 2>&1 & echo $!"); |
525 | - }else{ |
|
578 | + } else{ |
|
526 | 579 | $pid = shell_exec("nohup $command >> $log 2>&1 & echo $!"); |
527 | 580 | } |
528 | 581 | return($pid); |
@@ -12,12 +12,12 @@ discard block |
||
12 | 12 | public static $frequencyCheckOptions = array('1hour', '2hour', '8hour', 'daily', 'weekly'); |
13 | 13 | public static $mysql = false; |
14 | 14 | |
15 | - public static function setBlockLists(){ |
|
15 | + public static function setBlockLists() { |
|
16 | 16 | $localCache = new _FileCache('blacklistmonitor-Utilities-BlockLists', 60); |
17 | 17 | $cacheKey = 'bl'; |
18 | 18 | $cacheData = $localCache->get($cacheKey); |
19 | - if ($cacheData !== false) { |
|
20 | - if(isset($cacheData['domains']) && isset($cacheData['ips']) ) { |
|
19 | + if ($cacheData!==false) { |
|
20 | + if (isset($cacheData['domains']) && isset($cacheData['ips'])) { |
|
21 | 21 | self::$domainBlacklists = $cacheData['domains']; |
22 | 22 | self::$ipBlacklists = $cacheData['ips']; |
23 | 23 | return true; |
@@ -29,10 +29,10 @@ discard block |
||
29 | 29 | $rs = $mysql->runQuery($sql); |
30 | 30 | $cacheData['domains'] = array(); |
31 | 31 | $cacheData['ips'] = array(); |
32 | - while($row = mysqli_fetch_array($rs)){ |
|
33 | - if($row['monitorType']=='ip'){ |
|
32 | + while ($row = mysqli_fetch_array($rs)) { |
|
33 | + if ($row['monitorType']=='ip') { |
|
34 | 34 | $cacheData['ips'][] = $row['host']; |
35 | - }else{ |
|
35 | + }else { |
|
36 | 36 | $cacheData['domains'][] = $row['host']; |
37 | 37 | } |
38 | 38 | } |
@@ -43,46 +43,46 @@ discard block |
||
43 | 43 | return false; |
44 | 44 | } |
45 | 45 | |
46 | - public static function randomDNSServer(){ |
|
47 | - return Setup::$settings['dns_servers'][mt_rand(0,(count(Setup::$settings['dns_servers'])-1))]; |
|
46 | + public static function randomDNSServer() { |
|
47 | + return Setup::$settings['dns_servers'][mt_rand(0, (count(Setup::$settings['dns_servers'])-1))]; |
|
48 | 48 | } |
49 | 49 | |
50 | 50 | public static $isBlocked = 0; |
51 | 51 | |
52 | - public static function checkBlacklists($domainOrIp, $reportClean=false){ |
|
52 | + public static function checkBlacklists($domainOrIp, $reportClean = false) { |
|
53 | 53 | self::$isBlocked = 0; |
54 | 54 | $return = array(); |
55 | - if(_IpAddresses::isIPAddress($domainOrIp)){ |
|
56 | - foreach(self::$ipBlacklists as $server){ |
|
55 | + if (_IpAddresses::isIPAddress($domainOrIp)) { |
|
56 | + foreach (self::$ipBlacklists as $server) { |
|
57 | 57 | $r = self::ipCheck($domainOrIp, $server); |
58 | - if($r!='') { |
|
58 | + if ($r!='') { |
|
59 | 59 | self::$isBlocked = 1; |
60 | 60 | self::logBlockListStats($server, 'ip', true); |
61 | - }else{ |
|
61 | + }else { |
|
62 | 62 | self::logBlockListStats($server, 'ip', false); |
63 | 63 | } |
64 | - if($r!='' || $reportClean==true) { |
|
65 | - $return[] = array(trim($server),$r); |
|
64 | + if ($r!='' || $reportClean==true) { |
|
65 | + $return[] = array(trim($server), $r); |
|
66 | 66 | } |
67 | 67 | } |
68 | - }else{ |
|
69 | - foreach(self::$domainBlacklists as $server){ |
|
68 | + }else { |
|
69 | + foreach (self::$domainBlacklists as $server) { |
|
70 | 70 | $r = self::domainCheck($domainOrIp, $server); |
71 | - if($r!='') { |
|
71 | + if ($r!='') { |
|
72 | 72 | self::$isBlocked = 1; |
73 | 73 | self::logBlockListStats($server, 'domain', true); |
74 | - }else{ |
|
74 | + }else { |
|
75 | 75 | self::logBlockListStats($server, 'domain', false); |
76 | 76 | } |
77 | - if($r!='' || $reportClean==true) { |
|
78 | - $return[] = array(trim($server),$r); |
|
77 | + if ($r!='' || $reportClean==true) { |
|
78 | + $return[] = array(trim($server), $r); |
|
79 | 79 | } |
80 | 80 | } |
81 | 81 | } |
82 | 82 | return $return; |
83 | 83 | } |
84 | 84 | |
85 | - public static function domainCheck($domain, $server){ |
|
85 | + public static function domainCheck($domain, $server) { |
|
86 | 86 | $server = trim($server); |
87 | 87 | $host = escapeshellarg("$domain.$server"); |
88 | 88 | $t = "dig @".self::randomDNSServer()." +time=".Setup::$settings['dns_request_timeout']." $host"; |
@@ -98,8 +98,8 @@ discard block |
||
98 | 98 | $testArray = explode("\t", $test); |
99 | 99 | $test = end($testArray); |
100 | 100 | |
101 | - if(trim($test)!=''){ |
|
102 | - if(Setup::$settings['rbl_txt_extended_status']){ |
|
101 | + if (trim($test)!='') { |
|
102 | + if (Setup::$settings['rbl_txt_extended_status']) { |
|
103 | 103 | $t = "dig @".self::randomDNSServer()." +time=".Setup::$settings['dns_request_timeout']." $host txt"; |
104 | 104 | // echo("$t</br>"); |
105 | 105 | $text = shell_exec($t); |
@@ -112,18 +112,18 @@ discard block |
||
112 | 112 | true); |
113 | 113 | $testArray = explode("\t", $test); |
114 | 114 | $test = end($testArray); |
115 | - $test = str_replace(array('\'','"'),'',$test); |
|
116 | - }else{ |
|
115 | + $test = str_replace(array('\'', '"'), '', $test); |
|
116 | + }else { |
|
117 | 117 | $test = 'blocked'; |
118 | 118 | } |
119 | 119 | } |
120 | - if(strripos($test,'not found')!==false) return ''; |
|
121 | - if(strripos($test,'SERVFAIL')!==false) return ''; |
|
120 | + if (strripos($test, 'not found')!==false) return ''; |
|
121 | + if (strripos($test, 'SERVFAIL')!==false) return ''; |
|
122 | 122 | return trim($test); |
123 | 123 | } |
124 | 124 | |
125 | - public static function ipCheck($ip, $server){ |
|
126 | - if(_IpAddresses::isIPAddress($ip)===false) return ''; |
|
125 | + public static function ipCheck($ip, $server) { |
|
126 | + if (_IpAddresses::isIPAddress($ip)===false) return ''; |
|
127 | 127 | $server = trim($server); |
128 | 128 | |
129 | 129 | $parts = explode('.', $ip); |
@@ -143,8 +143,8 @@ discard block |
||
143 | 143 | $testArray = preg_split("/IN\s+A\s+/i", $test); |
144 | 144 | $test = trim(end($testArray)); |
145 | 145 | // echo "<pre>$test</pre>\n"; |
146 | - if(trim($test)!=''){ |
|
147 | - if(Setup::$settings['rbl_txt_extended_status']){ |
|
146 | + if (trim($test)!='') { |
|
147 | + if (Setup::$settings['rbl_txt_extended_status']) { |
|
148 | 148 | $t = "dig @".self::randomDNSServer()." +time=".Setup::$settings['dns_request_timeout']." $host txt"; |
149 | 149 | // echo("$t</br>"); |
150 | 150 | $text = shell_exec($t); |
@@ -157,41 +157,41 @@ discard block |
||
157 | 157 | true); |
158 | 158 | $testArray = preg_split("/IN\s+TXT\s+/i", $test2); |
159 | 159 | $test2 = trim(end($testArray)); |
160 | - $test2 = str_replace(array('\'','"'),'',$test2); |
|
161 | - switch($server){ |
|
160 | + $test2 = str_replace(array('\'', '"'), '', $test2); |
|
161 | + switch ($server) { |
|
162 | 162 | case 'bl.mailspike.net': |
163 | - $a = explode("|",$test2); |
|
164 | - $test = (isset($a[1])) ? 'Listed ' . $a[1] : $test2; |
|
163 | + $a = explode("|", $test2); |
|
164 | + $test = (isset($a[1])) ? 'Listed '.$a[1] : $test2; |
|
165 | 165 | break; |
166 | 166 | } |
167 | - if($test2!='') $test = $test2; |
|
168 | - }else{ |
|
167 | + if ($test2!='') $test = $test2; |
|
168 | + }else { |
|
169 | 169 | $test = 'blocked'; |
170 | 170 | } |
171 | 171 | } |
172 | - if(strripos($test,'not found')!==false) return ''; |
|
173 | - if(strripos($test,'SERVFAIL')!==false) return ''; |
|
172 | + if (strripos($test, 'not found')!==false) return ''; |
|
173 | + if (strripos($test, 'SERVFAIL')!==false) return ''; |
|
174 | 174 | return trim($test); |
175 | 175 | } |
176 | 176 | |
177 | - public static function logBlockListStats($server, $monitorType, $isBlocked){ |
|
178 | - if(Setup::$settings['log_rbl_stats']==0) return true; |
|
177 | + public static function logBlockListStats($server, $monitorType, $isBlocked) { |
|
178 | + if (Setup::$settings['log_rbl_stats']==0) return true; |
|
179 | 179 | $mysql = new _MySQL(); |
180 | 180 | $mysql->connect(Setup::$connectionArray); |
181 | - if($isBlocked){ |
|
181 | + if ($isBlocked) { |
|
182 | 182 | $sql = "update blockLists set blocksToday=(blocksToday+1), lastBlockReport=now() where host = '".$mysql->escape($server)."' and monitorType = '$monitorType';"; |
183 | - }else{ |
|
183 | + }else { |
|
184 | 184 | $sql = "update blockLists set cleanToday=(cleanToday+1) where host = '".$mysql->escape($server)."' and monitorType = '$monitorType';"; |
185 | 185 | } |
186 | 186 | $mysql->runQuery($sql); |
187 | 187 | $mysql->close(); |
188 | 188 | } |
189 | 189 | |
190 | - public static function ensureGroupExists($groupName){ |
|
190 | + public static function ensureGroupExists($groupName) { |
|
191 | 191 | $mysql = new _MySQL(); |
192 | 192 | $mysql->connect(Setup::$connectionArray); |
193 | 193 | $id = $mysql->runQueryReturnVar("select id from monitorGroup where groupName = '".$mysql->escape($groupName)."'"); |
194 | - if($id===false){ |
|
194 | + if ($id===false) { |
|
195 | 195 | $mysql->runQuery("insert into monitorGroup set groupName = '".$mysql->escape($groupName)."'"); |
196 | 196 | $id = $mysql->identity; |
197 | 197 | } |
@@ -199,23 +199,23 @@ discard block |
||
199 | 199 | return $id; |
200 | 200 | } |
201 | 201 | |
202 | - public static function updateDomains($domains, $monitorGroupId){ |
|
202 | + public static function updateDomains($domains, $monitorGroupId) { |
|
203 | 203 | $domains = trim($domains); |
204 | 204 | $monitorGroupId = (int)$monitorGroupId; |
205 | - if($monitorGroupId===0) return false; |
|
205 | + if ($monitorGroupId===0) return false; |
|
206 | 206 | $mysql = new _MySQL(); |
207 | 207 | $mysql->connect(Setup::$connectionArray); |
208 | 208 | $mysql->runQuery("update monitors set keepOnUpdate = 0 where isDomain = 1 and monitorGroupId = $monitorGroupId"); |
209 | 209 | $mysql->runQuery("update users set lastUpdate = '".$mysql->escape(date('Y-m-d H:i:s'))."'"); |
210 | 210 | $mysql->runQuery("update monitorGroup set domains = '".$mysql->escape($domains)."' where id = $monitorGroupId"); |
211 | 211 | $domainArray = preg_split('/\s+/', $domains); |
212 | - foreach($domainArray as $d){ |
|
212 | + foreach ($domainArray as $d) { |
|
213 | 213 | $d = trim($d); |
214 | 214 | $d = str_ireplace('http://', '', $d); |
215 | 215 | $d = str_ireplace('https://', '', $d); |
216 | 216 | $d = str_ireplace('/', '', $d); |
217 | 217 | $d = preg_replace('/[[:^print:]]/', '', $d); |
218 | - if($d != ''){ |
|
218 | + if ($d!='') { |
|
219 | 219 | $mysql->runQuery(" |
220 | 220 | update monitors set |
221 | 221 | keepOnUpdate = 1 |
@@ -224,7 +224,7 @@ discard block |
||
224 | 224 | and ipDomain = '".$mysql->escape($d)."' |
225 | 225 | and isDomain = 1 |
226 | 226 | "); |
227 | - if($mysql->affectedRows == 0){ |
|
227 | + if ($mysql->affectedRows==0) { |
|
228 | 228 | $mysql->runQuery("insert ignore into monitors set |
229 | 229 | monitorGroupId = $monitorGroupId, |
230 | 230 | ipDomain = '".$mysql->escape($d)."', |
@@ -238,19 +238,19 @@ discard block |
||
238 | 238 | $mysql->close(); |
239 | 239 | } |
240 | 240 | |
241 | - public static function updateIPs($ips, $monitorGroupId){ |
|
241 | + public static function updateIPs($ips, $monitorGroupId) { |
|
242 | 242 | $ips = trim($ips); |
243 | 243 | $monitorGroupId = (int)$monitorGroupId; |
244 | - if($monitorGroupId===0) return false; |
|
244 | + if ($monitorGroupId===0) return false; |
|
245 | 245 | $mysql = new _MySQL(); |
246 | 246 | $mysql->connect(Setup::$connectionArray); |
247 | 247 | $mysql->runQuery("update monitors set keepOnUpdate = 0 where isDomain = 0 and monitorGroupId = $monitorGroupId"); |
248 | 248 | $mysql->runQuery("update users set lastUpdate = '".$mysql->escape(date('Y-m-d H:i:s'))."'"); |
249 | 249 | $mysql->runQuery("update monitorGroup set ips = '".$mysql->escape($ips)."' where id = $monitorGroupId"); |
250 | - $ipsArray = preg_split('/\s+/', $ips); |
|
251 | - foreach($ipsArray as $i){ |
|
250 | + $ipsArray = preg_split('/\s+/', $ips); |
|
251 | + foreach ($ipsArray as $i) { |
|
252 | 252 | // ip checks |
253 | - if(_IpAddresses::isIPAddress($i)){ |
|
253 | + if (_IpAddresses::isIPAddress($i)) { |
|
254 | 254 | $mysql->runQuery(" |
255 | 255 | update monitors set |
256 | 256 | keepOnUpdate = 1 |
@@ -259,7 +259,7 @@ discard block |
||
259 | 259 | and ipDomain = '".$mysql->escape($i)."' |
260 | 260 | and isDomain = 0 |
261 | 261 | "); |
262 | - if($mysql->affectedRows == 0){ |
|
262 | + if ($mysql->affectedRows==0) { |
|
263 | 263 | $mysql->runQuery("insert ignore into monitors set |
264 | 264 | monitorGroupId = $monitorGroupId, |
265 | 265 | ipDomain = '".$mysql->escape($i)."', |
@@ -267,19 +267,19 @@ discard block |
||
267 | 267 | keepOnUpdate = 1 |
268 | 268 | "); |
269 | 269 | } |
270 | - }else{ |
|
270 | + }else { |
|
271 | 271 | //cidr /24's max... |
272 | - if(trim($i)!=''){ |
|
273 | - if(strpos($i, ' ')!==false) continue; |
|
274 | - if(strpos($i, ':')!==false) continue; |
|
272 | + if (trim($i)!='') { |
|
273 | + if (strpos($i, ' ')!==false) continue; |
|
274 | + if (strpos($i, ':')!==false) continue; |
|
275 | 275 | $range = _IpAddresses::cidrToRange($i); |
276 | - if($range===false) continue; |
|
276 | + if ($range===false) continue; |
|
277 | 277 | $start = explode('.', $range[0]); |
278 | 278 | $end = explode('.', $range[1]); |
279 | - if($range[0]==0) continue;// starts with 0 |
|
280 | - for($i = $start[3]; $i <= $end[3]; $i++){ |
|
279 | + if ($range[0]==0) continue; // starts with 0 |
|
280 | + for ($i = $start[3]; $i <= $end[3]; $i++) { |
|
281 | 281 | $host = "{$start[0]}.{$start[1]}.{$start[2]}.$i"; |
282 | - if(_IpAddresses::isIPAddress($host)){ |
|
282 | + if (_IpAddresses::isIPAddress($host)) { |
|
283 | 283 | $mysql->runQuery(" |
284 | 284 | update monitors set |
285 | 285 | keepOnUpdate = 1 |
@@ -288,7 +288,7 @@ discard block |
||
288 | 288 | and ipDomain = '".$mysql->escape($host)."' |
289 | 289 | and isDomain = 0 |
290 | 290 | "); |
291 | - if($mysql->affectedRows == 0){ |
|
291 | + if ($mysql->affectedRows==0) { |
|
292 | 292 | $mysql->runQuery("insert ignore into monitors set |
293 | 293 | monitorGroupId = $monitorGroupId, |
294 | 294 | ipDomain = '".$mysql->escape($host)."', |
@@ -305,15 +305,15 @@ discard block |
||
305 | 305 | $mysql->close(); |
306 | 306 | } |
307 | 307 | |
308 | - public static function isLoggedIn(){ |
|
309 | - if(isset($_SESSION['id']) && (int)$_SESSION['id'] > 0){ |
|
308 | + public static function isLoggedIn() { |
|
309 | + if (isset($_SESSION['id']) && (int)$_SESSION['id'] > 0) { |
|
310 | 310 | return $_SESSION['id']; |
311 | - }else{ |
|
311 | + }else { |
|
312 | 312 | return false; |
313 | 313 | } |
314 | 314 | } |
315 | 315 | |
316 | - public static function getAccount(){ |
|
316 | + public static function getAccount() { |
|
317 | 317 | $mysql = new _MySQL(); |
318 | 318 | $mysql->connect(Setup::$connectionArray); |
319 | 319 | $ret = false; |
@@ -330,12 +330,12 @@ discard block |
||
330 | 330 | apiCallbackURL, |
331 | 331 | checkFrequency |
332 | 332 | from users limit 1"); |
333 | - while($row = mysqli_fetch_array($rs)){ |
|
333 | + while ($row = mysqli_fetch_array($rs)) { |
|
334 | 334 | $ret = $row; |
335 | 335 | } |
336 | 336 | $mysql->close(); |
337 | 337 | |
338 | - if(!$ret){ |
|
338 | + if (!$ret) { |
|
339 | 339 | //account |
340 | 340 | _Logging::appLog("no user account"); |
341 | 341 | exit(); |
@@ -344,44 +344,44 @@ discard block |
||
344 | 344 | return $ret; |
345 | 345 | } |
346 | 346 | |
347 | - public static function validateLogin($userName, $passwd, $api = false, $apiKey = ''){ |
|
347 | + public static function validateLogin($userName, $passwd, $api = false, $apiKey = '') { |
|
348 | 348 | $mysql = new _MySQL(); |
349 | 349 | $mysql->connect(Setup::$connectionArray); |
350 | 350 | $sql = " |
351 | 351 | select username |
352 | 352 | from users |
353 | 353 | where "; |
354 | - if(trim($apiKey) != ''){ |
|
354 | + if (trim($apiKey)!='') { |
|
355 | 355 | $sql .= " apiKey = '".$mysql->escape($apiKey)."'"; |
356 | - }else{ |
|
356 | + }else { |
|
357 | 357 | $sql .= " passwd = '".$mysql->escape(md5($passwd))."' |
358 | 358 | and username = '".$mysql->escape($userName)."'"; |
359 | 359 | } |
360 | 360 | $rs = $mysql->runQuery($sql); |
361 | 361 | $id = 0; |
362 | - while($row = mysqli_fetch_array($rs)){ |
|
362 | + while ($row = mysqli_fetch_array($rs)) { |
|
363 | 363 | $id = 1; |
364 | 364 | } |
365 | 365 | $mysql->close(); |
366 | 366 | return $id; |
367 | 367 | } |
368 | 368 | |
369 | - public static function lookupHostDNS($host){ |
|
370 | - if(_IpAddresses::isIPAddress($host)){ |
|
369 | + public static function lookupHostDNS($host) { |
|
370 | + if (_IpAddresses::isIPAddress($host)) { |
|
371 | 371 | return _IpAddresses::getHostByIp($host); |
372 | - }else{ |
|
372 | + }else { |
|
373 | 373 | $host = escapeshellarg($host); |
374 | 374 | exec('host -t a -W 2 '.$host, $output, $return); |
375 | - if ($return !== 0) { |
|
375 | + if ($return!==0) { |
|
376 | 376 | return ''; |
377 | - }else{ |
|
377 | + }else { |
|
378 | 378 | $output = implode($output); |
379 | 379 | $ips = _IpAddresses::getAllIPsFromString($output, true); |
380 | 380 | $ir = ""; |
381 | - foreach($ips as $ip){ |
|
381 | + foreach ($ips as $ip) { |
|
382 | 382 | $ir .= "$ip,"; |
383 | 383 | } |
384 | - return trim($ir,','); |
|
384 | + return trim($ir, ','); |
|
385 | 385 | } |
386 | 386 | |
387 | 387 | /* |
@@ -394,7 +394,7 @@ discard block |
||
394 | 394 | } |
395 | 395 | } |
396 | 396 | |
397 | - public static function testAPICallback($url){ |
|
397 | + public static function testAPICallback($url) { |
|
398 | 398 | return self::makeAPICallback($url, |
399 | 399 | 'samplehosttest.com', |
400 | 400 | true, |
@@ -403,8 +403,8 @@ discard block |
||
403 | 403 | ); |
404 | 404 | } |
405 | 405 | |
406 | - public static function makeAPICallback($url, $host, $isBlocked, $rDNS, $status){ |
|
407 | - if(substr($url,0,4)!='http') return false; |
|
406 | + public static function makeAPICallback($url, $host, $isBlocked, $rDNS, $status) { |
|
407 | + if (substr($url, 0, 4)!='http') return false; |
|
408 | 408 | |
409 | 409 | $vars = json_encode( |
410 | 410 | array( |
@@ -415,14 +415,14 @@ discard block |
||
415 | 415 | ) |
416 | 416 | ); |
417 | 417 | $err = true; |
418 | - try{ |
|
418 | + try { |
|
419 | 419 | $ch = curl_init(); |
420 | - curl_setopt($ch,CURLOPT_URL,$url); |
|
421 | - curl_setopt($ch,CURLOPT_POST,true); |
|
422 | - curl_setopt($ch,CURLOPT_FAILONERROR,true); |
|
423 | - curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); |
|
424 | - curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); |
|
425 | - curl_setopt($ch,CURLOPT_HTTPHEADER, array('Content-Type: application/json')); |
|
420 | + curl_setopt($ch, CURLOPT_URL, $url); |
|
421 | + curl_setopt($ch, CURLOPT_POST, true); |
|
422 | + curl_setopt($ch, CURLOPT_FAILONERROR, true); |
|
423 | + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
|
424 | + curl_setopt($ch, CURLOPT_POSTFIELDS, $vars); |
|
425 | + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); |
|
426 | 426 | curl_exec($ch); |
427 | 427 | if (curl_errno($ch)) $err = false; |
428 | 428 | } catch (Exception $e) { |
@@ -431,7 +431,7 @@ discard block |
||
431 | 431 | return $err; |
432 | 432 | } |
433 | 433 | |
434 | - public static function isValidEmail($emailAddress){ |
|
434 | + public static function isValidEmail($emailAddress) { |
|
435 | 435 | if (filter_var($emailAddress, FILTER_VALIDATE_EMAIL)) { |
436 | 436 | return true; |
437 | 437 | } |
@@ -442,36 +442,36 @@ discard block |
||
442 | 442 | $text, |
443 | 443 | $beginText, |
444 | 444 | $endText, |
445 | - $removeSpace=true, |
|
446 | - $removeHtmlTags=true, |
|
447 | - $firstResultOnlyNoArray=false) { |
|
445 | + $removeSpace = true, |
|
446 | + $removeHtmlTags = true, |
|
447 | + $firstResultOnlyNoArray = false) { |
|
448 | 448 | $results = array(); |
449 | 449 | $endPos = 0; |
450 | - while(true) { |
|
450 | + while (true) { |
|
451 | 451 | $beginPos = stripos($text, $beginText, $endPos); |
452 | - if($beginPos===false) break; |
|
452 | + if ($beginPos===false) break; |
|
453 | 453 | $beginPos = $beginPos+strlen($beginText); |
454 | 454 | $endPos = stripos($text, $endText, $beginPos); |
455 | - if($endPos===false) break; |
|
455 | + if ($endPos===false) break; |
|
456 | 456 | $result = substr($text, $beginPos, $endPos-$beginPos); |
457 | - if($removeSpace){ |
|
458 | - $result = str_replace("\t","",$result); |
|
459 | - $result = str_replace("\n","",$result); |
|
460 | - $result = preg_replace("/ /"," ",$result); |
|
461 | - $result = preg_replace("~[\s]{2}?[\t]?~i"," ",$result); |
|
462 | - $result = str_replace(" "," ",$result); |
|
457 | + if ($removeSpace) { |
|
458 | + $result = str_replace("\t", "", $result); |
|
459 | + $result = str_replace("\n", "", $result); |
|
460 | + $result = preg_replace("/ /", " ", $result); |
|
461 | + $result = preg_replace("~[\s]{2}?[\t]?~i", " ", $result); |
|
462 | + $result = str_replace(" ", " ", $result); |
|
463 | 463 | $result = trim($result); |
464 | 464 | } |
465 | - if($removeHtmlTags){ |
|
465 | + if ($removeHtmlTags) { |
|
466 | 466 | $result = strip_tags($result); |
467 | 467 | } |
468 | - if($firstResultOnlyNoArray) return $result; |
|
469 | - if($result != '') $results[] = $result; |
|
468 | + if ($firstResultOnlyNoArray) return $result; |
|
469 | + if ($result!='') $results[] = $result; |
|
470 | 470 | } |
471 | 471 | return ($firstResultOnlyNoArray && empty($results) ? '' : $results); |
472 | 472 | } |
473 | 473 | |
474 | - public static function getNextMonitor($mysql){ |
|
474 | + public static function getNextMonitor($mysql) { |
|
475 | 475 | $ipDomain = $mysql->runQueryReturnVar("select ipDomain from monitors where beenChecked = 0"); |
476 | 476 | $mysql->runQuery("update monitors set beenChecked = 1 where ipDomain = '".$mysql->escape($ipDomain)."'"); |
477 | 477 | return $ipDomain; |
@@ -480,49 +480,49 @@ discard block |
||
480 | 480 | public static function getHostChangeCount($mysql, $monitorGroupId = 0) { |
481 | 481 | $sql = ''; |
482 | 482 | $monitorGroupId = (int)$monitorGroupId; |
483 | - if($monitorGroupId > 0) $sql = " and monitorGroupId = $monitorGroupId"; |
|
483 | + if ($monitorGroupId > 0) $sql = " and monitorGroupId = $monitorGroupId"; |
|
484 | 484 | return $mysql->runQueryReturnVar("select COALESCE(count(ipDomain),0) as cnt from monitors where lastStatusChanged = 1 $sql"); |
485 | 485 | } |
486 | 486 | |
487 | 487 | public static function getHostErrorCount($mysql, $monitorGroupId = 0, $onlyNew = false) { |
488 | 488 | $sql = ''; |
489 | 489 | $monitorGroupId = (int)$monitorGroupId; |
490 | - if($monitorGroupId > 0) $sql = " and monitorGroupId = $monitorGroupId"; |
|
491 | - if($onlyNew) $sql .= " and lastStatusChanged = 1 "; |
|
490 | + if ($monitorGroupId > 0) $sql = " and monitorGroupId = $monitorGroupId"; |
|
491 | + if ($onlyNew) $sql .= " and lastStatusChanged = 1 "; |
|
492 | 492 | return $mysql->runQueryReturnVar("select COALESCE(count(ipDomain),0) as cnt from monitors where isBlocked = 1 $sql"); |
493 | 493 | } |
494 | 494 | |
495 | 495 | public static function getHostCleanCount($mysql, $monitorGroupId = 0, $onlyNew = false) { |
496 | 496 | $sql = ''; |
497 | 497 | $monitorGroupId = (int)$monitorGroupId; |
498 | - if($monitorGroupId > 0) $sql = " and monitorGroupId = $monitorGroupId"; |
|
499 | - if($onlyNew) $sql .= " and lastStatusChanged = 1 "; |
|
498 | + if ($monitorGroupId > 0) $sql = " and monitorGroupId = $monitorGroupId"; |
|
499 | + if ($onlyNew) $sql .= " and lastStatusChanged = 1 "; |
|
500 | 500 | return $mysql->runQueryReturnVar("select COALESCE(count(ipDomain),0) as cnt from monitors where isBlocked = 0 $sql"); |
501 | 501 | } |
502 | 502 | |
503 | 503 | public static function getHostCount($mysql, $monitorGroupId = 0) { |
504 | 504 | $sql = ''; |
505 | 505 | $monitorGroupId = (int)$monitorGroupId; |
506 | - if($monitorGroupId > 0) $sql = " where monitorGroupId = $monitorGroupId"; |
|
506 | + if ($monitorGroupId > 0) $sql = " where monitorGroupId = $monitorGroupId"; |
|
507 | 507 | return $mysql->runQueryReturnVar("select COALESCE(count(ipDomain),0) as cnt from monitors $sql"); |
508 | 508 | } |
509 | 509 | |
510 | 510 | //CREDIT: http://braincrafted.com/php-background-processes/ |
511 | - public static function is_process_running($pid){ |
|
511 | + public static function is_process_running($pid) { |
|
512 | 512 | $pid = (int)$pid; |
513 | - if($pid == 0) return false; |
|
514 | - if(file_exists('/proc/'.$pid)){ |
|
513 | + if ($pid==0) return false; |
|
514 | + if (file_exists('/proc/'.$pid)) { |
|
515 | 515 | return true; |
516 | - }else{ |
|
516 | + }else { |
|
517 | 517 | return false; |
518 | 518 | } |
519 | 519 | } |
520 | 520 | |
521 | 521 | public static function run_in_background($command, $priority = 0) { |
522 | 522 | $log = Setup::$settings['log_path']; |
523 | - if($priority !=0){ |
|
523 | + if ($priority!=0) { |
|
524 | 524 | $pid = shell_exec("nohup nice -n $priority $command >> $log 2>&1 & echo $!"); |
525 | - }else{ |
|
525 | + }else { |
|
526 | 526 | $pid = shell_exec("nohup $command >> $log 2>&1 & echo $!"); |
527 | 527 | } |
528 | 528 | return($pid); |
@@ -5,7 +5,7 @@ discard block |
||
5 | 5 | class_exists('_MySQL', false) or include('classes/_MySQL.class.php'); |
6 | 6 | class_exists('PHPMailer', false) or include('classes/class.phpmailer.php'); |
7 | 7 | |
8 | -if(Utilities::isLoggedIn()===false){ |
|
8 | +if (Utilities::isLoggedIn()===false) { |
|
9 | 9 | header('Location: login.php'); |
10 | 10 | exit(); |
11 | 11 | } |
@@ -13,17 +13,17 @@ discard block |
||
13 | 13 | $titlePreFix = "account"; |
14 | 14 | $message = array(); |
15 | 15 | |
16 | -$username = array_key_exists('username', $_POST) ? substr(trim($_POST['username']),0,100) : ''; |
|
17 | -$noticeEmailAddresses = array_key_exists('noticeEmailAddresses', $_POST) ? substr($_POST['noticeEmailAddresses'],0,8000) : ''; |
|
18 | -$textMessageEmails = array_key_exists('textMessageEmails', $_POST) ? substr($_POST['textMessageEmails'],0,8000) : ''; |
|
19 | -$passwd = array_key_exists('passwd', $_POST) ? substr($_POST['passwd'],0,32) : ''; |
|
20 | -$passwdOld = array_key_exists('passwdOld', $_POST) ? substr($_POST['passwdOld'],0,32) : ''; |
|
21 | -$apiKey = array_key_exists('apiKey', $_POST) ? substr($_POST['apiKey'],0,32) : ''; |
|
16 | +$username = array_key_exists('username', $_POST) ? substr(trim($_POST['username']), 0, 100) : ''; |
|
17 | +$noticeEmailAddresses = array_key_exists('noticeEmailAddresses', $_POST) ? substr($_POST['noticeEmailAddresses'], 0, 8000) : ''; |
|
18 | +$textMessageEmails = array_key_exists('textMessageEmails', $_POST) ? substr($_POST['textMessageEmails'], 0, 8000) : ''; |
|
19 | +$passwd = array_key_exists('passwd', $_POST) ? substr($_POST['passwd'], 0, 32) : ''; |
|
20 | +$passwdOld = array_key_exists('passwdOld', $_POST) ? substr($_POST['passwdOld'], 0, 32) : ''; |
|
21 | +$apiKey = array_key_exists('apiKey', $_POST) ? substr($_POST['apiKey'], 0, 32) : ''; |
|
22 | 22 | $disableEmailNotices = array_key_exists('disableEmailNotices', $_POST) ? (int)$_POST['disableEmailNotices'] : 0; |
23 | 23 | $beenChecked = array_key_exists('beenChecked', $_POST) ? (int)$_POST['beenChecked'] : 0; |
24 | -$twitterHandle = array_key_exists('twitterHandle', $_POST) ? substr(trim($_POST['twitterHandle']),0,15) : ''; |
|
25 | -$twitterHandle = str_replace('@','',$twitterHandle); |
|
26 | -$apiCallbackURL = array_key_exists('apiCallbackURL', $_POST) ? substr(trim($_POST['apiCallbackURL']),0,2000) : ''; |
|
24 | +$twitterHandle = array_key_exists('twitterHandle', $_POST) ? substr(trim($_POST['twitterHandle']), 0, 15) : ''; |
|
25 | +$twitterHandle = str_replace('@', '', $twitterHandle); |
|
26 | +$apiCallbackURL = array_key_exists('apiCallbackURL', $_POST) ? substr(trim($_POST['apiCallbackURL']), 0, 2000) : ''; |
|
27 | 27 | $testUrl = array_key_exists('testUrl', $_GET) ? $_GET['testUrl'] : ''; |
28 | 28 | |
29 | 29 | $mysql = new _MySQL(); |
@@ -32,40 +32,40 @@ discard block |
||
32 | 32 | // audit check frequency |
33 | 33 | $checkFrequency = array_key_exists('checkFrequency', $_POST) ? $_POST['checkFrequency'] : ''; |
34 | 34 | |
35 | -if($testUrl!=''){ |
|
36 | - if(Utilities::testAPICallback($testUrl)){ |
|
35 | +if ($testUrl!='') { |
|
36 | + if (Utilities::testAPICallback($testUrl)) { |
|
37 | 37 | echo('true'); |
38 | - }else{ |
|
38 | + }else { |
|
39 | 39 | echo('false'); |
40 | 40 | } |
41 | 41 | exit(); |
42 | 42 | } |
43 | 43 | |
44 | 44 | if (isset($_POST["submit"])) { |
45 | - if($passwd=='') $message[] = 'You must select a password.'; |
|
45 | + if ($passwd=='') $message[] = 'You must select a password.'; |
|
46 | 46 | |
47 | - if($passwdOld != $passwd){ |
|
47 | + if ($passwdOld!=$passwd) { |
|
48 | 48 | $passwdOld = md5($passwd); |
49 | 49 | } |
50 | 50 | |
51 | - $ta = explode("\n",$noticeEmailAddresses); |
|
51 | + $ta = explode("\n", $noticeEmailAddresses); |
|
52 | 52 | $noticeEmailAddresses = ""; |
53 | - foreach($ta as $e){ |
|
53 | + foreach ($ta as $e) { |
|
54 | 54 | $e = trim($e); |
55 | - if(Utilities::isValidEmail($e)){ |
|
55 | + if (Utilities::isValidEmail($e)) { |
|
56 | 56 | $noticeEmailAddresses .= "$e\n"; |
57 | 57 | } |
58 | 58 | } |
59 | - $ta = explode("\n",$textMessageEmails); |
|
59 | + $ta = explode("\n", $textMessageEmails); |
|
60 | 60 | $textMessageEmails = ""; |
61 | - foreach($ta as $e){ |
|
61 | + foreach ($ta as $e) { |
|
62 | 62 | $e = trim($e); |
63 | - if(Utilities::isValidEmail($e)){ |
|
63 | + if (Utilities::isValidEmail($e)) { |
|
64 | 64 | $textMessageEmails .= "$e\n"; |
65 | 65 | } |
66 | 66 | } |
67 | 67 | //TODO: make sure blacklists are domains with an ip address on them |
68 | - if(count($message) == 0){ |
|
68 | + if (count($message)==0) { |
|
69 | 69 | //update |
70 | 70 | $mysql->runQuery(" |
71 | 71 | update users set username = '".$mysql->escape($username)."', |
@@ -81,11 +81,11 @@ discard block |
||
81 | 81 | checkFrequency = '".$mysql->escape($checkFrequency)."', |
82 | 82 | disableEmailNotices = $disableEmailNotices |
83 | 83 | "); |
84 | - if($beenChecked==1){ |
|
84 | + if ($beenChecked==1) { |
|
85 | 85 | $mysql->runQuery("update users set beenChecked = 0"); |
86 | 86 | $message[] = "Check scheduled."; |
87 | 87 | } |
88 | - if($twitterHandle!=''){ |
|
88 | + if ($twitterHandle!='') { |
|
89 | 89 | $t = new Twitter(); |
90 | 90 | $t->follow($twitterHandle); |
91 | 91 | } |
@@ -93,7 +93,7 @@ discard block |
||
93 | 93 | } |
94 | 94 | } |
95 | 95 | $user = Utilities::getAccount(); |
96 | -if(!$user){ |
|
96 | +if (!$user) { |
|
97 | 97 | //invalid account |
98 | 98 | echo("<script>window.location='login.php?logout=1';</script>"); |
99 | 99 | exit(); |
@@ -106,8 +106,8 @@ discard block |
||
106 | 106 | <div class="row"> |
107 | 107 | <div class="col-md-3"> |
108 | 108 | <ul class="nav nav-pills nav-stacked"> |
109 | - <li>Hosts Total <span class="badge pull-right"><?php echo(number_format(Utilities::getHostCount($mysql)));?></span></li> |
|
110 | - <li>Hosts Blocked <span class="badge pull-right"><?php echo(number_format(Utilities::getHostErrorCount($mysql)));?></span></li> |
|
109 | + <li>Hosts Total <span class="badge pull-right"><?php echo(number_format(Utilities::getHostCount($mysql))); ?></span></li> |
|
110 | + <li>Hosts Blocked <span class="badge pull-right"><?php echo(number_format(Utilities::getHostErrorCount($mysql))); ?></span></li> |
|
111 | 111 | </ul> |
112 | 112 | </div> |
113 | 113 | </div> |
@@ -136,7 +136,7 @@ discard block |
||
136 | 136 | </script> |
137 | 137 | |
138 | 138 | <?php |
139 | -foreach($message as $m){ |
|
139 | +foreach ($message as $m) { |
|
140 | 140 | echo("<div class=\"alert alert-info alert-dismissable\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>$m</div>"); |
141 | 141 | } |
142 | 142 | ?> |
@@ -145,30 +145,30 @@ discard block |
||
145 | 145 | <div class="form-group"> |
146 | 146 | <label class="col-sm-3 control-label" for="username">Login Username</label> |
147 | 147 | <div class="col-sm-6"> |
148 | - <input class="form-control" type="text" id="username" name="username" value="<?php echo($user['username']);?>" placeholder="username"> |
|
148 | + <input class="form-control" type="text" id="username" name="username" value="<?php echo($user['username']); ?>" placeholder="username"> |
|
149 | 149 | </div> |
150 | 150 | </div> |
151 | 151 | <div class="form-group"> |
152 | 152 | <label class="col-sm-3 control-label" for="passwd">Password</label> |
153 | 153 | <div class="col-sm-6"> |
154 | - <input class="form-control" type="password" name="passwd" id="passwd" value="<?php echo($user['passwd']);?>" class="form-control" placeholder="Password"> |
|
154 | + <input class="form-control" type="password" name="passwd" id="passwd" value="<?php echo($user['passwd']); ?>" class="form-control" placeholder="Password"> |
|
155 | 155 | </div> |
156 | 156 | </div> |
157 | 157 | <div class="form-group"> |
158 | 158 | <label class="col-sm-3 control-label" for="apiKey">API Key</label> |
159 | 159 | <div class="col-sm-6"> |
160 | - <input class="form-control" maxlength="32" type="text" id="apiKey" name="apiKey" value="<?php echo($user['apiKey']);?>" placeholder="api key"> |
|
160 | + <input class="form-control" maxlength="32" type="text" id="apiKey" name="apiKey" value="<?php echo($user['apiKey']); ?>" placeholder="api key"> |
|
161 | 161 | </div> |
162 | 162 | </div> |
163 | 163 | <div class="form-group"> |
164 | 164 | <label class="col-sm-3 control-label" for="checkFrequency">Check Frequency</label> |
165 | 165 | <div class="col-sm-6"> |
166 | 166 | <select id="checkFrequency" name="checkFrequency" class="form-control"> |
167 | - <option value="weekly"<?php if($user['checkFrequency']=='weekly') echo ' selected'?>>Weekly</option> |
|
168 | - <option value="daily"<?php if($user['checkFrequency']=='daily') echo ' selected'?>>Daily</option> |
|
169 | - <option value="8hour"<?php if($user['checkFrequency']=='8hour') echo ' selected'?>>Every 8 Hours</option> |
|
170 | - <option value="2hour"<?php if($user['checkFrequency']=='2hour') echo ' selected'?>>Every 2 Hours</option> |
|
171 | - <option value="1hour"<?php if($user['checkFrequency']=='1hour') echo ' selected'?>>Hourly</option> |
|
167 | + <option value="weekly"<?php if ($user['checkFrequency']=='weekly') echo ' selected'?>>Weekly</option> |
|
168 | + <option value="daily"<?php if ($user['checkFrequency']=='daily') echo ' selected'?>>Daily</option> |
|
169 | + <option value="8hour"<?php if ($user['checkFrequency']=='8hour') echo ' selected'?>>Every 8 Hours</option> |
|
170 | + <option value="2hour"<?php if ($user['checkFrequency']=='2hour') echo ' selected'?>>Every 2 Hours</option> |
|
171 | + <option value="1hour"<?php if ($user['checkFrequency']=='1hour') echo ' selected'?>>Hourly</option> |
|
172 | 172 | </select> |
173 | 173 | </div> |
174 | 174 | </div> |
@@ -190,7 +190,7 @@ discard block |
||
190 | 190 | <div class="col-sm-6"> |
191 | 191 | <div class="input-group"> |
192 | 192 | <span class="input-group-addon">@</span> |
193 | - <input class="form-control" type="text" id="twitterHandle" name="twitterHandle" value="<?php echo($user['twitterHandle']);?>" placeholder="twitter username"> |
|
193 | + <input class="form-control" type="text" id="twitterHandle" name="twitterHandle" value="<?php echo($user['twitterHandle']); ?>" placeholder="twitter username"> |
|
194 | 194 | </div> |
195 | 195 | </div> |
196 | 196 | </div> |
@@ -200,7 +200,7 @@ discard block |
||
200 | 200 | </label> |
201 | 201 | <div class="col-sm-6"> |
202 | 202 | <div class="input-group"> |
203 | - <input class="form-control" type="text" id="apiCallbackURL" name="apiCallbackURL" value="<?php echo($user['apiCallbackURL']);?>" placeholder="api callback url"> |
|
203 | + <input class="form-control" type="text" id="apiCallbackURL" name="apiCallbackURL" value="<?php echo($user['apiCallbackURL']); ?>" placeholder="api callback url"> |
|
204 | 204 | <span class="input-group-btn"> |
205 | 205 | <button class="btn btn-default" type="button" onclick="testAPIUrl()">Test Callback</button> |
206 | 206 | </span> |
@@ -209,7 +209,7 @@ discard block |
||
209 | 209 | </div> |
210 | 210 | </div> |
211 | 211 | <div class="form-group"> |
212 | - <label class="col-sm-3 control-label" for="disableEmailNotices"><input type="checkbox" id="disableEmailNotices" name="disableEmailNotices" value="1" class="input-block-level" <?php if($user['disableEmailNotices']==1) echo(' checked');?>></label> |
|
212 | + <label class="col-sm-3 control-label" for="disableEmailNotices"><input type="checkbox" id="disableEmailNotices" name="disableEmailNotices" value="1" class="input-block-level" <?php if ($user['disableEmailNotices']==1) echo(' checked'); ?>></label> |
|
213 | 213 | <div class="col-sm-6"> |
214 | 214 | Disable Notices<br/><small>You can pause receiving email/text alerts when your status changes. Useful if you have a frequently changing network. This does not pause api call backs.</small> |
215 | 215 | </div> |
@@ -225,7 +225,7 @@ discard block |
||
225 | 225 | <button type="submit" name="submit" value="submit" class="btn btn-primary">Save changes</button> |
226 | 226 | </div> |
227 | 227 | </div> |
228 | - <input type="hidden" value="<?php echo($user['passwd']);?>" name="passwdOld"/> |
|
228 | + <input type="hidden" value="<?php echo($user['passwd']); ?>" name="passwdOld"/> |
|
229 | 229 | </form> |
230 | 230 | |
231 | 231 | <br/><br/><br/><br/> |
@@ -35,14 +35,16 @@ discard block |
||
35 | 35 | if($testUrl!=''){ |
36 | 36 | if(Utilities::testAPICallback($testUrl)){ |
37 | 37 | echo('true'); |
38 | - }else{ |
|
38 | + } else{ |
|
39 | 39 | echo('false'); |
40 | 40 | } |
41 | 41 | exit(); |
42 | 42 | } |
43 | 43 | |
44 | 44 | if (isset($_POST["submit"])) { |
45 | - if($passwd=='') $message[] = 'You must select a password.'; |
|
45 | + if($passwd=='') { |
|
46 | + $message[] = 'You must select a password.'; |
|
47 | + } |
|
46 | 48 | |
47 | 49 | if($passwdOld != $passwd){ |
48 | 50 | $passwdOld = md5($passwd); |
@@ -164,7 +166,8 @@ discard block |
||
164 | 166 | <label class="col-sm-3 control-label" for="checkFrequency">Check Frequency</label> |
165 | 167 | <div class="col-sm-6"> |
166 | 168 | <select id="checkFrequency" name="checkFrequency" class="form-control"> |
167 | - <option value="weekly"<?php if($user['checkFrequency']=='weekly') echo ' selected'?>>Weekly</option> |
|
169 | + <option value="weekly"<?php if($user['checkFrequency']=='weekly') { |
|
170 | + echo ' selected'?>>Weekly</option> |
|
168 | 171 | <option value="daily"<?php if($user['checkFrequency']=='daily') echo ' selected'?>>Daily</option> |
169 | 172 | <option value="8hour"<?php if($user['checkFrequency']=='8hour') echo ' selected'?>>Every 8 Hours</option> |
170 | 173 | <option value="2hour"<?php if($user['checkFrequency']=='2hour') echo ' selected'?>>Every 2 Hours</option> |
@@ -190,7 +193,9 @@ discard block |
||
190 | 193 | <div class="col-sm-6"> |
191 | 194 | <div class="input-group"> |
192 | 195 | <span class="input-group-addon">@</span> |
193 | - <input class="form-control" type="text" id="twitterHandle" name="twitterHandle" value="<?php echo($user['twitterHandle']);?>" placeholder="twitter username"> |
|
196 | + <input class="form-control" type="text" id="twitterHandle" name="twitterHandle" value="<?php echo($user['twitterHandle']); |
|
197 | +} |
|
198 | +?>" placeholder="twitter username"> |
|
194 | 199 | </div> |
195 | 200 | </div> |
196 | 201 | </div> |
@@ -209,7 +214,10 @@ discard block |
||
209 | 214 | </div> |
210 | 215 | </div> |
211 | 216 | <div class="form-group"> |
212 | - <label class="col-sm-3 control-label" for="disableEmailNotices"><input type="checkbox" id="disableEmailNotices" name="disableEmailNotices" value="1" class="input-block-level" <?php if($user['disableEmailNotices']==1) echo(' checked');?>></label> |
|
217 | + <label class="col-sm-3 control-label" for="disableEmailNotices"><input type="checkbox" id="disableEmailNotices" name="disableEmailNotices" value="1" class="input-block-level" <?php if($user['disableEmailNotices']==1) { |
|
218 | + echo(' checked'); |
|
219 | +} |
|
220 | +?>></label> |
|
213 | 221 | <div class="col-sm-6"> |
214 | 222 | Disable Notices<br/><small>You can pause receiving email/text alerts when your status changes. Useful if you have a frequently changing network. This does not pause api call backs.</small> |
215 | 223 | </div> |
@@ -1,8 +1,8 @@ |
||
1 | 1 | <div id="accountSubnav"> |
2 | 2 | <ul class="nav nav-tabs"> |
3 | - <li <?php if($pageName=='account.php') echo('class="active"');?>><a href="account.php">Profile</a></li> |
|
4 | - <li <?php if($pageName=='monitorGroup.php') echo('class="active"');?>><a href="monitorGroup.php">Monitor Groups</a></li> |
|
5 | - <li <?php if($pageName=='blockLists.php') echo('class="active"');?>><a href="blockLists.php">Block Lists</a></li> |
|
6 | - <li <?php if($pageName=='apiDocumentation.php') echo('class="active"');?>><a href="apiDocumentation.php">API Documentation</a></li> |
|
3 | + <li <?php if ($pageName=='account.php') echo('class="active"'); ?>><a href="account.php">Profile</a></li> |
|
4 | + <li <?php if ($pageName=='monitorGroup.php') echo('class="active"'); ?>><a href="monitorGroup.php">Monitor Groups</a></li> |
|
5 | + <li <?php if ($pageName=='blockLists.php') echo('class="active"'); ?>><a href="blockLists.php">Block Lists</a></li> |
|
6 | + <li <?php if ($pageName=='apiDocumentation.php') echo('class="active"'); ?>><a href="apiDocumentation.php">API Documentation</a></li> |
|
7 | 7 | </ul> |
8 | 8 | </div> |
9 | 9 | \ No newline at end of file |
@@ -1,8 +1,20 @@ |
||
1 | 1 | <div id="accountSubnav"> |
2 | 2 | <ul class="nav nav-tabs"> |
3 | - <li <?php if($pageName=='account.php') echo('class="active"');?>><a href="account.php">Profile</a></li> |
|
4 | - <li <?php if($pageName=='monitorGroup.php') echo('class="active"');?>><a href="monitorGroup.php">Monitor Groups</a></li> |
|
5 | - <li <?php if($pageName=='blockLists.php') echo('class="active"');?>><a href="blockLists.php">Block Lists</a></li> |
|
6 | - <li <?php if($pageName=='apiDocumentation.php') echo('class="active"');?>><a href="apiDocumentation.php">API Documentation</a></li> |
|
3 | + <li <?php if($pageName=='account.php') { |
|
4 | + echo('class="active"'); |
|
5 | +} |
|
6 | +?>><a href="account.php">Profile</a></li> |
|
7 | + <li <?php if($pageName=='monitorGroup.php') { |
|
8 | + echo('class="active"'); |
|
9 | +} |
|
10 | +?>><a href="monitorGroup.php">Monitor Groups</a></li> |
|
11 | + <li <?php if($pageName=='blockLists.php') { |
|
12 | + echo('class="active"'); |
|
13 | +} |
|
14 | +?>><a href="blockLists.php">Block Lists</a></li> |
|
15 | + <li <?php if($pageName=='apiDocumentation.php') { |
|
16 | + echo('class="active"'); |
|
17 | +} |
|
18 | +?>><a href="apiDocumentation.php">API Documentation</a></li> |
|
7 | 19 | </ul> |
8 | 20 | </div> |
9 | 21 | \ No newline at end of file |
@@ -24,51 +24,51 @@ discard block |
||
24 | 24 | } |
25 | 25 | |
26 | 26 | switch($type){ |
27 | - case 'updateDomains': |
|
28 | - if($groupName=='') { |
|
29 | - $result['status'] = 'groupName is required'; |
|
27 | + case 'updateDomains': |
|
28 | + if($groupName=='') { |
|
29 | + $result['status'] = 'groupName is required'; |
|
30 | + break; |
|
31 | + } |
|
32 | + $id = Utilities::ensureGroupExists($groupName); |
|
33 | + Utilities::updateDomains($data, $id); |
|
34 | + $result['status'] = 'success'; |
|
30 | 35 | break; |
31 | - } |
|
32 | - $id = Utilities::ensureGroupExists($groupName); |
|
33 | - Utilities::updateDomains($data, $id); |
|
34 | - $result['status'] = 'success'; |
|
35 | - break; |
|
36 | 36 | |
37 | - case 'updateIPs': |
|
38 | - if($groupName=='') { |
|
39 | - $result['status'] = 'groupName is required'; |
|
37 | + case 'updateIPs': |
|
38 | + if($groupName=='') { |
|
39 | + $result['status'] = 'groupName is required'; |
|
40 | + break; |
|
41 | + } |
|
42 | + $id = Utilities::ensureGroupExists($groupName); |
|
43 | + Utilities::updateIPs($data, $id); |
|
44 | + $result['status'] = 'success'; |
|
40 | 45 | break; |
41 | - } |
|
42 | - $id = Utilities::ensureGroupExists($groupName); |
|
43 | - Utilities::updateIPs($data, $id); |
|
44 | - $result['status'] = 'success'; |
|
45 | - break; |
|
46 | 46 | |
47 | - case 'checkHostStatus': |
|
48 | - $result['status'] = 'success'; |
|
49 | - Utilities::setBlockLists(); |
|
50 | - $result['result'] = Utilities::checkBlacklists($data); |
|
51 | - break; |
|
47 | + case 'checkHostStatus': |
|
48 | + $result['status'] = 'success'; |
|
49 | + Utilities::setBlockLists(); |
|
50 | + $result['result'] = Utilities::checkBlacklists($data); |
|
51 | + break; |
|
52 | 52 | |
53 | - case 'clearAllHostAndGroupData': |
|
54 | - $mysql = new _MySQL(); |
|
55 | - $mysql->connect(Setup::$connectionArray); |
|
56 | - $mysql->runQuery("truncate table monitors"); |
|
57 | - $mysql->runQuery("truncate table monitorGroup"); |
|
58 | - $result['status'] = 'success'; |
|
59 | - break; |
|
53 | + case 'clearAllHostAndGroupData': |
|
54 | + $mysql = new _MySQL(); |
|
55 | + $mysql->connect(Setup::$connectionArray); |
|
56 | + $mysql->runQuery("truncate table monitors"); |
|
57 | + $mysql->runQuery("truncate table monitorGroup"); |
|
58 | + $result['status'] = 'success'; |
|
59 | + break; |
|
60 | 60 | |
61 | - case 'blacklistStatus': |
|
62 | - $localCache = new _FileCache('blacklistmonitor-api', 90); |
|
63 | - $cacheKey = md5("$username|$passwd|$apiKey|$type|$data"); |
|
64 | - $cacheData = $localCache->get($cacheKey); |
|
65 | - if ($cacheData !== false) { |
|
66 | - output($cacheData); |
|
67 | - } |
|
68 | - $mysql = new _MySQL(); |
|
69 | - $mysql->connect(Setup::$connectionArray); |
|
70 | - $searchSQL = ''; |
|
71 | - switch($data){ |
|
61 | + case 'blacklistStatus': |
|
62 | + $localCache = new _FileCache('blacklistmonitor-api', 90); |
|
63 | + $cacheKey = md5("$username|$passwd|$apiKey|$type|$data"); |
|
64 | + $cacheData = $localCache->get($cacheKey); |
|
65 | + if ($cacheData !== false) { |
|
66 | + output($cacheData); |
|
67 | + } |
|
68 | + $mysql = new _MySQL(); |
|
69 | + $mysql->connect(Setup::$connectionArray); |
|
70 | + $searchSQL = ''; |
|
71 | + switch($data){ |
|
72 | 72 | case 'changed': |
73 | 73 | $searchSQL .= " and lastStatusChanged = 1 "; |
74 | 74 | break; |
@@ -79,7 +79,7 @@ discard block |
||
79 | 79 | break; |
80 | 80 | case 'all': |
81 | 81 | default: |
82 | - } |
|
82 | + } |
|
83 | 83 | |
84 | 84 | $rs = $mysql->runQuery(" |
85 | 85 | select ipDomain,isBlocked,rDNS,status,lastStatusChangeTime,lastUpdate |
@@ -101,8 +101,8 @@ discard block |
||
101 | 101 | $localCache->set($cacheKey, $result); |
102 | 102 | break; |
103 | 103 | |
104 | - default: |
|
105 | - $result['status'] = 'no such method'; |
|
104 | + default: |
|
105 | + $result['status'] = 'no such method'; |
|
106 | 106 | } |
107 | 107 | |
108 | 108 | output(); |
@@ -42,7 +42,7 @@ |
||
42 | 42 | domains = '".$mysql->escape($domains)."' |
43 | 43 | where id = $id |
44 | 44 | "); |
45 | - }else{ |
|
45 | + } else{ |
|
46 | 46 | $mysql->runQuery(" |
47 | 47 | insert into monitorGroup set groupName = '".$mysql->escape($groupName)."', |
48 | 48 | ips = '".$mysql->escape($ips)."', |
@@ -18,14 +18,14 @@ discard block |
||
18 | 18 | ); |
19 | 19 | |
20 | 20 | $id = Utilities::validateLogin($username, $passwd, true, $apiKey); |
21 | -if($id == 0) { |
|
21 | +if ($id==0) { |
|
22 | 22 | $result['status'] = 'invalid login'; |
23 | 23 | output(); |
24 | 24 | } |
25 | 25 | |
26 | -switch($type){ |
|
26 | +switch ($type) { |
|
27 | 27 | case 'updateDomains': |
28 | - if($groupName=='') { |
|
28 | + if ($groupName=='') { |
|
29 | 29 | $result['status'] = 'groupName is required'; |
30 | 30 | break; |
31 | 31 | } |
@@ -35,7 +35,7 @@ discard block |
||
35 | 35 | break; |
36 | 36 | |
37 | 37 | case 'updateIPs': |
38 | - if($groupName=='') { |
|
38 | + if ($groupName=='') { |
|
39 | 39 | $result['status'] = 'groupName is required'; |
40 | 40 | break; |
41 | 41 | } |
@@ -62,13 +62,13 @@ discard block |
||
62 | 62 | $localCache = new _FileCache('blacklistmonitor-api', 90); |
63 | 63 | $cacheKey = md5("$username|$passwd|$apiKey|$type|$data"); |
64 | 64 | $cacheData = $localCache->get($cacheKey); |
65 | - if ($cacheData !== false) { |
|
65 | + if ($cacheData!==false) { |
|
66 | 66 | output($cacheData); |
67 | 67 | } |
68 | 68 | $mysql = new _MySQL(); |
69 | 69 | $mysql->connect(Setup::$connectionArray); |
70 | 70 | $searchSQL = ''; |
71 | - switch($data){ |
|
71 | + switch ($data) { |
|
72 | 72 | case 'changed': |
73 | 73 | $searchSQL .= " and lastStatusChanged = 1 "; |
74 | 74 | break; |
@@ -87,7 +87,7 @@ discard block |
||
87 | 87 | where 1=1 $searchSQL"); |
88 | 88 | $result['status'] = 'success'; |
89 | 89 | $result['result'] = array(); |
90 | - while($row = mysqli_fetch_array($rs)){ |
|
90 | + while ($row = mysqli_fetch_array($rs)) { |
|
91 | 91 | $result['result'][] = array( |
92 | 92 | 'host'=>$row['ipDomain'], |
93 | 93 | 'isBlocked'=>$row['isBlocked'], |
@@ -107,11 +107,11 @@ discard block |
||
107 | 107 | |
108 | 108 | output(); |
109 | 109 | |
110 | -function output($data = false){ |
|
110 | +function output($data = false) { |
|
111 | 111 | global $result; |
112 | - if($data!==false){ |
|
112 | + if ($data!==false) { |
|
113 | 113 | echo(json_encode($data)); |
114 | - }else{ |
|
114 | + }else { |
|
115 | 115 | echo(json_encode($result)); |
116 | 116 | } |
117 | 117 | exit(); |
@@ -2,7 +2,7 @@ discard block |
||
2 | 2 | class_exists('Setup', false) or include('classes/Setup.class.php'); |
3 | 3 | class_exists('Utilities', false) or include('classes/Utilities.class.php'); |
4 | 4 | |
5 | -if(Utilities::isLoggedIn()===false){ |
|
5 | +if (Utilities::isLoggedIn()===false) { |
|
6 | 6 | header('Location: login.php'); |
7 | 7 | exit(); |
8 | 8 | } |
@@ -28,7 +28,7 @@ discard block |
||
28 | 28 | </tr> |
29 | 29 | <tr> |
30 | 30 | <td>apiKey</td> |
31 | - <td>Your api key: <?php echo $user['apiKey'];?></td> |
|
31 | + <td>Your api key: <?php echo $user['apiKey']; ?></td> |
|
32 | 32 | </tr> |
33 | 33 | <tr> |
34 | 34 | <td>type</td> |
@@ -65,7 +65,7 @@ discard block |
||
65 | 65 | <br/> |
66 | 66 | <pre> |
67 | 67 | <?php |
68 | -$apiKey = '<?php echo $user['apiKey'];?>'; |
|
68 | +$apiKey = '<?php echo $user['apiKey']; ?>'; |
|
69 | 69 | |
70 | 70 | $requestBody = |
71 | 71 | "apiKey=".urlencode($apiKey). |
@@ -21,7 +21,7 @@ discard block |
||
21 | 21 | update blockLists |
22 | 22 | set isActive = '0' |
23 | 23 | where md5(host) = '".$mysql->escape($host)."'"); |
24 | - }else{ |
|
24 | + } else{ |
|
25 | 25 | $mysql->runQuery(" |
26 | 26 | update blockLists |
27 | 27 | set isActive = '1' |
@@ -103,7 +103,7 @@ discard block |
||
103 | 103 | echo('<td style="text-align: center;">'); |
104 | 104 | if($row['isActive']==0){ |
105 | 105 | echo('<a data-blstatus="0" data-host="'.md5($row['host']).'" id="'.md5($row['host']).'" class="blockListLinks glyphicon glyphicon-remove" href="#"></a></td>'); |
106 | - }else{ |
|
106 | + } else{ |
|
107 | 107 | echo('<a data-blstatus="1" data-host="'.md5($row['host']).'" id="'.md5($row['host']).'" class="blockListLinks glyphicon glyphicon-ok" href="#"></a></td>'); |
108 | 108 | } |
109 | 109 | echo('<td style="white-space: nowrap"><a target="_blank" href="'.$row['website'].'">'.$row['host'].'</a></td>'); |
@@ -3,7 +3,7 @@ discard block |
||
3 | 3 | class_exists('Utilities', false) or include('classes/Utilities.class.php'); |
4 | 4 | class_exists('_MySQL', false) or include('classes/_MySQL.class.php'); |
5 | 5 | |
6 | -if(Utilities::isLoggedIn()===false){ |
|
6 | +if (Utilities::isLoggedIn()===false) { |
|
7 | 7 | header('Location: login.php?location='.urlencode('hosts.php')); |
8 | 8 | exit(); |
9 | 9 | } |
@@ -15,13 +15,13 @@ discard block |
||
15 | 15 | $user = Utilities::getAccount(); |
16 | 16 | $mysql = new _MySQL(); |
17 | 17 | $mysql->connect(Setup::$connectionArray); |
18 | -if($host != ''){ |
|
19 | - if($toggle==0){ |
|
18 | +if ($host!='') { |
|
19 | + if ($toggle==0) { |
|
20 | 20 | $mysql->runQuery(" |
21 | 21 | update blockLists |
22 | 22 | set isActive = '0' |
23 | 23 | where md5(host) = '".$mysql->escape($host)."'"); |
24 | - }else{ |
|
24 | + }else { |
|
25 | 25 | $mysql->runQuery(" |
26 | 26 | update blockLists |
27 | 27 | set isActive = '1' |
@@ -98,28 +98,28 @@ discard block |
||
98 | 98 | </thead> |
99 | 99 | <tbody> |
100 | 100 | <?php |
101 | - while($row = mysqli_fetch_array($rs)){ |
|
101 | + while ($row = mysqli_fetch_array($rs)) { |
|
102 | 102 | echo('<tr>'); |
103 | 103 | echo('<td style="text-align: center;">'); |
104 | - if($row['isActive']==0){ |
|
104 | + if ($row['isActive']==0) { |
|
105 | 105 | echo('<a data-blstatus="0" data-host="'.md5($row['host']).'" id="'.md5($row['host']).'" class="blockListLinks glyphicon glyphicon-remove" href="#"></a></td>'); |
106 | - }else{ |
|
106 | + }else { |
|
107 | 107 | echo('<a data-blstatus="1" data-host="'.md5($row['host']).'" id="'.md5($row['host']).'" class="blockListLinks glyphicon glyphicon-ok" href="#"></a></td>'); |
108 | 108 | } |
109 | 109 | echo('<td style="white-space: nowrap"><a target="_blank" href="'.$row['website'].'">'.$row['host'].'</a></td>'); |
110 | 110 | echo('<td style="white-space: nowrap">'.($row['monitorType']=='ip' ? 'IP' : 'Domain').'</td>'); |
111 | 111 | echo('<td>'.$row['description'].'</td>'); |
112 | 112 | echo('<td style="text-align: center;">'); |
113 | - switch($row['importance']){ |
|
113 | + switch ($row['importance']) { |
|
114 | 114 | case 3: echo('<span class="label label-primary">High</span>'); break; |
115 | 115 | case 2: echo('<span class="label label-info">Medium</span>'); break; |
116 | 116 | case 1: echo('<span class="label label-default">Low</span>'); break; |
117 | 117 | } |
118 | 118 | echo('</td>'); |
119 | - echo('<td style="white-space: nowrap">'.number_format($row['blocksToday'],0).'</td>'); |
|
120 | - echo('<td style="white-space: nowrap">'.number_format($row['cleanToday'],0).'</td>'); |
|
121 | - echo('<td style="white-space: nowrap">'.number_format($row['blocksYesterday'],0).'</td>'); |
|
122 | - echo('<td style="white-space: nowrap">'.number_format($row['cleanYesterday'],0).'</td>'); |
|
119 | + echo('<td style="white-space: nowrap">'.number_format($row['blocksToday'], 0).'</td>'); |
|
120 | + echo('<td style="white-space: nowrap">'.number_format($row['cleanToday'], 0).'</td>'); |
|
121 | + echo('<td style="white-space: nowrap">'.number_format($row['blocksYesterday'], 0).'</td>'); |
|
122 | + echo('<td style="white-space: nowrap">'.number_format($row['cleanYesterday'], 0).'</td>'); |
|
123 | 123 | echo('</tr>'); |
124 | 124 | } |
125 | 125 | $mysql->close(); |
@@ -9,22 +9,22 @@ discard block |
||
9 | 9 | |
10 | 10 | public function __construct() { |
11 | 11 | |
12 | - if(self::$instance===null){ |
|
12 | + if (self::$instance===null) { |
|
13 | 13 | |
14 | - if(!file_exists('/etc/blacklistmonitor.cfg')) echo('no config file in /etc/blacklistmonitor.cfg'); |
|
14 | + if (!file_exists('/etc/blacklistmonitor.cfg')) echo('no config file in /etc/blacklistmonitor.cfg'); |
|
15 | 15 | ini_set('error_reporting', E_ALL | E_STRICT | E_NOTICE); |
16 | 16 | $cfg = parse_ini_file('/etc/blacklistmonitor.cfg', false); |
17 | 17 | ini_set('display_errors', $cfg['display_errors']); |
18 | 18 | ini_set('error_log', $cfg['log_path']); |
19 | 19 | |
20 | 20 | self::$settings = $cfg; |
21 | - self::$settings['dns_servers'] = explode(',',$cfg['dns_servers']); |
|
21 | + self::$settings['dns_servers'] = explode(',', $cfg['dns_servers']); |
|
22 | 22 | |
23 | 23 | // clean up |
24 | - if(Setup::$settings['rbl_txt_extended_status']=='true' || |
|
25 | - Setup::$settings['rbl_txt_extended_status']=='1'){ |
|
24 | + if (Setup::$settings['rbl_txt_extended_status']=='true' || |
|
25 | + Setup::$settings['rbl_txt_extended_status']=='1') { |
|
26 | 26 | Setup::$settings['rbl_txt_extended_status'] = true; |
27 | - }else{ |
|
27 | + }else { |
|
28 | 28 | Setup::$settings['rbl_txt_extended_status'] = false; |
29 | 29 | } |
30 | 30 | |
@@ -44,6 +44,6 @@ discard block |
||
44 | 44 | } |
45 | 45 | |
46 | 46 | Setup::$instance = new Setup(); |
47 | -if(php_sapi_name()!=='cli'){ |
|
47 | +if (php_sapi_name()!=='cli') { |
|
48 | 48 | session_start(); |
49 | 49 | } |
50 | 50 | \ No newline at end of file |
@@ -11,7 +11,9 @@ discard block |
||
11 | 11 | |
12 | 12 | if(self::$instance===null){ |
13 | 13 | |
14 | - if(!file_exists('/etc/blacklistmonitor.cfg')) echo('no config file in /etc/blacklistmonitor.cfg'); |
|
14 | + if(!file_exists('/etc/blacklistmonitor.cfg')) { |
|
15 | + echo('no config file in /etc/blacklistmonitor.cfg'); |
|
16 | + } |
|
15 | 17 | ini_set('error_reporting', E_ALL | E_STRICT | E_NOTICE); |
16 | 18 | $cfg = parse_ini_file('/etc/blacklistmonitor.cfg', false); |
17 | 19 | ini_set('display_errors', $cfg['display_errors']); |
@@ -24,7 +26,7 @@ discard block |
||
24 | 26 | if(Setup::$settings['rbl_txt_extended_status']=='true' || |
25 | 27 | Setup::$settings['rbl_txt_extended_status']=='1'){ |
26 | 28 | Setup::$settings['rbl_txt_extended_status'] = true; |
27 | - }else{ |
|
29 | + } else{ |
|
28 | 30 | Setup::$settings['rbl_txt_extended_status'] = false; |
29 | 31 | } |
30 | 32 |