|
40 |
import grp |
40 |
import grp |
41 |
import subprocess |
41 |
import subprocess |
42 |
import os |
42 |
import os |
43 |
import fcntl |
|
|
44 |
|
43 |
|
45 |
import univention.debug |
44 |
import univention.debug |
46 |
import univention.misc |
45 |
import univention.misc |
Lines 112-162
def filterOutUnchangedAttributes(old_copy, new_copy):
|
Link Here
|
---|
|
112 |
|
111 |
|
113 |
def process_dellog(dn): |
112 |
def process_dellog(dn): |
114 |
dellog = listener.configRegistry['ldap/logging/dellogdir'] |
113 |
dellog = listener.configRegistry['ldap/logging/dellogdir'] |
115 |
lockfilename = dellog + '.lock' |
|
|
116 |
lock = open(lockfilename, "w") |
117 |
fcntl.flock(lock, fcntl.LOCK_EX) |
118 |
try: |
119 |
dellist = os.listdir(dellog) |
120 |
dellist.sort() |
121 |
filename = dellist.pop(0) |
122 |
filename = os.path.join(dellog, filename) |
123 |
f = open(filename) |
124 |
(dellog_stamp, dellog_id, dellog_dn, dellog_bindDN, dellog_action) = [line.rstrip() for line in f] |
125 |
f.close() |
126 |
if dellog_dn != dn: |
127 |
|
114 |
|
128 |
# first clean up the mess: |
115 |
dellist = os.listdir(dellog) |
129 |
leftover = 1 |
116 |
dellist.sort() |
130 |
if cleanupDellog: |
117 |
for leftover, filename in enumerate(dellist): |
131 |
os.unlink(filename) |
118 |
pathname = os.path.join(dellog, filename) |
132 |
|
119 |
try: |
133 |
# be nice: see if we can find dn in a later entry |
120 |
with open(pathname, 'r') as f: |
134 |
for filename in dellist: |
121 |
(dellog_stamp, dellog_id, dellog_dn, modifier, action) = [line.rstrip() for line in f] |
135 |
filename = os.path.join(dellog, filename) |
|
|
136 |
f = open(filename) |
137 |
(dellog_stamp, dellog_id, dellog_dn, dellog_bindDN, dellog_action) = [line.rstrip() for line in f] |
138 |
f.close() |
139 |
if dellog_dn == dn: |
140 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.WARN, '%s: dn found in dellog entry %s, ID %s (+%s)' % (name, filename, dellog_id, leftover)) |
141 |
break |
142 |
# damn, missed that one as well. Now it's too late, clean up: |
143 |
leftover += 1 |
144 |
if cleanupDellog: |
145 |
os.unlink(filename) |
146 |
|
147 |
if dellog_dn == dn: # haben wir's jetzt? |
148 |
timestamp = ldapTime2string(dellog_stamp) |
149 |
modifier = dellog_bindDN |
150 |
action = dellog_action |
151 |
os.unlink(filename) |
152 |
else: |
153 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.ERROR, '%s: dn not found in dellog: %s' % (name, dn)) |
154 |
|
122 |
|
155 |
finally: |
123 |
if cleanupDellog: |
156 |
fcntl.flock(lock, fcntl.LOCK_UN) |
124 |
os.unlink(pathname) |
157 |
os.unlink(lockfilename) |
125 |
except EnvironmentError: |
|
|
126 |
continue |
158 |
|
127 |
|
159 |
if not modifier: # Fallback |
128 |
if dellog_dn == dn: |
|
|
129 |
univention.debug.debug(univention.debug.LISTENER, univention.debug.WARN, '%s: dn found in dellog entry %s, ID %s (+%s)' % (name, filename, dellog_id, leftover)) |
130 |
timestamp = ldapTime2string(dellog_stamp) |
131 |
break |
132 |
else: |
160 |
timestamp = time.strftime(timestampfmt, time.gmtime()) |
133 |
timestamp = time.strftime(timestampfmt, time.gmtime()) |
161 |
dellog_id = '<NoID>' |
134 |
dellog_id = '<NoID>' |
162 |
modifier = '<unknown>' |
135 |
modifier = '<unknown>' |