summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/proto.h3
-rw-r--r--source3/lib/debug.c38
-rw-r--r--source3/smbd/process.c6
3 files changed, 40 insertions, 7 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index a02ea38bd9..e30d24b81b 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -54,6 +54,8 @@ void sig_usr1( int sig );
void setup_logging( char *pname, BOOL interactive );
void reopen_logs( void );
void force_check_log_size( void );
+BOOL need_to_check_log_size( void );
+void check_log_size( void );
void dbgflush( void );
BOOL dbghdr( int level, char *file, char *func, int line );
@@ -1262,7 +1264,6 @@ BOOL lp_nis_home_map(void);
BOOL lp_bind_interfaces_only(void);
BOOL lp_unix_password_sync(void);
BOOL lp_passwd_chat_debug(void);
-BOOL lp_ole_locking_compat(void);
BOOL lp_nt_smb_support(void);
BOOL lp_nt_pipe_support(void);
BOOL lp_nt_acl_support(void);
diff --git a/source3/lib/debug.c b/source3/lib/debug.c
index c88f4e1a41..ed27b93cfd 100644
--- a/source3/lib/debug.c
+++ b/source3/lib/debug.c
@@ -239,26 +239,52 @@ void reopen_logs( void )
* ************************************************************************** **
*/
void force_check_log_size( void )
- {
+{
debug_count = 100;
- } /* force_check_log_size */
+}
+
+/***************************************************************************
+ Check to see if there is any need to check if the logfile has grown too big.
+**************************************************************************/
+
+BOOL need_to_check_log_size( void )
+{
+ int maxlog;
+
+ if( debug_count++ < 100 )
+ return( False );
+
+ maxlog = lp_max_log_size() * 1024;
+ if( !dbf || maxlog <= 0 ) {
+ debug_count = 0;
+ return(False);
+ }
+ return( True );
+}
/* ************************************************************************** **
* Check to see if the log has grown to be too big.
* ************************************************************************** **
*/
-static void check_log_size( void )
+
+void check_log_size( void )
{
int maxlog;
SMB_STRUCT_STAT st;
- if( debug_count++ < 100 || geteuid() != 0 )
+ /*
+ * We need to be root to check/change log-file, skip this and let the main
+ * loop check do a new check as root.
+ */
+
+ if( geteuid() != 0 )
return;
- maxlog = lp_max_log_size() * 1024;
- if( !dbf || maxlog <= 0 )
+ if( !need_to_check_log_size() )
return;
+ maxlog = lp_max_log_size() * 1024;
+
if( sys_fstat( fileno( dbf ), &st ) == 0 && st.st_size > maxlog )
{
(void)fclose( dbf );
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index 2383b7a3a5..f378550282 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -971,6 +971,12 @@ machine %s in domain %s.\n", global_myname, global_myworkgroup ));
process_pending_change_notify_queue(t);
/*
+ * Now we are root, check if the log files need pruning.
+ */
+ if(need_to_check_log_size())
+ check_log_size();
+
+ /*
* Modify the select timeout depending upon
* what we have remaining in our queues.
*/