1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
-
+
|
#!/usr/bin/env python3.1
import configparser, optparse, os, postgresql.api, re, sys, _thread
class Logger:
__slots__ = frozenset(['_silent', '_syslog'])
def __init__(self):
config.section('log')
if config['silent'] = 'yes':
if config['silent'] == 'yes':
self._silent = True
else:
import syslog
self._syslog = syslog
self._syslog.openlog('squidTag')
self._silent = False
|
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
-
-
-
-
-
|
config['database'],
) )
return(self._db)
def check(self, ip_address, site):
result = self._check_stmt(site, ip_address)
if len(result) > 0:
if result[1]:
if re.compile(result[1]).match(url_path):
return result[0]
else:
return None
return result[0]
else:
return None
class CheckerThread:
__slots__ = frozenset(['_db', '_lock', '_lock_queue', '_log', '_queue'])
|
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
+
+
+
+
+
+
-
-
+
+
-
+
|
if len(self._queue) > 1 and self._lock.locked():
self._lock.release()
req = self._queue.pop(0)
self._lock_queue.release()
self._log.info('trying %s\n'%req[1])
row = self._db.check(req[2], req[1])
if row != None and row[0] != None:
if row[1] != None:
if re.compile(row[1]).match(req[3]):
writeline('%s 302:%s\n'%(req[0], row[0]))
else:
writeline('%s -\n'%req[0])
writeline('%s 302:%s\n'%(req[0], row[0]))
else:
writeline('%s -\n'%req[0])
def check(self, line):
request = re.compile('^([0-9]+)\ (http|ftp):\/\/([-\w.:]+)\/([^ ]*)\ ([0-9.]+)\/(-|[\w\.]+)\ (-|\w+)\ (-|GET|HEAD|POST).*$').match(line)
if request:
id = request.group(1)
site = request.group(3)
ip_address = request.group(5)
id = request.group(1)
url_path = request.group(4)
ip_address = request.group(5)
self._lock_queue.acquire()
self._queue.append((id, site, ip_address))
self._queue.append((id, site, ip_address, url_path))
if self._lock.locked():
self._lock.release()
self._lock_queue.release()
self._log.info('request %s queued (%s)\n'%(id, line))
else:
self._log.info('bad request\n')
writeline(line)
|