Package: opendnssec-signer
Version: 1:1.4.6-6
Severity: normal
Tags: patch
Dear Maintainer,
When configuring the opendnssec-signerd to sign a local zone file I receive
error in my syslog:
[adapter] error parsing RR at line 172 (Syntax error, could not parse the
RR):
��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
The signing itself did not happen.
I expected to receive a signed zone file from ods-signerd.
The problem is because on my ARM CPU the function `adutil_readline_frm_file`
from `signer/src/adapter/adutil.c` fails to detect `EOF`, because `char` on ARM
is unsigned and `EOF` is `-1`.
Upstream has a patch available, which is *not* yet included in 1.4.7 (the
current release in experimental, but on the branch for the next upstream 1.4
release.
The patch is attached and available here:
https://github.com/opendnssec/opendnssec/commit/75df18925f512a3906bc0c27f1030e055f11b41f
-- System Information:
Debian Release: 8.2
APT prefers stable
APT policy: (500, 'stable')
Architecture: armhf (armv7l)
Kernel: Linux 4.1.6-249 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages opendnssec-signer depends on:
ii dpkg 1.17.25
ii libc6 2.19-18+deb8u1
ii libldns1 1.6.17-5+b1
ii libssl1.0.0 1.0.1k-3+deb8u1
ii libxml2 2.9.1+dfsg1-5
ii opendnssec-common 1:1.4.6-6
Versions of packages opendnssec-signer recommends:
ii opendnssec 1:1.4.6-6
ii opendnssec-enforcer 1:1.4.6-6
ii softhsm 1.3.7-2
>From 75df18925f512a3906bc0c27f1030e055f11b41f Mon Sep 17 00:00:00 2001
From: Yuri Schaeffer <[email protected]>
Date: Mon, 27 Jul 2015 15:46:15 +0200
Subject: [PATCH] ARM chars are unsigned by default, therefore c==EOF will
always yield false.
---
signer/src/adapter/adutil.c | 42 +++++++++++++++++++++---------------------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/signer/src/adapter/adutil.c b/signer/src/adapter/adutil.c
index 59a2c38..7719fca 100644
--- a/signer/src/adapter/adutil.c
+++ b/signer/src/adapter/adutil.c
@@ -87,14 +87,14 @@ adutil_readline_frm_file(FILE* fd, char* line, unsigned int* l,
int in_string = 0;
int depth = 0;
int comments = 0;
- char c = 0;
- char lc = 0;
+ int c = 0;
+ int lc = 0;
for (i = 0; i < SE_ADFILE_MAXLINE; i++) {
- c = (char) ods_fgetc(fd, l);
+ c = ods_fgetc(fd, l);
if (comments) {
- while (c != EOF && c != '\n') {
- c = (char) ods_fgetc(fd, l);
+ while (c != EOF && (char)c != '\n') {
+ c = ods_fgetc(fd, l);
}
}
@@ -109,27 +109,27 @@ adutil_readline_frm_file(FILE* fd, char* line, unsigned int* l,
} else {
return -1;
}
- } else if (c == '"' && lc != '\\') {
+ } else if ((char)c == '"' && (char)lc != '\\') {
in_string = 1 - in_string; /* swap status */
- line[li] = c;
+ line[li] = (char)c;
li++;
- } else if (c == '(') {
+ } else if ((char)c == '(') {
if (in_string) {
- line[li] = c;
+ line[li] = (char)c;
li++;
- } else if (lc != '\\') {
+ } else if ((char)lc != '\\') {
depth++;
line[li] = ' ';
li++;
} else {
- line[li] = c;
+ line[li] = (char)c;
li++;
}
- } else if (c == ')') {
+ } else if ((char)c == ')') {
if (in_string) {
- line[li] = c;
+ line[li] = (char)c;
li++;
- } else if (lc != '\\') {
+ } else if ((char)lc != '\\') {
if (depth < 1) {
ods_log_error("[%s] read line: bracket mismatch "
"discovered at line %i, missing '('", adapter_str,
@@ -141,20 +141,20 @@ adutil_readline_frm_file(FILE* fd, char* line, unsigned int* l,
line[li] = ' ';
li++;
} else {
- line[li] = c;
+ line[li] = (char)c;
li++;
}
- } else if (c == ';') {
+ } else if ((char)c == ';') {
if (in_string) {
- line[li] = c;
+ line[li] = (char)c;
li++;
- } else if (lc != '\\' && !keep_comments) {
+ } else if ((char)lc != '\\' && !keep_comments) {
comments = 1;
} else {
- line[li] = c;
+ line[li] = (char)c;
li++;
}
- } else if (c == '\n' && lc != '\\') {
+ } else if ((char)c == '\n' && (char)lc != '\\') {
comments = 0;
/* if no depth issue, we are done */
if (depth == 0) {
@@ -163,7 +163,7 @@ adutil_readline_frm_file(FILE* fd, char* line, unsigned int* l,
line[li] = ' ';
li++;
} else {
- line[li] = c;
+ line[li] = (char)c;
li++;
}
/* continue with line */
--
2.5.1