From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.1 X-MC-Unique: 013_5WkjOwao_BzNDmQZkQ-1 From: Alexey Gladkov To: ALT Devel discussion list Date: Tue, 27 Oct 2020 12:33:49 +0100 Message-Id: <20201027113351.3373843-5-legion@altlinux.ru> In-Reply-To: <20201027113351.3373843-1-legion@altlinux.ru> References: <20201027113351.3373843-1-legion@altlinux.ru> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: altlinux.ru Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=WINDOWS-1252 Subject: [devel] [PATCH 4/6] syslogd: no need to try to substitute a field in a record if it's not in the log_format X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Oct 2020 11:34:11 -0000 Archived-At: List-Archive: List-Post: Signed-off-by: Alexey Gladkov --- syslogd.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/syslogd.c b/syslogd.c index 214c4e9..4c3c85f 100644 --- a/syslogd.c +++ b/syslogd.c @@ -314,6 +314,7 @@ struct log_format { =09struct iovec *iov; =09size_t iovec_nr; =20 +=09unsigned int f_mask; =09struct log_format_field *fields; =09size_t fields_nr; }; @@ -1491,6 +1492,9 @@ finish: =20 char *get_record_field(struct log_format *log_fmt, enum log_format_type na= me) { +=09if (!(log_fmt->f_mask | (1 << name))) +=09=09return NULL; + =09for (int i =3D 0; i < LOG_FORMAT_FIELDS_MAX && log_fmt->fields[i].f_iov= ; i++) { =09=09if (log_fmt->fields[i].f_type =3D=3D name) =09=09=09return log_fmt->fields[i].f_iov->iov_base; @@ -1501,7 +1505,12 @@ char *get_record_field(struct log_format *log_fmt, e= num log_format_type name) void set_record_field(struct log_format *log_fmt, =09=09enum log_format_type name, char *value, ssize_t len) { -=09size_t iov_len =3D len =3D=3D -1 ? strlen(value) : len; +=09size_t iov_len; + +=09if (!(log_fmt->f_mask | (1 << name))) +=09=09return; + +=09iov_len =3D len =3D=3D -1 ? strlen(value) : len; =20 =09for (int i =3D 0; i < LOG_FORMAT_FIELDS_MAX && log_fmt->fields[i].f_iov= ; i++) { =09=09if (log_fmt->fields[i].f_type =3D=3D name) { @@ -2666,6 +2675,7 @@ int set_log_format_field(struct log_format *log_fmt, = size_t i, =09=09=09return -1; =09=09} =20 +=09=09log_fmt->f_mask |=3D (1 << t); =09=09log_fmt->fields[log_fmt->fields_nr].f_type =3D t; =09=09log_fmt->fields[log_fmt->fields_nr].f_iov =3D log_fmt->iov + i; =09=09log_fmt->fields_nr++; --=20 2.25.4