diff options
-rw-r--r-- | source3/include/proto.h | 3 | ||||
-rw-r--r-- | source3/lib/debug.c | 38 | ||||
-rw-r--r-- | source3/smbd/process.c | 6 |
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. */ |