|
Lines 40-46
import base64
Link Here
|
| 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>' |