Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Sep 2001 10:58:21 +0300
From:      Ruslan Ermilov <ru@FreeBSD.org>
To:        Dag-Erling Smorgrav <des@FreeBSD.org>
Cc:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/usr.sbin/syslogd syslogd.c
Message-ID:  <20010913105821.H10963@sunbay.com>
In-Reply-To: <20010913105056.G10963@sunbay.com>; from ru@FreeBSD.org on Thu, Sep 13, 2001 at 10:50:56AM %2B0300
References:  <200109130648.f8D6mfU01568@freefall.freebsd.org> <20010913105056.G10963@sunbay.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Sep 13, 2001 at 10:50:56AM +0300, Ruslan Ermilov wrote:
> On Wed, Sep 12, 2001 at 11:48:41PM -0700, Dag-Erling Smorgrav wrote:
> > des         2001/09/12 23:48:41 PDT
> > 
> >   Modified files:
> >     usr.sbin/syslogd     syslogd.c 
> >   Log:
> >   The previous commit appeared to just shove the bug under the carpet rather
> >   than really solve it.  This approach (inspired by Ruslan's patch) solves
> >   the real problem by stripping the local domain off the host name in the
> >   config line structure.
> >   
> Uhh, this actually strips ANY domain part whose length is that of the local
> domain.  The correct patch (only lightly tested) would be:
> 
> Index: syslogd.c
> ===================================================================
> RCS file: /home/ncvs/src/usr.sbin/syslogd/syslogd.c,v
> retrieving revision 1.89
> diff -u -p -r1.89 syslogd.c
> --- syslogd.c	2001/09/13 06:48:41	1.89
> +++ syslogd.c	2001/09/13 07:50:08
> @@ -1545,16 +1545,13 @@ cfline(line, f, prog, host)
>  	if (host && *host == '*')
>  		host = NULL;
>  	if (host) {
> -		int hl, dl;
> -
>  		/* XXX should check for NULL return */
>  		f->f_host = strdup(host);
> -		hl = strlen(f->f_host);
> -		if (f->f_host[hl-1] == '.')
> -			f->f_host[--hl] = '\0';
> -		dl = strlen(LocalDomain) + 1;
> -		if (hl > dl && f->f_host[hl-dl] == '.')
> -			f->f_host[hl-dl] = '\0';
> +		if (*(bp = f->f_host + strlen(f->f_host) - 1) == '.')
> +			*bp = '\0';
> +		if ((bp = strchr(f->f_host, '.')) != NULL &&
> +		    strcasecmp(bp + 1, LocalDomain) == 0)
> +			*bp = '\0';
>  	}
>  
>  	/* save program name if any */
> 
> Please commit it if you like.
> 
More optimizations (apply over the previous patch):

--- syslogd.c~	Thu Sep 13 10:54:54 2001
+++ syslogd.c	Thu Sep 13 10:56:45 2001
@@ -1545,13 +1545,13 @@
 	if (host && *host == '*')
 		host = NULL;
 	if (host) {
-		/* XXX should check for NULL return */
-		f->f_host = strdup(host);
-		if (*(bp = f->f_host + strlen(f->f_host) - 1) == '.')
+		if (*(bp = host + strlen(host) - 1) == '.')
 			*bp = '\0';
-		if ((bp = strchr(f->f_host, '.')) != NULL &&
+		if ((bp = strchr(host, '.')) != NULL &&
 		    strcasecmp(bp + 1, LocalDomain) == 0)
 			*bp = '\0';
+		/* XXX should check for NULL return */
+		f->f_host = strdup(host);
 	}
 
 	/* save program name if any */

With this, the patch looks almost the same as it was in my reply.
Modulo the stripping of the terminal dot.


Cheers,
-- 
Ruslan Ermilov		Oracle Developer/DBA,
ru@sunbay.com		Sunbay Software AG,
ru@FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010913105821.H10963>