forked from pool/openldap2
Jan Engelhardt
17245dd92c
- Backported one hunk from upstream commit fb9e6a81bbee as openldap2-fb9e6a81bbee.patch to fix incompatible pointer type being passed to a function which is diagnosed as an error by GCC 14. If the request is OK, please forward it to Factory soon so that we can switch the default compiler. Thanks! OBS-URL: https://build.opensuse.org/request/show/1190307 OBS-URL: https://build.opensuse.org/package/show/network:ldap/openldap2?expand=0&rev=323
68 lines
1.6 KiB
Bash
68 lines
1.6 KiB
Bash
#!/bin/bash
|
|
# Script to fix the crc of openldap slapd.d ldifs.
|
|
|
|
do_update_crc () {
|
|
if [ -z ${1} ]; then
|
|
echo "Invalid call to do_update_crc() - no filename provided"
|
|
exit 1
|
|
fi
|
|
|
|
tgt_ldif=$1
|
|
|
|
if [ ! -f "${tgt_ldif}" ]; then
|
|
echo "invalid call to do_update_crc() - file ${tgt_ldif} does not exist?"
|
|
exit 1
|
|
fi
|
|
|
|
rm -f "${tgt_ldif}.crcbak"
|
|
mv "${tgt_ldif}" "${tgt_ldif}.crcbak"
|
|
|
|
/usr/bin/awk '
|
|
BEGIN {
|
|
# CRC-32 ZIP polynomial in reversed bit order.
|
|
POLY = 0xedb88320
|
|
|
|
# 8-bit character -> ordinal table.
|
|
for (i = 0; i < 256; i++)
|
|
ORD[sprintf("%c", i)] = i
|
|
}
|
|
|
|
{
|
|
# Remember each input line.
|
|
input[NR] = $0
|
|
|
|
# Verify the file header.
|
|
if (NR == 1 && $0 != "# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.")
|
|
exit 1
|
|
if (NR == 2 && $0 !~ /# CRC32 ......../)
|
|
exit 1
|
|
}
|
|
|
|
# Calculate CRC-32.
|
|
function crc32(crc, string, i, j, c) {
|
|
crc = and(compl(crc), 0xffffffff)
|
|
for (i = 1; i <= length(string); i++) {
|
|
c = substr(string, i, 1)
|
|
crc = xor(crc, ORD[c])
|
|
for (j = 0; j < 8; j++)
|
|
crc = and(crc, 1) ? xor(rshift(crc, 1), POLY) : rshift(crc, 1)
|
|
}
|
|
crc = and(compl(crc), 0xffffffff)
|
|
return crc
|
|
}
|
|
|
|
END {
|
|
# Calculate CRC-32 of the file and update it in the header.
|
|
crc = 0
|
|
for (i = 3; i <= length(input); i++)
|
|
crc = crc32(crc, input[i] "\n")
|
|
input[2] = "# CRC32 " sprintf("%08x", crc)
|
|
|
|
# Print the output.
|
|
for (i = 1; i <= length(input); i++)
|
|
print input[i]
|
|
}' "${tgt_ldif}.crcbak" > "${tgt_ldif}"
|
|
|
|
}
|
|
|