You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by ni...@apache.org on 2006/03/07 17:50:09 UTC

svn commit: r383927 - /logging/log4net/trunk/src/Appender/LocalSyslogAppender.cs

Author: nicko
Date: Tue Mar  7 08:50:07 2006
New Revision: 383927

URL: http://svn.apache.org/viewcvs?rev=383927&view=rev
Log:
Fix for LOG4NET-67. CVE-2006-0743 Security vulnerability in LocalSyslogAppender

Modified:
    logging/log4net/trunk/src/Appender/LocalSyslogAppender.cs

Modified: logging/log4net/trunk/src/Appender/LocalSyslogAppender.cs
URL: http://svn.apache.org/viewcvs/logging/log4net/trunk/src/Appender/LocalSyslogAppender.cs?rev=383927&r1=383926&r2=383927&view=diff
==============================================================================
--- logging/log4net/trunk/src/Appender/LocalSyslogAppender.cs (original)
+++ logging/log4net/trunk/src/Appender/LocalSyslogAppender.cs Tue Mar  7 08:50:07 2006
@@ -1,6 +1,6 @@
 #region Copyright & License
 /*
- * Copyright 2004-2005 The Apache Software Foundation
+ * Copyright 2004-2006 The Apache Software Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -379,7 +379,9 @@
 			int priority = GeneratePriority(m_facility, GetSeverity(loggingEvent.Level));
 			string message = RenderLoggingEvent(loggingEvent);
 
-			syslog(priority, message);
+			// Call the local libc syslog method
+			// The second argument is a printf style format string
+			syslog(priority, "%s", message);
 		}
 
 		/// <summary>
@@ -533,8 +535,17 @@
 		/// <summary>
 		/// Generate a log message.
 		/// </summary>
-		[DllImport("libc")]
-		private static extern void syslog(int priority, string message);
+		/// <remarks>
+		/// <para>
+		/// The libc syslog method takes a format string and a variable argument list similar
+		/// to the classic printf function. As this type of vararg list is not supported
+		/// by C# we need to specify the arguments explicitly. Here we have specified the
+		/// format string with a single message argument. The caller must set the format 
+		/// string to <c>"%s"</c>.
+		/// </para>
+		/// </remarks>
+		[DllImport("libc", CharSet=CharSet.Ansi, CallingConvention=CallingConvention.Cdecl)]
+		private static extern void syslog(int priority, string format, string message);
 
 		/// <summary>
 		/// Close descriptor used to write to system logger.