[comp.bugs.4bsd] ftpd in debug mode doesn't log +Fix

gww@marduk.UUCP (Gary Winiger) (09/05/87)

Subject: ftpd in debug mode doesn't log +Fix
Index:	etc/ftpd/ftpd.c 4.3BSD +Fix

Description:
	When ftpd was translated from 4.2 to 4.3, the calls to syslog
	for outputting debugging information were incorrectly translated.
Repeat-By:
	Run the ftp daemon (ftpd) in debugging mode and not the lack of
	logged messages.
Fix:
	Correct the calls to syslog.
	The attached code solves this problem at Elxsi.

Gary..
{ucbvax!sun,lll-lcc!lll-tis,amdahl!altos86,bridge2}!elxsi!gww
--------- cut --------- snip --------- :.,$w diff -------------
*** /tmp/,RCSt1000591	Fri Jul 31 12:13:35 1987
--- ftpd.c	Fri Jul 31 12:12:48 1987
***************
*** 1,5 ****
--- 1,9 ----
  /*
   * $Log:	ftpd.c,v $
+  * Revision 1.3  87/07/31  12:10:39  gww
+  * Have debugging output through syslog work.
+  * Syslog(3) supports a maximum of 5 variables for the string NOT varargs!
+  * 
***************
*** 20,26 ****
  #endif not lint
  
  #ifndef lint
! static char *ERcsId = "$Header: ftpd.c,v 1.2 87/07/31 11:56:22 gww Exp $ ENIX BSD";
  static char sccsid[] = "@(#)ftpd.c	5.7 (Berkeley) 5/28/86";
  #endif not lint
  
--- 24,30 ----
  #endif not lint
  
  #ifndef lint
! static char *ERcsId = "$Header: ftpd.c,v 1.3 87/07/31 12:10:39 gww Exp $ ENIX BSD";
  static char sccsid[] = "@(#)ftpd.c	5.7 (Berkeley) 5/28/86";
  #endif not lint
  
***************
*** 605,638 ****
  	dologout(0);
  }
  
! /*VARARGS2*/
! reply(n, s, args)
  	int n;
  	char *s;
  {
  
  	printf("%d ", n);
! 	_doprnt(s, &args, stdout);
  	printf("\r\n");
  	(void) fflush(stdout);
  	if (debug) {
  		syslog(LOG_DEBUG, "<--- %d ", n);
! 		syslog(LOG_DEBUG, s, &args);
  	}
  }
  
! /*VARARGS2*/
! lreply(n, s, args)
  	int n;
  	char *s;
  {
  	printf("%d-", n);
! 	_doprnt(s, &args, stdout);
  	printf("\r\n");
  	(void) fflush(stdout);
  	if (debug) {
  		syslog(LOG_DEBUG, "<--- %d- ", n);
! 		syslog(LOG_DEBUG, s, &args);
  	}
  }
  
--- 609,640 ----
  	dologout(0);
  }
  
! reply(n, s, p0, p1, p2, p3, p4)
  	int n;
  	char *s;
  {
  
  	printf("%d ", n);
! 	printf(s, p0, p1, p2, p3, p4);
  	printf("\r\n");
  	(void) fflush(stdout);
  	if (debug) {
  		syslog(LOG_DEBUG, "<--- %d ", n);
! 		syslog(LOG_DEBUG, s, p0, p1, p2, p3, p4);
  	}
  }
  
! lreply(n, s, p0, p1, p2, p3, p4)
  	int n;
  	char *s;
  {
  	printf("%d-", n);
! 	printf(s, p0, p1, p2, p3, p4);
  	printf("\r\n");
  	(void) fflush(stdout);
  	if (debug) {
  		syslog(LOG_DEBUG, "<--- %d- ", n);
! 		syslog(LOG_DEBUG, s, p0, p1, p2, p3, p4);
  	}
  }
  

chris@mimsy.UUCP (Chris Torek) (09/05/87)

Ftpd should, when it becomes available, use vsyslog(), which is
(`will be') called as

	vsyslog(int level, char *fmt, va_list arginfo);

hence ftpd's reply() should become

	/*VARARGS2*/
	reply(n, s, va_alist)
		int n;
		char *s;
		va_dcl	/* nb. this assumes that va_alist need not be first */
	{
		va_list l;

		va_start(l);
		(void) printf("%d ", n);
		(void) vprintf(s, l);
		(void) printf("\r\n");
		(void) fflush(stdout);
		va_end(l);
		if (debug) {
			va_start(l);
			syslog(LOG_DEBUG, "<--- %d ", n);
			vsyslog(LOG_DEBUG, s, l);
			va_end(l);
		}
	}
-- 
In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7690)
Domain:	chris@mimsy.umd.edu	Path:	uunet!mimsy!chris