1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-28 01:58:17 +03:00

This is the checkin of the debug changes.

Makefile.in:  I've added debug.o.
  proto.h    :  Rebuilt, as is standard for these sorts of things.
  smb.h      :  New macros, etc.
  util.c     :  Debug code removed.

I'll check in debug.c in the next step.

Chris -)-----
(This used to be commit 653c17c1b8e34bfbd05ea35ada9436a50d5a7ba4)
This commit is contained in:
Christopher R. Hertel 1998-07-31 20:16:35 +00:00
parent 3a1fdf05dd
commit ebd415c03f
4 changed files with 71 additions and 294 deletions

View File

@ -130,7 +130,7 @@ PASSDB_OBJ = passdb.o ldap.o smbpass.o nisppass.o smbpassfile.o
# general utility object files
UTILOBJ1 = util.o system.o charset.o kanji.o fault.o smbencrypt.o smbdes.o charcnv.o genrand.o
UTILOBJ2 = $(UTILOBJ1) md4.o loadparm.o params.o pcap.o username.o time.o membuffer.o namequery.o nmblib.o
UTILOBJ3 = $(UTILOBJ2) signal.o netmask.o dfree.o
UTILOBJ3 = $(UTILOBJ2) signal.o netmask.o dfree.o debug.o
UTILOBJ = $(UTILOBJ3) credentials.o interface.o replace.o print_svid.o smberr.o pidfile.o slprintf.o \
$(SSL_OBJ) $(UBIOBJ)

View File

@ -160,6 +160,15 @@ BOOL deal_with_creds(uchar sess_key[8],
DOM_CRED *sto_clnt_cred,
DOM_CRED *rcv_clnt_cred, DOM_CRED *rtn_srv_cred);
/*The following definitions come from debug.c */
int sig_usr2( void );
int sig_usr1( void );
void setup_logging( char *pname, BOOL interactive );
void reopen_logs( void );
void force_check_log_size( void );
BOOL dbghdr( int level, char *file, char *func, int line );
/*The following definitions come from dfree.c */
int sys_disk_free(char *path,int *bsize,int *dfree,int *dsize);
@ -1972,11 +1981,6 @@ BOOL user_in_list(char *user,char *list);
/*The following definitions come from util.c */
int sig_usr2(void);
int sig_usr1(void);
void setup_logging(char *pname,BOOL interactive);
void reopen_logs(void);
void force_check_log_size(void);
char *tmpdir(void);
BOOL is_a_socket(int fd);
BOOL next_token(char **ptr,char *buff,char *sep);

View File

@ -90,17 +90,69 @@ typedef unsigned short uint16;
/* how long to wait for secondary SMB packets (milli-seconds) */
#define SMB_SECONDARY_WAIT (60*1000)
/* debugging code */
#if !defined(WITH_SYSLOG) || defined(NO_SYSLOG)
#define DEBUG(level,body) ((DEBUGLEVEL>=(level))?(Debug1 body):0)
#define DEBUGLVL(level) (DEBUGLEVEL>=(level))
#else
extern int syslog_level;
/* -------------------------------------------------------------------------- **
* Debugging code. See also debug.c
*/
#define DEBUG(level,body) ((DEBUGLEVEL>=(level))? (syslog_level = (level), Debug1 body):0)
#define DEBUGLVL(level) ( DEBUGLEVEL >= (syslog_level=(level)) )
/* mkproto.awk has trouble with ifdef'd function definitions (it ignores
* the #ifdef directive and will read both definitions, thus creating two
* diffferent prototype declarations), so we must do these by hand.
*/
#ifdef HAVE_STDARG_H
int Debug1( char *, ... );
BOOL dbgtext( char *, ... );
#else
int Debug1();
BOOL dbgtext();
#endif
/* If we have these macros, we can add additional info to the header. */
#ifdef HAVE_FILE_MACRO
#define FILE_MACRO (__FILE__)
#else
#define FILE_MACRO ("")
#endif
#ifdef HAVE_FUNCTION_MACRO
#define FUNCTION_MACRO (__FUNCTION__)
#else
#define FUNCTION_MACRO ("")
#endif
/* Debugging macros.
* DEBUGLVL() - If level is <= the system-wide DEBUGLEVEL then generate a
* header using the default macros for file, line, and
* function name.
* Returns True if the debug level was <= DEBUGLEVEL.
* Example usage:
* if( DEBUGLVL( 2 ) )
* dbgtext( "Some text.\n" );
* DEGUG() - Good old DEBUG(). Each call to DEBUG() will generate a new
* header *unless* the previous debug output was unterminated
* (i.e., no '\n'). See debug.c:dbghdr() for more info.
* Example usage:
* DEBUG( 2, ("Some text.\n") );
* DEBUGADD() - If level <= DEBUGLEVEL, then the text is appended to the
* current message (i.e., no header).
* Usage:
* DEBUGADD( 2, ("Some additional text.\n") );
*/
#define DEBUGLVL( level ) \
( (DEBUGLEVEL>=(level)) \
&& dbghdr( level, FILE_MACRO, FUNCTION_MACRO, (__LINE__) ) )
#define DEBUG( level, body ) \
if( (DEBUGLEVEL>=(level)) \
&& dbghdr( level, FILE_MACRO, FUNCTION_MACRO, (__LINE__) ) ) \
(void)dbgtext body
#define DEBUGADD( level, body ) \
if( DEBUGLEVEL>=(level) ) (void)dbgtext body
/* End Debugging code section.
* -------------------------------------------------------------------------- **
*/
/* this defines the error codes that receive_smb can put in smb_read_error */
#define READ_TIMEOUT 1
#define READ_EOF 2
@ -1154,10 +1206,8 @@ struct parm_struct
#define ERRCMD 0xFF /* Command was not in the "SMB" format. */
#ifdef HAVE_STDARG_H
int Debug1(char *, ...);
int slprintf(char *str, int n, char *format, ...);
#else
int Debug1();
int slprintf();
#endif

View File

@ -38,7 +38,7 @@ extern int sslFd;
pstring scope = "";
int DEBUGLEVEL = 1;
extern int DEBUGLEVEL;
BOOL passive = False;
@ -47,9 +47,6 @@ int Protocol = PROTOCOL_COREPLUS;
/* a default finfo structure to ensure all fields are sensible */
file_info def_finfo = {-1,0,0,0,0,0,0,""};
/* these are some file handles where debug info will be stored */
FILE *dbf = NULL;
/* the client file descriptor */
int Client = -1;
@ -69,9 +66,6 @@ int trans_num = 0;
*/
int case_default = CASE_LOWER;
pstring debugf = "";
int syslog_level = 0;
/* the following control case operations - they are put here so the
client can link easily */
BOOL case_sensitive;
@ -99,280 +93,9 @@ char **my_netbios_names;
int smb_read_error = 0;
static BOOL stdout_logging = False;
static char *filename_dos(char *path,char *buf);
#if defined(SIGUSR2)
/******************************************************************************
catch a sigusr2 - decrease the debug log level.
*****************************************************************************/
int sig_usr2(void)
{
BlockSignals( True, SIGUSR2);
DEBUGLEVEL--;
if(DEBUGLEVEL < 0)
DEBUGLEVEL = 0;
DEBUG( 0, ( "Got SIGUSR2 set debug level to %d.\n", DEBUGLEVEL ) );
BlockSignals( False, SIGUSR2);
CatchSignal(SIGUSR2, SIGNAL_CAST sig_usr2);
return(0);
}
#endif /* SIGUSR1 */
#if defined(SIGUSR1)
/******************************************************************************
catch a sigusr1 - increase the debug log level.
*****************************************************************************/
int sig_usr1(void)
{
BlockSignals( True, SIGUSR1);
DEBUGLEVEL++;
if(DEBUGLEVEL > 10)
DEBUGLEVEL = 10;
DEBUG( 0, ( "Got SIGUSR1 set debug level to %d.\n", DEBUGLEVEL ) );
BlockSignals( False, SIGUSR1);
CatchSignal(SIGUSR1, SIGNAL_CAST sig_usr1);
return(0);
}
#endif /* SIGUSR1 */
/*******************************************************************
get ready for syslog stuff
******************************************************************/
void setup_logging(char *pname,BOOL interactive)
{
#ifdef WITH_SYSLOG
if (!interactive) {
char *p = strrchr(pname,'/');
if (p) pname = p+1;
#ifdef LOG_DAEMON
openlog(pname, LOG_PID, SYSLOG_FACILITY);
#else /* for old systems that have no facility codes. */
openlog(pname, LOG_PID);
#endif
}
#endif
if (interactive) {
stdout_logging = True;
dbf = stdout;
}
}
BOOL append_log=False;
/****************************************************************************
reopen the log files
****************************************************************************/
void reopen_logs(void)
{
pstring fname;
if (DEBUGLEVEL > 0)
{
pstrcpy(fname,debugf);
if (lp_loaded() && (*lp_logfile()))
pstrcpy(fname,lp_logfile());
if (!strcsequal(fname,debugf) || !dbf || !file_exist(debugf,NULL))
{
int oldumask = umask(022);
pstrcpy(debugf,fname);
if (dbf)
fclose(dbf);
if (append_log)
dbf = fopen(debugf,"a");
else
dbf = fopen(debugf,"w");
/*
* Fix from klausr@ITAP.Physik.Uni-Stuttgart.De
* to fix problem where smbd's that generate less
* than 100 messages keep growing the log.
*/
force_check_log_size();
if (dbf)
setbuf(dbf,NULL);
umask(oldumask);
}
}
else
{
if (dbf)
{
fclose(dbf);
dbf = NULL;
}
}
}
/*******************************************************************
Number of debug messages that have been output.
Used to check log size.
********************************************************************/
static int debug_count=0;
/*******************************************************************
Force a check of the log size.
********************************************************************/
void force_check_log_size(void)
{
debug_count = 100;
}
/*******************************************************************
Check if the log has grown too big
********************************************************************/
static void check_log_size(void)
{
int maxlog;
struct stat st;
if (debug_count++ < 100 || getuid() != 0)
return;
maxlog = lp_max_log_size() * 1024;
if (!dbf || maxlog <= 0)
return;
if (fstat(fileno(dbf),&st) == 0 && st.st_size > maxlog) {
fclose(dbf);
dbf = NULL;
reopen_logs();
if (dbf && file_size(debugf) > maxlog) {
pstring name;
fclose(dbf);
dbf = NULL;
slprintf(name,sizeof(name)-1,"%s.old",debugf);
rename(debugf,name);
reopen_logs();
}
}
debug_count=0;
}
/*******************************************************************
write an debug message on the debugfile. This is called by the DEBUG
macro
********************************************************************/
#ifdef HAVE_STDARG_H
int Debug1(char *format_str, ...)
{
#else
int Debug1(va_alist)
va_dcl
{
char *format_str;
#endif
va_list ap;
int old_errno = errno;
if (stdout_logging) {
#ifdef HAVE_STDARG_H
va_start(ap, format_str);
#else
va_start(ap);
format_str = va_arg(ap,char *);
#endif
vfprintf(dbf,format_str,ap);
va_end(ap);
errno = old_errno;
return(0);
}
#ifdef WITH_SYSLOG
if (!lp_syslog_only())
#endif
{
if (!dbf) {
int oldumask = umask(022);
if(append_log)
dbf = fopen(debugf,"a");
else
dbf = fopen(debugf,"w");
umask(oldumask);
if (dbf) {
setbuf(dbf,NULL);
} else {
errno = old_errno;
return(0);
}
}
}
#ifdef WITH_SYSLOG
if (syslog_level < lp_syslog())
{
/*
* map debug levels to syslog() priorities
* note that not all DEBUG(0, ...) calls are
* necessarily errors
*/
static int priority_map[] = {
LOG_ERR, /* 0 */
LOG_WARNING, /* 1 */
LOG_NOTICE, /* 2 */
LOG_INFO, /* 3 */
};
int priority;
pstring msgbuf;
if (syslog_level >= sizeof(priority_map) / sizeof(priority_map[0]) ||
syslog_level < 0)
priority = LOG_DEBUG;
else
priority = priority_map[syslog_level];
#ifdef HAVE_STDARG_H
va_start(ap, format_str);
#else
va_start(ap);
format_str = va_arg(ap,char *);
#endif
vslprintf(msgbuf, sizeof(msgbuf)-1,format_str, ap);
va_end(ap);
msgbuf[255] = '\0';
syslog(priority, "%s", msgbuf);
}
#endif
#ifdef WITH_SYSLOG
if (!lp_syslog_only())
#endif
{
#ifdef HAVE_STDARG_H
va_start(ap, format_str);
#else
va_start(ap);
format_str = va_arg(ap,char *);
#endif
vfprintf(dbf,format_str,ap);
va_end(ap);
fflush(dbf);
}
check_log_size();
errno = old_errno;
return(0);
}
/****************************************************************************
find a suitable temporary directory. The result should be copied immediately