Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Oct 1996 23:09:40 -0700
From:      Julian Elischer <julian@whistle.com>
To:        hackers@freebsd.org
Subject:   comments on this change please.
Message-ID:  <326C6524.41C67EA6@whistle.com>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.

--------------446B9B3D2781E494167EB0E7
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

I would like to make the following change to syslogd and the syslog
system. 
(better suggestions for names not withstanding)
the aim is to get the logging fifo out of the 
root filesystem so that it can be made read-only.

I have added some code to syslogd to help compatibilty
by having it TRY make a symlink for /dev/log to /var/run/syslog.socket
for those people who want BSDI  (or linux?) or older freeBSD
binaries to work. In teh case of a read-only root fs, One would hope 
that whoever set it up would have made the symlink first. 

please comment.
I'm trying to get a production r/o root system out the door
and we have to get around syslog somehow..

note that this system also works with devfs because devfs 
supports symlinks.

julian
(I'm sure bde will find one style problem per line as usual..
and I'll fix them as per usual I hope) :)

--------------446B9B3D2781E494167EB0E7
Content-Type: text/plain; charset=us-ascii; name="xx"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="xx"

? usr.sbin/syslogd/syslogd
? usr.sbin/syslogd/syslog.conf.5.gz
? usr.sbin/syslogd/syslogd.8.gz
Index: sys/sys/syslog.h
===================================================================
RCS file: /cvs/freebsd/src/sys/sys/syslog.h,v
retrieving revision 1.6
diff -c -r1.6 syslog.h
*** 1.6	1996/03/28 18:29:14
--- syslog.h	1996/10/22 05:57:13
***************
*** 37,43 ****
  #ifndef _SYS_SYSLOG_H_
  #define _SYS_SYSLOG_H_
  
! #define	_PATH_LOG	"/dev/log"
  
  /*
   * priorities/facilities are encoded into a single 32-bit quantity, where the
--- 37,44 ----
  #ifndef _SYS_SYSLOG_H_
  #define _SYS_SYSLOG_H_
  
! #define	_OLD_PATH_LOG	"/dev/log"
! #define	_PATH_LOG	"/var/run/syslog.socket"
  
  /*
   * priorities/facilities are encoded into a single 32-bit quantity, where the
Index: usr.sbin/syslogd/syslogd.8
===================================================================
RCS file: /cvs/freebsd/src/usr.sbin/syslogd/syslogd.8,v
retrieving revision 1.4
diff -c -r1.4 syslogd.8
*** 1.4	1996/07/22 16:35:48
--- syslogd.8	1996/10/22 05:57:13
***************
*** 68,74 ****
  .It Fl p
  Specify the pathname of an alternate log socket;
  the default is
! .Pa /dev/log .
  .El
  .Pp
  .Nm Syslogd
--- 68,74 ----
  .It Fl p
  Specify the pathname of an alternate log socket;
  the default is
! .Pa /var/run/syslog.socket .
  .El
  .Pp
  .Nm Syslogd
***************
*** 82,88 ****
  reads messages from the
  .Tn UNIX
  domain socket
! .Pa /dev/log ,
  from an Internet domain socket specified in
  .Pa /etc/services ,
  and from the special device
--- 82,88 ----
  reads messages from the
  .Tn UNIX
  domain socket
! .Pa /var/run/syslog.socket ,
  from an Internet domain socket specified in
  .Pa /etc/services ,
  and from the special device
***************
*** 113,122 ****
  .It Pa /var/run/syslog.pid
  The process id of current
  .Nm syslogd .
! .It Pa /dev/log
  Name of the
  .Tn UNIX
  domain datagram log socket.
  .It Pa /dev/klog
  The kernel log device.
  .El
--- 113,125 ----
  .It Pa /var/run/syslog.pid
  The process id of current
  .Nm syslogd .
! .It Pa /var/run/syslog.socket
  Name of the
  .Tn UNIX
  domain datagram log socket.
+ .Nm syslogd
+ might also create a symlink from the location of the old default
+ socket, (/dev/log) so as to assist backwards compatibility.
  .It Pa /dev/klog
  The kernel log device.
  .El
***************
*** 136,139 ****
  disabled by default.  Some sort of
  .No inter- Ns Nm syslogd
  authentication mechanism ought to be worked out.
! 
--- 139,146 ----
  disabled by default.  Some sort of
  .No inter- Ns Nm syslogd
  authentication mechanism ought to be worked out.
! The log socket was moved from /dev to ease the use
! of a read-only root filesystem. This may confuse some old binaries
! and if possible, syslogd will create a symlink to help these programs,
! however if the root filesystem is already read only, and the link is not
! pre-existing, these binaries will not be able to log messages.
Index: usr.sbin/syslogd/syslogd.c
===================================================================
RCS file: /cvs/freebsd/src/usr.sbin/syslogd/syslogd.c,v
retrieving revision 1.10
diff -c -r1.10 syslogd.c
*** 1.10	1996/10/05 15:20:51
--- syslogd.c	1996/10/22 05:57:13
***************
*** 104,114 ****
  
  #define SYSLOG_NAMES
  #include <sys/syslog.h>
- 
  const char	*LogName = _PATH_LOG;
  const char	*ConfFile = _PATH_LOGCONF;
  const char	*PidFile = _PATH_LOGPID;
  const char	ctty[] = _PATH_CONSOLE;
  
  #define FDMASK(fd)	(1 << (fd))
  
--- 104,117 ----
  
  #define SYSLOG_NAMES
  #include <sys/syslog.h>
  const char	*LogName = _PATH_LOG;
  const char	*ConfFile = _PATH_LOGCONF;
  const char	*PidFile = _PATH_LOGPID;
  const char	ctty[] = _PATH_CONSOLE;
+ #if defined _OLD_PATH_LOG
+ int		alt_fifo;
+ const char	*OldLogName = _OLD_PATH_LOG;
+ #endif
  
  #define FDMASK(fd)	(1 << (fd))
  
***************
*** 240,245 ****
--- 243,251 ----
  			break;
  		case 'p':		/* path */
  			LogName = optarg;
+ #if defined _OLD_PATH_LOG
+ 			alt_fifo = 1;
+ #endif
  			break;
  		case 'I':		/* backwards compatible w/FreeBSD */
  		case 's':		/* no network mode */
***************
*** 292,297 ****
--- 298,340 ----
  	} else
  		created_lsock = 1;
  
