mirror of https://github.com/neutrinolabs/xrdp
Add log_config_init_for_console() for utilities
This commit is contained in:
parent
28c35f962d
commit
8d994a547d
94
common/log.c
94
common/log.c
|
@ -150,13 +150,6 @@ internal_log_start(struct log_config *l_cfg)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* if logfile is NULL, we return error */
|
||||
if (0 == l_cfg->log_file)
|
||||
{
|
||||
g_writeln("log_file not properly assigned");
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* if progname is NULL, we return error */
|
||||
if (0 == l_cfg->program_name)
|
||||
{
|
||||
|
@ -164,14 +157,20 @@ internal_log_start(struct log_config *l_cfg)
|
|||
return ret;
|
||||
}
|
||||
|
||||
internal_log_config_dump(l_cfg);
|
||||
if (l_cfg->dump_on_start)
|
||||
{
|
||||
internal_log_config_dump(l_cfg);
|
||||
}
|
||||
|
||||
/* open file */
|
||||
l_cfg->fd = internal_log_file_open(l_cfg->log_file);
|
||||
|
||||
if (-1 == l_cfg->fd)
|
||||
if (l_cfg->log_file != NULL)
|
||||
{
|
||||
return LOG_ERROR_FILE_OPEN;
|
||||
l_cfg->fd = internal_log_file_open(l_cfg->log_file);
|
||||
|
||||
if (-1 == l_cfg->fd)
|
||||
{
|
||||
return LOG_ERROR_FILE_OPEN;
|
||||
}
|
||||
}
|
||||
|
||||
/* if syslog is enabled, open it */
|
||||
|
@ -304,6 +303,7 @@ internal_config_read_logging(int file,
|
|||
lc->console_level = LOG_LEVEL_INFO;
|
||||
lc->enable_syslog = 0;
|
||||
lc->syslog_level = LOG_LEVEL_INFO;
|
||||
lc->dump_on_start = 1;
|
||||
lc->enable_pid = 0;
|
||||
|
||||
g_snprintf(section_name, 511, "%s%s", section_prefix, SESMAN_CFG_LOGGING);
|
||||
|
@ -409,21 +409,40 @@ internal_log_config_dump(struct log_config *config)
|
|||
{
|
||||
char str_level[20];
|
||||
#ifdef LOG_PER_LOGGER_LEVEL
|
||||
struct log_logger_level* logger;
|
||||
struct log_logger_level *logger;
|
||||
int i;
|
||||
#endif
|
||||
|
||||
g_printf("logging configuration:\r\n");
|
||||
internal_log_lvl2str(config->log_level, str_level);
|
||||
g_printf("\tLogFile: %s\r\n", config->log_file);
|
||||
g_printf("\tLogLevel: %s\r\n", str_level);
|
||||
if (config->log_file)
|
||||
{
|
||||
internal_log_lvl2str(config->log_level, str_level);
|
||||
g_printf("\tLogFile: %s\r\n", config->log_file);
|
||||
g_printf("\tLogLevel: %s\r\n", str_level);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_printf("\tLogFile: %s\r\n", "<disabled>");
|
||||
}
|
||||
|
||||
internal_log_lvl2str(config->console_level, str_level);
|
||||
g_printf("\tEnableConsole: %s\r\n", (config->enable_console ? "true" : "false"));
|
||||
if (config->enable_console)
|
||||
{
|
||||
internal_log_lvl2str(config->console_level, str_level);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_strcpy(str_level, "<disabled>");
|
||||
}
|
||||
g_printf("\tConsoleLevel: %s\r\n", str_level);
|
||||
|
||||
internal_log_lvl2str(config->syslog_level, str_level);
|
||||
g_printf("\tEnableSyslog: %s\r\n", (config->enable_syslog ? "true" : "false"));
|
||||
if (config->enable_syslog)
|
||||
{
|
||||
internal_log_lvl2str(config->syslog_level, str_level);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_strcpy(str_level, "<disabled>");
|
||||
}
|
||||
g_printf("\tSyslogLevel: %s\r\n", str_level);
|
||||
|
||||
#ifdef LOG_PER_LOGGER_LEVEL
|
||||
|
@ -487,6 +506,7 @@ internal_log_config_copy(struct log_config *dest, const struct log_config *src)
|
|||
dest->enable_console = src->enable_console;
|
||||
dest->console_level = src->console_level;
|
||||
dest->enable_pid = src->enable_pid;
|
||||
dest->dump_on_start = src->dump_on_start;
|
||||
for (i = 0; i < src->per_logger_level->count; ++i)
|
||||
{
|
||||
struct log_logger_level *dst_logger =
|
||||
|
@ -551,6 +571,22 @@ internal_log_location_overrides_level(const char *function_name,
|
|||
* Here below the public functions
|
||||
*/
|
||||
|
||||
struct log_config *
|
||||
log_config_init_for_console(enum logLevels lvl)
|
||||
{
|
||||
struct log_config *config = internalInitAndAllocStruct();
|
||||
|
||||
if (config != NULL)
|
||||
{
|
||||
config->program_name = "<null>";
|
||||
config->enable_console = 1;
|
||||
config->console_level = lvl;
|
||||
config->dump_on_start = 0; /* Don't need dump for console only */
|
||||
}
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
struct log_config *
|
||||
log_config_init_from_config(const char *iniFilename,
|
||||
const char *applicationName,
|
||||
|
@ -755,12 +791,12 @@ log_hexdump_with_location(const char *function_name,
|
|||
dump_buffer = (char *)g_malloc(dump_length, 1);
|
||||
if (dump_buffer == NULL)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_WARNING,
|
||||
"Failed to allocate buffer for hex dump of size %d",
|
||||
LOG_DEVEL(LOG_LEVEL_WARNING,
|
||||
"Failed to allocate buffer for hex dump of size %d",
|
||||
dump_length);
|
||||
return LOG_ERROR_MALLOC;
|
||||
}
|
||||
|
||||
|
||||
line = (unsigned char *)src;
|
||||
offset = 0;
|
||||
|
||||
|
@ -981,23 +1017,23 @@ internal_log_message(const enum logLevels lvl,
|
|||
if (override_destination_level || lvl <= g_staticLogConfig->log_level)
|
||||
{
|
||||
/* log to application logfile */
|
||||
#ifdef LOG_ENABLE_THREAD
|
||||
pthread_mutex_lock(&(g_staticLogConfig->log_lock));
|
||||
#endif
|
||||
|
||||
if (g_staticLogConfig->fd >= 0)
|
||||
{
|
||||
#ifdef LOG_ENABLE_THREAD
|
||||
pthread_mutex_lock(&(g_staticLogConfig->log_lock));
|
||||
#endif
|
||||
|
||||
writereply = g_file_write(g_staticLogConfig->fd, buff, g_strlen(buff));
|
||||
|
||||
if (writereply <= 0)
|
||||
{
|
||||
rv = LOG_ERROR_NULL_FILE;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef LOG_ENABLE_THREAD
|
||||
pthread_mutex_unlock(&(g_staticLogConfig->log_lock));
|
||||
pthread_mutex_unlock(&(g_staticLogConfig->log_lock));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
|
|
11
common/log.h
11
common/log.h
|
@ -155,6 +155,7 @@ struct log_config
|
|||
int enable_syslog;
|
||||
enum logLevels syslog_level;
|
||||
struct list *per_logger_level;
|
||||
int dump_on_start;
|
||||
int enable_pid;
|
||||
pthread_mutex_t log_lock;
|
||||
pthread_mutexattr_t log_lock_attr;
|
||||
|
@ -268,6 +269,16 @@ log_start(const char *iniFile, const char *applicationName);
|
|||
enum logReturns
|
||||
log_start_from_param(const struct log_config *src_log_config);
|
||||
|
||||
/**
|
||||
* Sets up a suitable log config for writing to the console only
|
||||
* (i.e. for a utility)
|
||||
*
|
||||
* The config can be customised by the caller before calling
|
||||
* log_start_from_param()
|
||||
*/
|
||||
struct log_config*
|
||||
log_config_init_for_console(enum logLevels lvl);
|
||||
|
||||
/**
|
||||
* Read configuration from a file and store the values in the returned
|
||||
* log_config.
|
||||
|
|
|
@ -37,8 +37,6 @@ char cmnd[257];
|
|||
char serv[257];
|
||||
char port[257];
|
||||
|
||||
struct log_config logging;
|
||||
|
||||
void cmndList(struct SCP_CONNECTION *c);
|
||||
void cmndKill(struct SCP_CONNECTION *c, struct SCP_SESSION *s);
|
||||
void cmndHelp(void);
|
||||
|
@ -56,6 +54,7 @@ int main(int argc, char **argv)
|
|||
//int sel;
|
||||
int sock;
|
||||
char *pwd;
|
||||
struct log_config *logging;
|
||||
|
||||
user[0] = '\0';
|
||||
pass[0] = '\0';
|
||||
|
@ -63,11 +62,9 @@ int main(int argc, char **argv)
|
|||
serv[0] = '\0';
|
||||
port[0] = '\0';
|
||||
|
||||
logging.program_name = "sesadmin";
|
||||
logging.log_file = g_strdup("xrdp-sesadmin.log");
|
||||
logging.log_level = LOG_LEVEL_DEBUG;
|
||||
logging.enable_syslog = 0;
|
||||
log_start_from_param(&logging);
|
||||
logging = log_config_init_for_console(LOG_LEVEL_INFO);
|
||||
log_start_from_param(logging);
|
||||
log_config_free(logging);
|
||||
|
||||
for (idx = 0; idx < argc; idx++)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue