1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-02 00:22:11 +03:00

r12576: r12115@cabra: derrell | 2005-12-29 11:16:03 -0500

bug (enhancement) #2651: add option to log debug messages to stderr instead of stdout
(This used to be commit 4182eb99af)
This commit is contained in:
Derrell Lipman
2005-12-29 16:26:06 +00:00
committed by Gerald (Jerry) Carter
parent 7919fd0ec8
commit e13d0cb3ec
3 changed files with 75 additions and 19 deletions

View File

@ -29,6 +29,7 @@ int
main(int argc, char * argv[])
{
int debug = 0;
int debug_stderr = 0;
int scan = 0;
int iterations = -1;
int again;
@ -37,6 +38,7 @@ main(int argc, char * argv[])
char * q;
char buf[1024];
poptContext pc;
SMBCCTX * context;
struct poptOption long_options[] =
{
POPT_AUTOHELP
@ -44,6 +46,10 @@ main(int argc, char * argv[])
"debug", 'd', POPT_ARG_INT, &debug,
0, "Set debug level", "integer"
},
{
"stderr", 'e', POPT_ARG_NONE, &debug_stderr,
0, "Debug log to stderr instead of stdout", "integer"
},
{
"scan", 's', POPT_ARG_NONE, &scan,
0, "Scan for servers and shares", "integer"
@ -69,14 +75,36 @@ main(int argc, char * argv[])
}
}
/* Allocate a new context */
context = smbc_new_context();
if (!context) {
printf("Could not allocate new smbc context\n");
return 1;
}
/* Set mandatory options (is that a contradiction in terms?) */
context->debug = debug;
context->callbacks.auth_fn = (scan ? no_auth_data_fn : get_auth_data_fn);
/* If we've been asked to log to stderr instead of stdout... */
if (debug_stderr) {
/* ... then set the option to do so */
smbc_option_set(context, "debug_stderr", NULL);
}
/* Initialize the context using the previously specified options */
if (!smbc_init_context(context)) {
smbc_free_context(context, 0);
printf("Could not initialize smbc context\n");
return 1;
}
/* Tell the compatibility layer to use this context */
smbc_set_context(context);
if (scan)
{
if (smbc_init(no_auth_data_fn, debug) != 0)
{
printf("Could not initialize smbc_ library\n");
return 1;
}
for (;
iterations == -1 || iterations > 0;
iterations = (iterations == -1 ? iterations : --iterations))
@ -87,12 +115,6 @@ main(int argc, char * argv[])
}
else
{
if (smbc_init(get_auth_data_fn, debug) != 0)
{
printf("Could not initialize smbc_ library\n");
return 1;
}
for (;
iterations == -1 || iterations > 0;
iterations = (iterations == -1 ? iterations : --iterations))

View File

@ -47,11 +47,12 @@ struct _SMBCFILE {
struct smbc_internal_data {
/** INTERNAL: is this handle initialized ?
/*
* Is this handle initialized ?
*/
int _initialized;
BOOL _initialized;
/** INTERNAL: dirent pointer location
/* dirent pointer location
*
* Leave room for any urlencoded filename and the comment field.
*
@ -64,13 +65,20 @@ struct smbc_internal_data {
*/
char _dirent[1024];
/** INTERNAL: server connection list
/*
* server connection list
*/
SMBCSRV * _servers;
/** INTERNAL: open file/dir list
/*
* open file/dir list
*/
SMBCFILE * _files;
/*
* Log to standard error instead of the more typical standard output
*/
BOOL _debug_stderr;
};

View File

@ -5937,6 +5937,27 @@ smbc_free_context(SMBCCTX *context,
}
/*
* Each time the context structure is changed, we have binary backward
* compatibility issues. Instead of modifying the public portions of the
* context structure to add new options, instead, we put them in the internal
* portion of the context structure and provide a set function for these new
* options.
*/
void
smbc_option_set(SMBCCTX *context,
char *option_name,
void *option_value)
{
if (strcmp(option_name, "debug_stderr") == 0) {
/*
* Log to standard error instead of standard output.
*/
context->internal->_debug_stderr = True;
}
}
/*
* Initialise the library etc
*
@ -5982,7 +6003,12 @@ smbc_init_context(SMBCCTX *context)
DEBUGLEVEL = context->debug;
load_case_tables();
setup_logging( "libsmbclient", True);
setup_logging("libsmbclient", True);
if (context->internal->_debug_stderr) {
dbf = x_stderr;
x_setbuf(x_stderr, NULL);
}
/* Here we would open the smb.conf file if needed ... */
@ -6099,7 +6125,7 @@ smbc_init_context(SMBCCTX *context)
* FIXME: Should we check the function pointers here?
*/
context->internal->_initialized = 1;
context->internal->_initialized = True;
return context;
}