+ #if defined(_OLD_PATH_LOG)
+ #define LNKSZ 128
+ 	/*
+ 	 * don't make a link for the old fifo name if we are just testing 
+ 	 * (presumably the real syslogd might be using it)
+ 	 */
+ 	if (! alt_fifo ) {
+ 		struct stat statb;
+ 		char linkbuf[LNKSZ+1];
+ 		
+ 		linkbuf[LNKSZ + 1] = '\0';
+ 		if(stat(OldLogName,&statb) == 0) {
+ 			switch(statb.st_mode & S_IFMT) {
+ 		 	case S_IFLNK:
+ 				/*
+ 				 * if it's already corrct leave it
+ 				 * (great for ro filesystems)
+ 				 */
+ 				if((readlink(OldLogName, linkbuf, LNKSZ) > 0)
+ 				 && (! strcmp(OldLogName,linkbuf)))
+ 					goto linkok;
+ 			case S_IFIFO:
+ 				/* if the unlink fails the symlink will too */
+ 				unlink(OldLogName);
+ 			}
+ 		}
+ 		if(symlink(LogName,OldLogName)) {
+ 			(void) sprintf(line,
+ 				"cannot create symlink %s, continuing.",
+ 				OldLogName);
+ 			logerror(line);
+ 			dprintf("warning: cannot create symlink %s (%d)\n",
+ 				OldLogName, errno);
+ 		}
+ 	}
+ linkok:
+ #endif
  	if (!SecureMode)
  		finet = socket(AF_INET, SOCK_DGRAM, 0);
  	else

--------------446B9B3D2781E494167EB0E7--




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?326C6524.41C67EA6>