Migrating logging to LOG() and LOG_DEVEL() in sesman/*
This commit is contained in:
parent
19260cc90c
commit
0c61a15fc5
344
common/log.c
344
common/log.c
@ -268,32 +268,30 @@ internal_log_text2level(const char *buf)
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
struct log_config*
|
||||
internal_config_read_logging(int file,
|
||||
const char *applicationName,
|
||||
struct log_config *
|
||||
internal_config_read_logging(int file,
|
||||
const char *applicationName,
|
||||
const char *section_prefix)
|
||||
{
|
||||
int i;
|
||||
char *buf;
|
||||
char *temp_buf;
|
||||
char section_name[512];
|
||||
int len;
|
||||
struct log_logger_level* logger;
|
||||
struct log_config *lc;
|
||||
struct list *param_n;
|
||||
struct list *param_v;
|
||||
|
||||
|
||||
lc = internalInitAndAllocStruct();
|
||||
if (lc == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
param_n = list_create();
|
||||
param_n->auto_free = 1;
|
||||
param_v = list_create();
|
||||
param_v->auto_free = 1;
|
||||
|
||||
|
||||
list_clear(param_v);
|
||||
list_clear(param_n);
|
||||
|
||||
@ -345,17 +343,17 @@ internal_config_read_logging(int file,
|
||||
{
|
||||
lc->syslog_level = internal_log_text2level((char *)list_get_item(param_v, i));
|
||||
}
|
||||
|
||||
|
||||
if (0 == g_strcasecmp(buf, SESMAN_CFG_LOG_ENABLE_CONSOLE))
|
||||
{
|
||||
lc->enable_console = g_text2bool((char *)list_get_item(param_v, i));
|
||||
}
|
||||
|
||||
|
||||
if (0 == g_strcasecmp(buf, SESMAN_CFG_LOG_CONSOLE_LEVEL))
|
||||
{
|
||||
lc->console_level = internal_log_text2level((char *)list_get_item(param_v, i));
|
||||
}
|
||||
|
||||
|
||||
if (0 == g_strcasecmp(buf, SESMAN_CFG_LOG_ENABLE_PID))
|
||||
{
|
||||
lc->enable_pid = g_text2bool((char *)list_get_item(param_v, i));
|
||||
@ -370,31 +368,36 @@ internal_config_read_logging(int file,
|
||||
/* try to create path if not exist */
|
||||
g_create_path(lc->log_file);
|
||||
|
||||
#ifdef LOG_PER_LOGGER_LEVEL
|
||||
int len;
|
||||
struct log_logger_level *logger;
|
||||
|
||||
list_clear(param_v);
|
||||
list_clear(param_n);
|
||||
g_snprintf(section_name, 511, "%s%s", section_prefix, SESMAN_CFG_LOGGING_LOGGER);
|
||||
file_read_section(file, section_name, param_n, param_v);
|
||||
for (i = 0; i < param_n->count; i++)
|
||||
{
|
||||
logger = (struct log_logger_level*)g_malloc(sizeof(struct log_logger_level), 1);
|
||||
logger = (struct log_logger_level *)g_malloc(sizeof(struct log_logger_level), 1);
|
||||
list_add_item(lc->per_logger_level, (tbus) logger);
|
||||
logger->log_level = internal_log_text2level((char *)list_get_item(param_v, i));
|
||||
|
||||
g_strncpy(logger->logger_name, (char *)list_get_item(param_n, i), LOGGER_NAME_SIZE);
|
||||
logger->logger_name[LOGGER_NAME_SIZE] = '\0';
|
||||
len = g_strlen(logger->logger_name);
|
||||
if(len >= 2
|
||||
&& logger->logger_name[len-2] == '('
|
||||
&& logger->logger_name[len-1] == ')' )
|
||||
if (len >= 2
|
||||
&& logger->logger_name[len - 2] == '('
|
||||
&& logger->logger_name[len - 1] == ')' )
|
||||
{
|
||||
logger->logger_type = LOG_TYPE_FUNCTION;
|
||||
logger->logger_name[len-2] = '\0';
|
||||
logger->logger_name[len - 2] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
logger->logger_type = LOG_TYPE_FILE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
list_delete(param_v);
|
||||
list_delete(param_n);
|
||||
@ -405,26 +408,29 @@ void
|
||||
internal_log_config_dump(struct log_config *config)
|
||||
{
|
||||
char str_level[20];
|
||||
#ifdef LOG_PER_LOGGER_LEVEL
|
||||
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);
|
||||
|
||||
|
||||
internal_log_lvl2str(config->console_level, str_level);
|
||||
g_printf("\tEnableConsole: %s\r\n", (config->enable_console ? "true" : "false"));
|
||||
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"));
|
||||
g_printf("\tSyslogLevel: %s\r\n", str_level);
|
||||
|
||||
|
||||
#ifdef LOG_PER_LOGGER_LEVEL
|
||||
g_printf("per logger configuration:\r\n");
|
||||
for (i = 0; i < config->per_logger_level->count; i++)
|
||||
{
|
||||
logger = (struct log_logger_level*)list_get_item(config->per_logger_level, i);
|
||||
logger = (struct log_logger_level *)list_get_item(config->per_logger_level, i);
|
||||
internal_log_lvl2str(logger->log_level, str_level);
|
||||
g_printf("\t%-*s: %s\r\n", LOGGER_NAME_SIZE, logger->logger_name, str_level);
|
||||
}
|
||||
@ -432,9 +438,10 @@ internal_log_config_dump(struct log_config *config)
|
||||
{
|
||||
g_printf("\tNone\r\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
struct log_config*
|
||||
struct log_config *
|
||||
internalInitAndAllocStruct(void)
|
||||
{
|
||||
struct log_config *ret = g_new0(struct log_config, 1);
|
||||
@ -482,35 +489,82 @@ internal_log_config_copy(struct log_config *dest, const struct log_config *src)
|
||||
dest->enable_pid = src->enable_pid;
|
||||
for (i = 0; i < src->per_logger_level->count; ++i)
|
||||
{
|
||||
struct log_logger_level *dst_logger =
|
||||
(struct log_logger_level*)g_malloc(sizeof(struct log_logger_level), 1);
|
||||
|
||||
g_memcpy(dst_logger,
|
||||
(struct log_logger_level*) list_get_item(src->per_logger_level, i),
|
||||
struct log_logger_level *dst_logger =
|
||||
(struct log_logger_level *)g_malloc(sizeof(struct log_logger_level), 1);
|
||||
|
||||
g_memcpy(dst_logger,
|
||||
(struct log_logger_level *) list_get_item(src->per_logger_level, i),
|
||||
sizeof(struct log_logger_level));
|
||||
|
||||
|
||||
list_add_item(dest->per_logger_level, (tbus) dst_logger);
|
||||
}
|
||||
}
|
||||
|
||||
bool_t
|
||||
internal_log_is_enabled_for_level(const enum logLevels log_level,
|
||||
const bool_t override_destination_level)
|
||||
{
|
||||
/* Is log initialized? */
|
||||
if (g_staticLogConfig == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Is there at least one log destination which will accept the message based on the log level? */
|
||||
return (g_staticLogConfig->fd >= 0
|
||||
&& (override_destination_level || log_level <= g_staticLogConfig->log_level))
|
||||
|| (g_staticLogConfig->enable_syslog
|
||||
&& (override_destination_level || log_level <= g_staticLogConfig->syslog_level))
|
||||
|| (g_staticLogConfig->enable_console
|
||||
&& (override_destination_level || log_level <= g_staticLogConfig->console_level));
|
||||
}
|
||||
|
||||
bool_t
|
||||
internal_log_location_overrides_level(const char *function_name,
|
||||
const char *file_name,
|
||||
const enum logLevels log_level)
|
||||
{
|
||||
struct log_logger_level *logger = NULL;
|
||||
int i;
|
||||
|
||||
if (g_staticLogConfig == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
for (i = 0; i < g_staticLogConfig->per_logger_level->count; i++)
|
||||
{
|
||||
logger = (struct log_logger_level *)list_get_item(g_staticLogConfig->per_logger_level, i);
|
||||
|
||||
if ((logger->logger_type == LOG_TYPE_FILE
|
||||
&& 0 == g_strncmp(logger->logger_name, file_name, LOGGER_NAME_SIZE))
|
||||
|| (logger->logger_type == LOG_TYPE_FUNCTION
|
||||
&& 0 == g_strncmp(logger->logger_name, function_name, LOGGER_NAME_SIZE)))
|
||||
{
|
||||
return (log_level <= logger->log_level);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Here below the public functions
|
||||
*/
|
||||
|
||||
struct log_config*
|
||||
log_config_init_from_config(const char *iniFilename,
|
||||
const char *applicationName,
|
||||
struct log_config *
|
||||
log_config_init_from_config(const char *iniFilename,
|
||||
const char *applicationName,
|
||||
const char *section_prefix)
|
||||
{
|
||||
int fd;
|
||||
struct log_config* config;
|
||||
struct log_config *config;
|
||||
|
||||
if (applicationName == NULL)
|
||||
{
|
||||
g_writeln("Programming error your application name cannot be null");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
if (iniFilename == NULL)
|
||||
{
|
||||
g_writeln("The inifile is null to log_config_init_from_config!");
|
||||
@ -534,7 +588,7 @@ log_config_init_from_config(const char *iniFilename,
|
||||
}
|
||||
|
||||
enum logReturns
|
||||
log_config_free(struct log_config* config)
|
||||
log_config_free(struct log_config *config)
|
||||
{
|
||||
if (config != NULL)
|
||||
{
|
||||
@ -574,7 +628,7 @@ log_start_from_param(const struct log_config *src_log_config)
|
||||
return LOG_ERROR_MALLOC;
|
||||
}
|
||||
internal_log_config_copy(g_staticLogConfig, src_log_config);
|
||||
|
||||
|
||||
ret = internal_log_start(g_staticLogConfig);
|
||||
if (ret != LOG_STARTUP_OK)
|
||||
{
|
||||
@ -637,51 +691,196 @@ log_end(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* produce a hex dump */
|
||||
enum logReturns
|
||||
log_message_with_location(const char *function_name,
|
||||
const char *file_name,
|
||||
const int line_number,
|
||||
const enum logLevels level,
|
||||
const char *msg,
|
||||
log_hexdump_with_location(const char *function_name,
|
||||
const char *file_name,
|
||||
const int line_number,
|
||||
const enum logLevels log_level,
|
||||
const char *message,
|
||||
const char *src,
|
||||
int len)
|
||||
{
|
||||
unsigned char *line;
|
||||
int i;
|
||||
int dump_number_lines;
|
||||
int dump_line_length;
|
||||
int dump_length;
|
||||
int dump_offset;
|
||||
int thisline;
|
||||
int offset;
|
||||
char *dump_buffer;
|
||||
enum logReturns rv;
|
||||
bool_t override_destination_level = 0;
|
||||
|
||||
/* Start the dump on a new line so that the first line of the dump is
|
||||
aligned to the first column instead of to after the log message
|
||||
preamble (eg. time, log level, ...)
|
||||
*/
|
||||
#define HEX_DUMP_SOURCE_BYTES_PER_LINE (16)
|
||||
#ifdef _WIN32
|
||||
#define HEX_DUMP_HEADER ("%s Hex Dump:\r\n")
|
||||
#define HEX_DUMP_NEWLINE_SIZE (2)
|
||||
#else
|
||||
#ifdef _MACOS
|
||||
#define HEX_DUMP_HEADER ("%s Hex Dump:\r")
|
||||
#define HEX_DUMP_NEWLINE_SIZE (1)
|
||||
#else
|
||||
#define HEX_DUMP_HEADER ("%s Hex Dump:\n")
|
||||
#define HEX_DUMP_NEWLINE_SIZE (1)
|
||||
#endif
|
||||
#endif
|
||||
#define HEX_DUMP_HEADER_SIZE (sizeof(HEX_DUMP_HEADER) - 1)
|
||||
|
||||
override_destination_level = internal_log_location_overrides_level(
|
||||
function_name,
|
||||
file_name,
|
||||
log_level);
|
||||
if (!internal_log_is_enabled_for_level(log_level, override_destination_level))
|
||||
{
|
||||
return LOG_STARTUP_OK;
|
||||
}
|
||||
|
||||
dump_line_length = (4 + 3 /* = 4 offset + 3 space */
|
||||
+ ((2 + 1) * HEX_DUMP_SOURCE_BYTES_PER_LINE) /* + (2 hex char + 1 space) per source byte */
|
||||
+ 2 /* + 2 space */
|
||||
+ HEX_DUMP_SOURCE_BYTES_PER_LINE
|
||||
+ HEX_DUMP_NEWLINE_SIZE);
|
||||
|
||||
dump_number_lines = (len / HEX_DUMP_SOURCE_BYTES_PER_LINE) + 1; /* +1 to round up */
|
||||
dump_length = (dump_number_lines *dump_line_length /* hex dump lines */
|
||||
+ HEX_DUMP_HEADER_SIZE
|
||||
+ 1); /* terminating NULL */
|
||||
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",
|
||||
dump_length);
|
||||
return LOG_ERROR_MALLOC;
|
||||
}
|
||||
|
||||
line = (unsigned char *)src;
|
||||
offset = 0;
|
||||
|
||||
g_memcpy(dump_buffer, HEX_DUMP_HEADER, HEX_DUMP_HEADER_SIZE);
|
||||
dump_offset = HEX_DUMP_HEADER_SIZE;
|
||||
|
||||
while (offset < len)
|
||||
{
|
||||
g_sprintf(dump_buffer + dump_offset, "%04x ", offset);
|
||||
dump_offset += 7;
|
||||
thisline = len - offset;
|
||||
|
||||
if (thisline > HEX_DUMP_SOURCE_BYTES_PER_LINE)
|
||||
{
|
||||
thisline = HEX_DUMP_SOURCE_BYTES_PER_LINE;
|
||||
}
|
||||
|
||||
for (i = 0; i < thisline; i++)
|
||||
{
|
||||
g_sprintf(dump_buffer + dump_offset, "%02x ", line[i]);
|
||||
dump_offset += 3;
|
||||
}
|
||||
|
||||
for (; i < HEX_DUMP_SOURCE_BYTES_PER_LINE; i++)
|
||||
{
|
||||
dump_buffer[dump_offset++] = ' ';
|
||||
dump_buffer[dump_offset++] = ' ';
|
||||
dump_buffer[dump_offset++] = ' ';
|
||||
}
|
||||
|
||||
dump_buffer[dump_offset++] = ' ';
|
||||
dump_buffer[dump_offset++] = ' ';
|
||||
|
||||
for (i = 0; i < thisline; i++)
|
||||
{
|
||||
dump_buffer[dump_offset++] = (line[i] >= 0x20 && line[i] < 0x7f) ? line[i] : '.';
|
||||
}
|
||||
|
||||
for (; i < HEX_DUMP_SOURCE_BYTES_PER_LINE; i++)
|
||||
{
|
||||
dump_buffer[dump_offset++] = ' ';
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
dump_buffer[dump_offset++] = '\r';
|
||||
dump_buffer[dump_offset++] = '\n';
|
||||
#else
|
||||
#ifdef _MACOS
|
||||
dump_buffer[dump_offset++] = '\r';
|
||||
#else
|
||||
dump_buffer[dump_offset++] = '\n';
|
||||
#endif
|
||||
#endif
|
||||
offset += thisline;
|
||||
line += thisline;
|
||||
|
||||
|
||||
if ((dump_offset - HEX_DUMP_HEADER_SIZE) % dump_line_length != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR,
|
||||
"BUG: dump_offset (%d) at the end of a line is not a "
|
||||
"multiple of the line length (%d)",
|
||||
dump_offset, dump_line_length);
|
||||
}
|
||||
|
||||
}
|
||||
if (dump_offset > dump_length)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR,
|
||||
"BUG: dump_offset (%d) is larger than the dump_buffer length (%d)",
|
||||
dump_offset, dump_length);
|
||||
g_free(dump_buffer);
|
||||
return LOG_GENERAL_ERROR;
|
||||
}
|
||||
|
||||
/* replace the last new line with the end of the string since log_message
|
||||
will add a new line */
|
||||
dump_buffer[dump_offset - HEX_DUMP_NEWLINE_SIZE] = '\0';
|
||||
|
||||
rv = log_message_with_location(function_name, file_name, line_number,
|
||||
log_level, dump_buffer, message);
|
||||
g_free(dump_buffer);
|
||||
return rv;
|
||||
}
|
||||
|
||||
enum logReturns
|
||||
log_message_with_location(const char *function_name,
|
||||
const char *file_name,
|
||||
const int line_number,
|
||||
const enum logLevels level,
|
||||
const char *msg,
|
||||
...)
|
||||
{
|
||||
va_list ap;
|
||||
enum logReturns rv;
|
||||
char buff[LOG_BUFFER_SIZE];
|
||||
struct log_logger_level *logger;
|
||||
int i;
|
||||
bool_t force_log = 0;
|
||||
|
||||
bool_t override_destination_level = 0;
|
||||
|
||||
if (g_staticLogConfig == NULL)
|
||||
{
|
||||
g_writeln("The log reference is NULL - log not initialized properly "
|
||||
"when called from [%s(%s:%d)]",
|
||||
"when called from [%s(%s:%d)]",
|
||||
function_name, file_name, line_number);
|
||||
return LOG_ERROR_NO_CFG;
|
||||
}
|
||||
for (i = 0; i < g_staticLogConfig->per_logger_level->count; i++)
|
||||
{
|
||||
logger = (struct log_logger_level *)list_get_item(g_staticLogConfig->per_logger_level, i);
|
||||
|
||||
if ((logger->logger_type == LOG_TYPE_FILE
|
||||
&& 0 == g_strncmp(logger->logger_name, file_name, LOGGER_NAME_SIZE))
|
||||
|| (logger->logger_type == LOG_TYPE_FUNCTION
|
||||
&& 0 == g_strncmp(logger->logger_name, function_name, LOGGER_NAME_SIZE)))
|
||||
{
|
||||
if(logger->log_level < level)
|
||||
{
|
||||
return LOG_STARTUP_OK;
|
||||
}
|
||||
force_log = 1;
|
||||
break;
|
||||
}
|
||||
override_destination_level = internal_log_location_overrides_level(
|
||||
function_name,
|
||||
file_name,
|
||||
level);
|
||||
if (!internal_log_is_enabled_for_level(level, override_destination_level))
|
||||
{
|
||||
return LOG_STARTUP_OK;
|
||||
}
|
||||
|
||||
g_snprintf(buff, LOG_BUFFER_SIZE, "[%s(%s:%d)] %s",
|
||||
|
||||
g_snprintf(buff, LOG_BUFFER_SIZE, "[%s(%s:%d)] %s",
|
||||
function_name, file_name, line_number, msg);
|
||||
|
||||
va_start(ap, msg);
|
||||
rv = internal_log_message(level, force_log, buff, ap);
|
||||
rv = internal_log_message(level, override_destination_level, buff, ap);
|
||||
va_end(ap);
|
||||
return rv;
|
||||
}
|
||||
@ -691,7 +890,7 @@ log_message(const enum logLevels lvl, const char *msg, ...)
|
||||
{
|
||||
va_list ap;
|
||||
enum logReturns rv;
|
||||
|
||||
|
||||
va_start(ap, msg);
|
||||
rv = internal_log_message(lvl, 0, msg, ap);
|
||||
va_end(ap);
|
||||
@ -699,7 +898,10 @@ log_message(const enum logLevels lvl, const char *msg, ...)
|
||||
}
|
||||
|
||||
enum logReturns
|
||||
internal_log_message(const enum logLevels lvl, bool_t force_log, const char *msg, va_list ap)
|
||||
internal_log_message(const enum logLevels lvl,
|
||||
bool_t override_destination_level,
|
||||
const char *msg,
|
||||
va_list ap)
|
||||
{
|
||||
char buff[LOG_BUFFER_SIZE + 31]; /* 19 (datetime) 4 (space+cr+lf+\0) */
|
||||
int len = 0;
|
||||
@ -714,16 +916,14 @@ internal_log_message(const enum logLevels lvl, bool_t force_log, const char *msg
|
||||
return LOG_ERROR_NO_CFG;
|
||||
}
|
||||
|
||||
if (0 > g_staticLogConfig->fd
|
||||
if (0 > g_staticLogConfig->fd
|
||||
&& g_staticLogConfig->enable_syslog == 0
|
||||
&& g_staticLogConfig->enable_console == 0)
|
||||
{
|
||||
return LOG_ERROR_FILE_NOT_OPEN;
|
||||
}
|
||||
|
||||
if (!((g_staticLogConfig->fd >= 0 && (force_log || lvl <= g_staticLogConfig->log_level))
|
||||
|| (g_staticLogConfig->enable_syslog && (force_log || lvl <= g_staticLogConfig->syslog_level))
|
||||
|| (g_staticLogConfig->enable_console && (force_log || lvl <= g_staticLogConfig->console_level))))
|
||||
if (!internal_log_is_enabled_for_level(lvl, override_destination_level))
|
||||
{
|
||||
return LOG_STARTUP_OK;
|
||||
}
|
||||
@ -737,7 +937,7 @@ internal_log_message(const enum logLevels lvl, bool_t force_log, const char *msg
|
||||
|
||||
if (g_staticLogConfig->enable_pid)
|
||||
{
|
||||
g_snprintf(buff + 28, LOG_BUFFER_SIZE, "[pid:%d tid:%lld] ",
|
||||
g_snprintf(buff + 28, LOG_BUFFER_SIZE, "[pid:%d tid:%lld] ",
|
||||
g_getpid(), (long long) tc_get_threadid());
|
||||
len = g_strlen(buff + 28);
|
||||
}
|
||||
@ -765,20 +965,20 @@ internal_log_message(const enum logLevels lvl, bool_t force_log, const char *msg
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (g_staticLogConfig->enable_syslog && (force_log || lvl <= g_staticLogConfig->syslog_level))
|
||||
if (g_staticLogConfig->enable_syslog && (override_destination_level || lvl <= g_staticLogConfig->syslog_level))
|
||||
{
|
||||
/* log to syslog*/
|
||||
/* %s fix compiler warning 'not a string literal' */
|
||||
syslog(internal_log_xrdp2syslog(lvl), "%s", buff + 20);
|
||||
}
|
||||
|
||||
if (g_staticLogConfig->enable_console && (force_log || lvl <= g_staticLogConfig->console_level))
|
||||
if (g_staticLogConfig->enable_console && (override_destination_level || lvl <= g_staticLogConfig->console_level))
|
||||
{
|
||||
/* log to console */
|
||||
g_printf("%s", buff);
|
||||
}
|
||||
|
||||
if (force_log || lvl <= g_staticLogConfig->log_level)
|
||||
if (override_destination_level || lvl <= g_staticLogConfig->log_level)
|
||||
{
|
||||
/* log to application logfile */
|
||||
#ifdef LOG_ENABLE_THREAD
|
||||
|
50
common/log.h
50
common/log.h
@ -25,7 +25,7 @@
|
||||
#include "list.h"
|
||||
|
||||
/* logging buffer size */
|
||||
#define LOG_BUFFER_SIZE 1024
|
||||
#define LOG_BUFFER_SIZE 8192
|
||||
#define LOGGER_NAME_SIZE 50
|
||||
|
||||
/* logging levels */
|
||||
@ -66,6 +66,8 @@ enum logReturns
|
||||
|
||||
#ifdef XRDP_DEBUG
|
||||
|
||||
#define LOG_PER_LOGGER_LEVEL
|
||||
|
||||
/**
|
||||
* @brief Logging macro for messages that are for an XRDP developper to
|
||||
* understand and debug XRDP code.
|
||||
@ -107,9 +109,26 @@ enum logReturns
|
||||
*/
|
||||
#define LOG(log_level, args...) \
|
||||
log_message_with_location(__func__, __FILE__, __LINE__, log_level, args);
|
||||
|
||||
/**
|
||||
* @brief Logging macro for logging the contents of a byte array using a hex
|
||||
* dump format.
|
||||
*
|
||||
* Note: the logging function calls are removed when XRDP_DEBUG is NOT defined.
|
||||
*
|
||||
* @param log_level, the log level
|
||||
* @param message, a message prefix for the hex dump. Note: no printf like
|
||||
* formatting is done to this message.
|
||||
* @param buffer, a pointer to the byte array to log as a hex dump
|
||||
* @param length, the length of the byte array to log
|
||||
*/
|
||||
#define LOG_DEVEL_HEXDUMP(log_level, message, buffer, length) \
|
||||
log_hexdump_with_location(__func__, __FILE__, __LINE__, log_level, message, buffer, length);
|
||||
|
||||
#else
|
||||
#define LOG_DEVEL(log_level, args...)
|
||||
#define LOG(log_level, args...) log_message(log_level, args);
|
||||
#define LOG_DEVEL_HEXDUMP(log_level, message, buffer, length)
|
||||
#endif
|
||||
|
||||
enum log_logger_type
|
||||
@ -205,6 +224,26 @@ internal_log_config_dump(struct log_config *config);
|
||||
enum logReturns
|
||||
internal_log_message(const enum logLevels lvl, bool_t force_log, const char *msg, va_list args);
|
||||
|
||||
/**
|
||||
* @param log_level, the log level
|
||||
* @param override_destination_level, if true then the destinatino log level is ignored.
|
||||
* @return true if at least one log destination will accept a message logged at the given level.
|
||||
*/
|
||||
bool_t
|
||||
internal_log_is_enabled_for_level(const enum logLevels log_level,
|
||||
const bool_t override_destination_level);
|
||||
|
||||
/**
|
||||
* @param function_name, the function name (typicaly the __func__ macro)
|
||||
* @param file_name, the file name (typicaly the __FILE__ macro)
|
||||
* @param log_level, the log level
|
||||
* @return true if the logger location overrides the destination log levels
|
||||
*/
|
||||
bool_t
|
||||
internal_log_location_overrides_level(const char *function_name,
|
||||
const char *file_name,
|
||||
const enum logLevels log_level);
|
||||
|
||||
/*End of internal functions*/
|
||||
#endif
|
||||
|
||||
@ -290,6 +329,15 @@ log_message_with_location(const char *function_name,
|
||||
const char *msg,
|
||||
...) printflike(5, 6);
|
||||
|
||||
enum logReturns
|
||||
log_hexdump_with_location(const char *function_name,
|
||||
const char *file_name,
|
||||
const int line_number,
|
||||
const enum logLevels log_level,
|
||||
const char *msg,
|
||||
const char *p,
|
||||
int len);
|
||||
|
||||
/**
|
||||
* This function returns the configured file name for the logfile
|
||||
* @param replybuf the buffer where the reply is stored
|
||||
|
@ -41,32 +41,32 @@ access_login_allowed(const char *user)
|
||||
|
||||
if ((0 == g_strncmp(user, "root", 5)) && (0 == g_cfg->sec.allow_root))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"ROOT login attempted, but root login is disabled");
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"ROOT login attempted, but root login is disabled");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((0 == g_cfg->sec.ts_users_enable) && (0==g_cfg->sec.ts_always_group_check))
|
||||
if ((0 == g_cfg->sec.ts_users_enable) && (0 == g_cfg->sec.ts_always_group_check))
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "Terminal Server Users group is disabled, allowing authentication");
|
||||
LOG(LOG_LEVEL_INFO, "Terminal Server Users group is disabled, allowing authentication");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (0 != g_getuser_info(user, &gid, 0, 0, 0, 0))
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "Cannot read user info! - login denied");
|
||||
LOG(LOG_LEVEL_ERROR, "Cannot read user info! - login denied");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (g_cfg->sec.ts_users == gid)
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG,"ts_users is user's primary group");
|
||||
LOG(LOG_LEVEL_DEBUG, "ts_users is user's primary group");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (0 != g_check_user_in_group(user, g_cfg->sec.ts_users, &ok))
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "Cannot read group info! - login denied");
|
||||
LOG(LOG_LEVEL_ERROR, "Cannot read group info! - login denied");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -75,7 +75,7 @@ access_login_allowed(const char *user)
|
||||
return 1;
|
||||
}
|
||||
|
||||
log_message(LOG_LEVEL_INFO, "login denied for user %s", user);
|
||||
LOG(LOG_LEVEL_INFO, "login denied for user %s", user);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -89,21 +89,21 @@ access_login_mng_allowed(const char *user)
|
||||
|
||||
if ((0 == g_strncmp(user, "root", 5)) && (0 == g_cfg->sec.allow_root))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[MNG] ROOT login attempted, but root login is disabled");
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[MNG] ROOT login attempted, but root login is disabled");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (0 == g_cfg->sec.ts_admins_enable)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "[MNG] Terminal Server Admin group is disabled, "
|
||||
"allowing authentication");
|
||||
LOG(LOG_LEVEL_INFO, "[MNG] Terminal Server Admin group is disabled, "
|
||||
"allowing authentication");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (0 != g_getuser_info(user, &gid, 0, 0, 0, 0))
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "[MNG] Cannot read user info! - login denied");
|
||||
LOG(LOG_LEVEL_ERROR, "[MNG] Cannot read user info! - login denied");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -115,7 +115,7 @@ access_login_mng_allowed(const char *user)
|
||||
|
||||
if (0 != g_check_user_in_group(user, g_cfg->sec.ts_admins, &ok))
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "[MNG] Cannot read group info! - login denied");
|
||||
LOG(LOG_LEVEL_ERROR, "[MNG] Cannot read group info! - login denied");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -124,7 +124,7 @@ access_login_mng_allowed(const char *user)
|
||||
return 1;
|
||||
}
|
||||
|
||||
log_message(LOG_LEVEL_INFO, "[MNG] login denied for user %s", user);
|
||||
LOG(LOG_LEVEL_INFO, "[MNG] login denied for user %s", user);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -153,8 +153,8 @@ audin_send_formats(int chan_id)
|
||||
{
|
||||
wf = g_server_formats[index];
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "audin_send_formats: sending format wFormatTag 0x%4.4x "
|
||||
"nChannels %d nSamplesPerSec %d",
|
||||
wf->wFormatTag, wf->nChannels, wf->nSamplesPerSec);
|
||||
"nChannels %d nSamplesPerSec %d",
|
||||
wf->wFormatTag, wf->nChannels, wf->nSamplesPerSec);
|
||||
out_uint16_le(s, wf->wFormatTag);
|
||||
out_uint16_le(s, wf->nChannels);
|
||||
out_uint32_le(s, wf->nSamplesPerSec);
|
||||
@ -261,8 +261,8 @@ audin_process_formats(int chan_id, struct stream *s)
|
||||
in_uint16_le(s, wf->wBitsPerSample);
|
||||
in_uint16_le(s, wf->cbSize);
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "audin_process_formats: recved format wFormatTag 0x%4.4x "
|
||||
"nChannels %d nSamplesPerSec %d",
|
||||
wf->wFormatTag, wf->nChannels, wf->nSamplesPerSec);
|
||||
"nChannels %d nSamplesPerSec %d",
|
||||
wf->wFormatTag, wf->nChannels, wf->nSamplesPerSec);
|
||||
if (wf->cbSize > 0)
|
||||
{
|
||||
if (!s_check_rem(s, wf->cbSize))
|
||||
@ -334,7 +334,7 @@ audin_process_format_change(int chan_id, struct stream *s)
|
||||
}
|
||||
in_uint32_le(s, g_current_format);
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "audin_process_format_change: g_current_format %d",
|
||||
g_current_format);
|
||||
g_current_format);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -406,8 +406,8 @@ audin_data_fragment(int chan_id, char *data, int bytes)
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "audin_data_fragment:");
|
||||
if (!s_check_rem(g_in_s, bytes))
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "audin_data_fragment: error bytes %d left %d",
|
||||
bytes, (int) (g_in_s->end - g_in_s->p));
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "audin_data_fragment: error bytes %d left %d",
|
||||
bytes, (int) (g_in_s->end - g_in_s->p));
|
||||
return 1;
|
||||
}
|
||||
out_uint8a(g_in_s, data, bytes);
|
||||
@ -444,8 +444,7 @@ audin_data(int chan_id, char *data, int bytes)
|
||||
{
|
||||
struct stream ls;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "audin_data:");
|
||||
//g_hexdump(data, bytes);
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "audin_data:", data, bytes);
|
||||
if (g_in_s == NULL)
|
||||
{
|
||||
g_memset(&ls, 0, sizeof(ls));
|
||||
@ -485,7 +484,7 @@ int
|
||||
audin_start(void)
|
||||
{
|
||||
int error;
|
||||
struct stream* s;
|
||||
struct stream *s;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "audin_start:");
|
||||
if (g_audin_chanid != 0)
|
||||
|
@ -263,8 +263,8 @@ send_channel_data(int chan_id, const char *data, int size)
|
||||
struct stream *s;
|
||||
|
||||
if ((chan_id < 0) || (chan_id > 31) ||
|
||||
(data == NULL) ||
|
||||
(size < 1) || (size > MAX_CHANNEL_BYTES))
|
||||
(data == NULL) ||
|
||||
(size < 1) || (size > MAX_CHANNEL_BYTES))
|
||||
{
|
||||
/* bad param */
|
||||
return 1;
|
||||
@ -308,11 +308,11 @@ send_channel_data(int chan_id, const char *data, int size)
|
||||
/*****************************************************************************/
|
||||
/* returns error */
|
||||
int
|
||||
send_rail_drawing_orders(char* data, int size)
|
||||
send_rail_drawing_orders(char *data, int size)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::send_rail_drawing_orders: size %d", size);
|
||||
|
||||
struct stream* s;
|
||||
struct stream *s;
|
||||
int error;
|
||||
|
||||
s = trans_get_out_s(g_con_trans, 8192);
|
||||
@ -352,7 +352,7 @@ process_message_channel_setup(struct stream *s)
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "process_message_channel_setup:");
|
||||
in_uint16_le(s, num_chans);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "process_message_channel_setup: num_chans %d",
|
||||
num_chans);
|
||||
num_chans);
|
||||
|
||||
for (index = 0; index < num_chans; index++)
|
||||
{
|
||||
@ -362,7 +362,7 @@ process_message_channel_setup(struct stream *s)
|
||||
in_uint16_le(s, ci->id);
|
||||
in_uint16_le(s, ci->flags);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "process_message_channel_setup: chan name '%s' "
|
||||
"id %d flags %8.8x", ci->name, ci->id, ci->flags);
|
||||
"id %d flags %8.8x", ci->name, ci->id, ci->flags);
|
||||
|
||||
if (g_strcasecmp(ci->name, "cliprdr") == 0)
|
||||
{
|
||||
@ -443,7 +443,7 @@ process_message_channel_data(struct stream *s)
|
||||
in_uint16_le(s, length);
|
||||
in_uint32_le(s, total_length);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "process_message_channel_data: chan_id %d "
|
||||
"chan_flags %d", chan_id, chan_flags);
|
||||
"chan_flags %d", chan_id, chan_flags);
|
||||
rv = 0;
|
||||
|
||||
if (rv == 0)
|
||||
@ -1259,7 +1259,7 @@ setup_listen(void)
|
||||
if (error != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "setup_listen: trans_listen failed for port %s",
|
||||
port);
|
||||
port);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -1282,7 +1282,7 @@ setup_api_listen(void)
|
||||
if (error != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "setup_api_listen: trans_listen failed for port %s",
|
||||
port);
|
||||
port);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -1299,11 +1299,11 @@ api_con_trans_list_get_wait_objs_rw(intptr_t *robjs, int *rcount,
|
||||
struct trans *ltran;
|
||||
|
||||
for (api_con_index = g_api_con_trans_list->count - 1;
|
||||
api_con_index >= 0;
|
||||
api_con_index--)
|
||||
api_con_index >= 0;
|
||||
api_con_index--)
|
||||
{
|
||||
ltran = (struct trans *)
|
||||
list_get_item(g_api_con_trans_list, api_con_index);
|
||||
list_get_item(g_api_con_trans_list, api_con_index);
|
||||
if (ltran != NULL)
|
||||
{
|
||||
trans_get_wait_objs_rw(ltran, robjs, rcount, wobjs, wcount,
|
||||
@ -1323,11 +1323,11 @@ api_con_trans_list_check_wait_objs(void)
|
||||
struct xrdp_api_data *ad;
|
||||
|
||||
for (api_con_index = g_api_con_trans_list->count - 1;
|
||||
api_con_index >= 0;
|
||||
api_con_index--)
|
||||
api_con_index >= 0;
|
||||
api_con_index--)
|
||||
{
|
||||
ltran = (struct trans *)
|
||||
list_get_item(g_api_con_trans_list, api_con_index);
|
||||
list_get_item(g_api_con_trans_list, api_con_index);
|
||||
if (ltran != NULL)
|
||||
{
|
||||
if (trans_check_wait_objs(ltran) != 0)
|
||||
@ -1340,8 +1340,8 @@ api_con_trans_list_check_wait_objs(void)
|
||||
chansrv_drdynvc_close(ad->chan_id);
|
||||
}
|
||||
for (drdynvc_index = 0;
|
||||
drdynvc_index < (int) ARRAYSIZE(g_drdynvcs);
|
||||
drdynvc_index++)
|
||||
drdynvc_index < (int) ARRAYSIZE(g_drdynvcs);
|
||||
drdynvc_index++)
|
||||
{
|
||||
if (g_drdynvcs[drdynvc_index].xrdp_api_trans == ltran)
|
||||
{
|
||||
@ -1364,11 +1364,11 @@ api_con_trans_list_remove_all(void)
|
||||
struct trans *ltran;
|
||||
|
||||
for (api_con_index = g_api_con_trans_list->count - 1;
|
||||
api_con_index >= 0;
|
||||
api_con_index--)
|
||||
api_con_index >= 0;
|
||||
api_con_index--)
|
||||
{
|
||||
ltran = (struct trans *)
|
||||
list_get_item(g_api_con_trans_list, api_con_index);
|
||||
list_get_item(g_api_con_trans_list, api_con_index);
|
||||
if (ltran != NULL)
|
||||
{
|
||||
list_remove_item(g_api_con_trans_list, api_con_index);
|
||||
@ -1426,7 +1426,7 @@ channel_thread_loop(void *in_val)
|
||||
if (trans_check_wait_objs(g_lis_trans) != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "channel_thread_loop: "
|
||||
"trans_check_wait_objs error");
|
||||
"trans_check_wait_objs error");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1435,7 +1435,7 @@ channel_thread_loop(void *in_val)
|
||||
if (trans_check_wait_objs(g_con_trans) != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "channel_thread_loop: "
|
||||
"trans_check_wait_objs error resetting");
|
||||
"trans_check_wait_objs error resetting");
|
||||
clipboard_deinit();
|
||||
sound_deinit();
|
||||
devredir_deinit();
|
||||
@ -1643,7 +1643,7 @@ main_cleanup(void)
|
||||
static int
|
||||
get_log_path(char *path, int bytes)
|
||||
{
|
||||
char* log_path;
|
||||
char *log_path;
|
||||
int rv;
|
||||
|
||||
rv = 1;
|
||||
@ -1778,7 +1778,7 @@ main(int argc, char **argv)
|
||||
logconfig->log_file = NULL;
|
||||
log_config_free(logconfig);
|
||||
logconfig = NULL;
|
||||
|
||||
|
||||
if (error != LOG_STARTUP_OK)
|
||||
{
|
||||
switch (error)
|
||||
|
@ -41,60 +41,86 @@ char g_fuse_clipboard_path[256] = ""; /* for clipboard use */
|
||||
#include "chansrv_xfs.h"
|
||||
|
||||
/* dummy calls when XRDP_FUSE is not defined */
|
||||
int xfuse_init(void) { return 0; }
|
||||
int xfuse_deinit(void) { return 0; }
|
||||
int xfuse_check_wait_objs(void) { return 0; }
|
||||
int xfuse_get_wait_objs(tbus *objs, int *count, int *timeout) { return 0; }
|
||||
int xfuse_create_share(tui32 device_id, const char *dirname) { return 0; }
|
||||
int xfuse_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int xfuse_deinit(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int xfuse_check_wait_objs(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int xfuse_get_wait_objs(tbus *objs, int *count, int *timeout)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int xfuse_create_share(tui32 device_id, const char *dirname)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
void xfuse_delete_share(tui32 share_id) {}
|
||||
int xfuse_clear_clip_dir(void) { return 0; }
|
||||
int xfuse_file_contents_range(int stream_id, const char *data, int data_bytes) { return 0; }
|
||||
int xfuse_clear_clip_dir(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int xfuse_file_contents_range(int stream_id, const char *data, int data_bytes)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int xfuse_file_contents_size(int stream_id, int file_size)
|
||||
{ return 0; }
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
int xfuse_add_clip_dir_item(const char *filename,
|
||||
int flags, int size, int lindex) { return 0; }
|
||||
int flags, int size, int lindex)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void xfuse_devredir_cb_enum_dir_add_entry(
|
||||
struct state_dirscan *fip,
|
||||
const char *name,
|
||||
const struct file_attr *fattr)
|
||||
{}
|
||||
struct state_dirscan *fip,
|
||||
const char *name,
|
||||
const struct file_attr *fattr)
|
||||
{}
|
||||
void xfuse_devredir_cb_enum_dir_done(struct state_dirscan *fip,
|
||||
enum NTSTATUS IoStatus)
|
||||
{}
|
||||
{}
|
||||
void xfuse_devredir_cb_lookup_entry(struct state_lookup *fip,
|
||||
enum NTSTATUS IoStatus,
|
||||
const struct file_attr *file_info)
|
||||
{}
|
||||
{}
|
||||
void xfuse_devredir_cb_setattr(struct state_setattr *fip,
|
||||
enum NTSTATUS IoStatus)
|
||||
{}
|
||||
{}
|
||||
void xfuse_devredir_cb_create_file(struct state_create *fip,
|
||||
enum NTSTATUS IoStatus,
|
||||
tui32 DeviceId, tui32 FileId)
|
||||
{}
|
||||
{}
|
||||
void xfuse_devredir_cb_open_file(struct state_open *fip,
|
||||
enum NTSTATUS IoStatus,
|
||||
tui32 DeviceId, tui32 FileId)
|
||||
{}
|
||||
{}
|
||||
void xfuse_devredir_cb_read_file(struct state_read *fip,
|
||||
enum NTSTATUS IoStatus,
|
||||
const char *buf, size_t length)
|
||||
{}
|
||||
{}
|
||||
void xfuse_devredir_cb_write_file(
|
||||
struct state_write *fip,
|
||||
enum NTSTATUS IoStatus,
|
||||
off_t offset,
|
||||
size_t length)
|
||||
{}
|
||||
struct state_write *fip,
|
||||
enum NTSTATUS IoStatus,
|
||||
off_t offset,
|
||||
size_t length)
|
||||
{}
|
||||
void xfuse_devredir_cb_rmdir_or_file(struct state_remove *fip,
|
||||
enum NTSTATUS IoStatus)
|
||||
{}
|
||||
{}
|
||||
void xfuse_devredir_cb_rename_file(struct state_rename *fip,
|
||||
enum NTSTATUS IoStatus)
|
||||
{}
|
||||
{}
|
||||
void xfuse_devredir_cb_file_close(struct state_close *fip)
|
||||
{}
|
||||
{}
|
||||
|
||||
#else
|
||||
|
||||
@ -161,11 +187,11 @@ struct state_lookup
|
||||
fuse_req_t req; /* Original FUSE request from lookup */
|
||||
fuse_ino_t pinum; /* inum of parent directory */
|
||||
char name[XFS_MAXFILENAMELEN];
|
||||
/* Name to look up */
|
||||
/* Name to look up */
|
||||
fuse_ino_t existing_inum;
|
||||
/* inum of an existing entry */
|
||||
/* inum of an existing entry */
|
||||
tui32 existing_generation;
|
||||
/* generation of the above */
|
||||
/* generation of the above */
|
||||
};
|
||||
|
||||
/*
|
||||
@ -200,7 +226,7 @@ struct state_create
|
||||
struct fuse_file_info fi; /* File info struct passed to open */
|
||||
fuse_ino_t pinum; /* inum of parent directory */
|
||||
char name[XFS_MAXFILENAMELEN];
|
||||
/* Name of file in parent directory */
|
||||
/* Name of file in parent directory */
|
||||
mode_t mode; /* Mode of file to create */
|
||||
};
|
||||
|
||||
@ -239,7 +265,7 @@ struct state_rename
|
||||
fuse_ino_t pinum; /* inum of parent of file */
|
||||
fuse_ino_t new_pinum; /* inum of new parent of file */
|
||||
char name[XFS_MAXFILENAMELEN];
|
||||
/* New name of file in new parent dir */
|
||||
/* New name of file in new parent dir */
|
||||
};
|
||||
|
||||
/*
|
||||
@ -257,11 +283,11 @@ struct xfuse_handle
|
||||
tui32 DeviceId;
|
||||
tui32 FileId;
|
||||
int is_loc_resource; /* this is not a redirected resource */
|
||||
|
||||
|
||||
/* a directory handle, if this xfuse_handle represents a directory.
|
||||
* NULL, if this xfuse_handle represents a file.
|
||||
*
|
||||
* Note: when this xfuse_handle represents a directory, then the other
|
||||
* Note: when this xfuse_handle represents a directory, then the other
|
||||
* fields of this structure contain invalid values.
|
||||
*/
|
||||
struct xfs_dir_handle *dir_handle;
|
||||
@ -359,12 +385,12 @@ static void xfuse_cb_releasedir(fuse_req_t req, fuse_ino_t ino,
|
||||
|
||||
/* miscellaneous functions */
|
||||
static void xfs_inode_to_fuse_entry_param(const XFS_INODE *xinode,
|
||||
struct fuse_entry_param *e);
|
||||
struct fuse_entry_param *e);
|
||||
static void make_fuse_entry_reply(fuse_req_t req, const XFS_INODE *xinode);
|
||||
static void make_fuse_attr_reply(fuse_req_t req, const XFS_INODE *xinode);
|
||||
static const char *filename_on_device(const char *full_path);
|
||||
static void update_inode_file_attributes(const struct file_attr *fattr,
|
||||
tui32 change_mask, XFS_INODE *xinode);
|
||||
tui32 change_mask, XFS_INODE *xinode);
|
||||
static char *get_name_for_entry_in_parent(fuse_ino_t parent, const char *name);
|
||||
|
||||
/*****************************************************************************/
|
||||
@ -375,7 +401,7 @@ load_fuse_config(void)
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
XFUSE_HANDLE*
|
||||
XFUSE_HANDLE *
|
||||
xfuse_handle_create()
|
||||
{
|
||||
return g_new0(XFUSE_HANDLE, 1);
|
||||
@ -389,7 +415,7 @@ xfuse_handle_delete(XFUSE_HANDLE *self)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (self->dir_handle != NULL)
|
||||
{
|
||||
free(self->dir_handle);
|
||||
@ -405,7 +431,7 @@ xfuse_handle_to_fuse_handle(XFUSE_HANDLE *self)
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
XFUSE_HANDLE*
|
||||
XFUSE_HANDLE *
|
||||
xfuse_handle_from_fuse_handle(uint64_t handle)
|
||||
{
|
||||
return (XFUSE_HANDLE *) (tintptr) handle;
|
||||
@ -460,7 +486,9 @@ xfuse_init(void)
|
||||
|
||||
/* setup xrdp file system */
|
||||
if (xfuse_init_xrdp_fs())
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* setup FUSE callbacks */
|
||||
g_memset(&g_xfuse_ops, 0, sizeof(g_xfuse_ops));
|
||||
@ -547,7 +575,9 @@ int xfuse_check_wait_objs(void)
|
||||
int rval;
|
||||
|
||||
if (g_ch == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (g_tcp_select(g_fd, 0) & 1)
|
||||
{
|
||||
@ -555,13 +585,19 @@ int xfuse_check_wait_objs(void)
|
||||
|
||||
rval = fuse_chan_recv(&tmpch, g_buffer, g_bufsize);
|
||||
if (rval == -EINTR)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rval == -ENODEV)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rval <= 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
fuse_session_process(g_se, g_buffer, rval, tmpch);
|
||||
}
|
||||
@ -580,7 +616,9 @@ int xfuse_get_wait_objs(tbus *objs, int *count, int *timeout)
|
||||
int lcount;
|
||||
|
||||
if (g_ch == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
lcount = *count;
|
||||
objs[lcount] = g_fd;
|
||||
@ -604,7 +642,7 @@ int xfuse_create_share(tui32 device_id, const char *dirname)
|
||||
XFS_INODE *xinode;
|
||||
|
||||
if (dirname != NULL && strlen(dirname) > 0 &&
|
||||
xfuse_init_xrdp_fs() == 0)
|
||||
xfuse_init_xrdp_fs() == 0)
|
||||
{
|
||||
xinode = xfs_add_entry(g_xfs, FUSE_ROOT_ID, dirname, (0777 | S_IFDIR));
|
||||
if (xinode == NULL)
|
||||
@ -694,7 +732,7 @@ xfuse_file_contents_range(int stream_id, const char *data, int data_bytes)
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "requesting clipboard file data");
|
||||
|
||||
clipboard_request_file_data(rli->stream_id, rli->lindex,
|
||||
rli->off, rli->size);
|
||||
rli->off, rli->size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -828,7 +866,7 @@ static int xfuse_init_xrdp_fs(void)
|
||||
{
|
||||
g_clipboard_inum = xino->inum;
|
||||
result = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -863,9 +901,9 @@ static int xfuse_deinit_xrdp_fs(void)
|
||||
*****************************************************************************/
|
||||
|
||||
void xfuse_devredir_cb_enum_dir_add_entry(
|
||||
struct state_dirscan *fip,
|
||||
const char *name,
|
||||
const struct file_attr *fattr)
|
||||
struct state_dirscan *fip,
|
||||
const char *name,
|
||||
const struct file_attr *fattr)
|
||||
{
|
||||
XFS_INODE *xinode = NULL;
|
||||
|
||||
@ -947,9 +985,9 @@ void xfuse_devredir_cb_enum_dir_done(struct state_dirscan *fip,
|
||||
{
|
||||
struct fuse_file_info *fi = &fip->fi;
|
||||
XFUSE_HANDLE *xhandle = xfuse_handle_create();
|
||||
|
||||
|
||||
if (xhandle == NULL
|
||||
|| (xhandle->dir_handle = xfs_opendir(g_xfs, fip->pinum)) == NULL)
|
||||
|| (xhandle->dir_handle = xfs_opendir(g_xfs, fip->pinum)) == NULL)
|
||||
{
|
||||
xfuse_handle_delete(xhandle);
|
||||
fuse_reply_err(fip->req, ENOMEM);
|
||||
@ -965,7 +1003,7 @@ void xfuse_devredir_cb_enum_dir_done(struct state_dirscan *fip,
|
||||
}
|
||||
|
||||
/**
|
||||
* This routine is caused as a result of a devredir remote lookup
|
||||
* This routine is caused as a result of a devredir remote lookup
|
||||
* instigated by xfuse_cb_lookup()
|
||||
*****************************************************************************/
|
||||
|
||||
@ -980,8 +1018,8 @@ void xfuse_devredir_cb_lookup_entry(struct state_lookup *fip,
|
||||
switch (IoStatus)
|
||||
{
|
||||
case STATUS_SHARING_VIOLATION:
|
||||
/* This can happen when trying to read the attributes of
|
||||
* some system files (e.g. pagefile.sys) */
|
||||
/* This can happen when trying to read the attributes of
|
||||
* some system files (e.g. pagefile.sys) */
|
||||
case STATUS_ACCESS_DENIED:
|
||||
fuse_reply_err(fip->req, EACCES);
|
||||
break;
|
||||
@ -994,10 +1032,10 @@ void xfuse_devredir_cb_lookup_entry(struct state_lookup *fip,
|
||||
|
||||
case STATUS_NO_SUCH_FILE:
|
||||
/* Remove our copy, if any */
|
||||
if (fip->existing_inum &&
|
||||
(xinode = xfs_get(g_xfs, fip->existing_inum)) != NULL &&
|
||||
xinode->generation == fip->existing_generation)
|
||||
{
|
||||
if (fip->existing_inum &&
|
||||
(xinode = xfs_get(g_xfs, fip->existing_inum)) != NULL &&
|
||||
xinode->generation == fip->existing_generation)
|
||||
{
|
||||
xfs_remove_entry(g_xfs, fip->existing_inum);
|
||||
}
|
||||
fuse_reply_err(fip->req, ENOENT);
|
||||
@ -1024,7 +1062,7 @@ void xfuse_devredir_cb_lookup_entry(struct state_lookup *fip,
|
||||
{
|
||||
/* Is the existing file the same type ? */
|
||||
if ((xinode->mode & (S_IFREG | S_IFDIR)) ==
|
||||
(file_info->mode & (S_IFREG | S_IFDIR)))
|
||||
(file_info->mode & (S_IFREG | S_IFDIR)))
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "inode=%ld name=%s already exists in xrdp_fs as %ld",
|
||||
fip->pinum, fip->name, xinode->inum);
|
||||
@ -1105,14 +1143,14 @@ void xfuse_devredir_cb_setattr(struct state_setattr *fip,
|
||||
switch (IoStatus)
|
||||
{
|
||||
case STATUS_SHARING_VIOLATION:
|
||||
/* This can happen when trying to read the attributes of
|
||||
* some system files (e.g. pagefile.sys) */
|
||||
/* This can happen when trying to read the attributes of
|
||||
* some system files (e.g. pagefile.sys) */
|
||||
case STATUS_ACCESS_DENIED:
|
||||
fuse_reply_err(fip->req, EACCES);
|
||||
break;
|
||||
|
||||
case STATUS_UNSUCCESSFUL:
|
||||
/* Happens if we try to lookup an illegal filename */
|
||||
/* Happens if we try to lookup an illegal filename */
|
||||
case STATUS_NO_SUCH_FILE:
|
||||
fuse_reply_err(fip->req, ENOENT);
|
||||
break;
|
||||
@ -1148,18 +1186,18 @@ void xfuse_devredir_cb_create_file(struct state_create *fip,
|
||||
{
|
||||
switch (IoStatus)
|
||||
{
|
||||
case STATUS_ACCESS_DENIED:
|
||||
fuse_reply_err(fip->req, EACCES);
|
||||
break;
|
||||
case STATUS_ACCESS_DENIED:
|
||||
fuse_reply_err(fip->req, EACCES);
|
||||
break;
|
||||
|
||||
case STATUS_OBJECT_NAME_INVALID:
|
||||
case STATUS_OBJECT_NAME_NOT_FOUND:
|
||||
fuse_reply_err(fip->req, ENOENT);
|
||||
break;
|
||||
case STATUS_OBJECT_NAME_INVALID:
|
||||
case STATUS_OBJECT_NAME_NOT_FOUND:
|
||||
fuse_reply_err(fip->req, ENOENT);
|
||||
break;
|
||||
|
||||
default:
|
||||
fuse_reply_err(fip->req, EIO);
|
||||
break;
|
||||
default:
|
||||
fuse_reply_err(fip->req, EIO);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1250,18 +1288,18 @@ void xfuse_devredir_cb_open_file(struct state_open *fip,
|
||||
{
|
||||
switch (IoStatus)
|
||||
{
|
||||
case STATUS_ACCESS_DENIED:
|
||||
fuse_reply_err(fip->req, EACCES);
|
||||
break;
|
||||
case STATUS_ACCESS_DENIED:
|
||||
fuse_reply_err(fip->req, EACCES);
|
||||
break;
|
||||
|
||||
case STATUS_OBJECT_NAME_INVALID:
|
||||
case STATUS_OBJECT_NAME_NOT_FOUND:
|
||||
fuse_reply_err(fip->req, ENOENT);
|
||||
break;
|
||||
case STATUS_OBJECT_NAME_INVALID:
|
||||
case STATUS_OBJECT_NAME_NOT_FOUND:
|
||||
fuse_reply_err(fip->req, ENOENT);
|
||||
break;
|
||||
|
||||
default:
|
||||
fuse_reply_err(fip->req, EIO);
|
||||
break;
|
||||
default:
|
||||
fuse_reply_err(fip->req, EIO);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -1311,10 +1349,10 @@ void xfuse_devredir_cb_read_file(struct state_read *fip,
|
||||
}
|
||||
|
||||
void xfuse_devredir_cb_write_file(
|
||||
struct state_write *fip,
|
||||
enum NTSTATUS IoStatus,
|
||||
off_t offset,
|
||||
size_t length)
|
||||
struct state_write *fip,
|
||||
enum NTSTATUS IoStatus,
|
||||
off_t offset,
|
||||
size_t length)
|
||||
{
|
||||
XFS_INODE *xinode;
|
||||
|
||||
@ -1381,7 +1419,7 @@ void xfuse_devredir_cb_rename_file(struct state_rename *fip,
|
||||
status =
|
||||
(IoStatus == STATUS_SHARING_VIOLATION) ? EBUSY :
|
||||
(IoStatus == STATUS_ACCESS_DENIED) ? EACCES :
|
||||
/* default */ EEXIST ;
|
||||
/* default */ EEXIST ;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1480,7 +1518,7 @@ static void xfuse_cb_lookup(fuse_req_t req, fuse_ino_t parent, const char *name)
|
||||
fip->existing_generation = xinode->generation;
|
||||
}
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "Looking up %s in %s on %d", name, cptr,
|
||||
parent_xinode->device_id);
|
||||
parent_xinode->device_id);
|
||||
/*
|
||||
* If this call succeeds, further request processing happens in
|
||||
* xfuse_devredir_cb_lookup_entry()
|
||||
@ -1505,7 +1543,7 @@ static void xfuse_cb_lookup(fuse_req_t req, fuse_ino_t parent, const char *name)
|
||||
*****************************************************************************/
|
||||
|
||||
static void xfuse_cb_getattr(fuse_req_t req, fuse_ino_t ino,
|
||||
struct fuse_file_info *fi)
|
||||
struct fuse_file_info *fi)
|
||||
{
|
||||
XFS_INODE *xino;
|
||||
|
||||
@ -1550,12 +1588,12 @@ static int xfuse_dirbuf_add1(fuse_req_t req, struct dirbuf1 *b,
|
||||
* still returned."
|
||||
*/
|
||||
len = fuse_add_direntry(req,
|
||||
&b->buf[b->len], /* index where new entry will be added to buf */
|
||||
sizeof(b->buf) - b->len, /* Space left */
|
||||
xinode->name, /* name of entry */
|
||||
&stbuf, /* file attributes */
|
||||
offset /* offset of next entry */
|
||||
);
|
||||
&b->buf[b->len], /* index where new entry will be added to buf */
|
||||
sizeof(b->buf) - b->len, /* Space left */
|
||||
xinode->name, /* name of entry */
|
||||
&stbuf, /* file attributes */
|
||||
offset /* offset of next entry */
|
||||
);
|
||||
if (len + b->len <= sizeof(b->buf))
|
||||
{
|
||||
/* Entry fitted in OK */
|
||||
@ -1589,7 +1627,7 @@ static void xfuse_cb_readdir(fuse_req_t req, fuse_ino_t ino, size_t size,
|
||||
fuse_reply_err(req, ENOENT);
|
||||
}
|
||||
else if ((xhandle = xfuse_handle_from_fuse_handle(fi->fh)) == NULL
|
||||
|| (dh = xhandle->dir_handle) == NULL)
|
||||
|| (dh = xhandle->dir_handle) == NULL)
|
||||
{
|
||||
/* something seriously wrong somewhere! */
|
||||
fuse_reply_buf(req, 0, 0);
|
||||
@ -1723,7 +1761,7 @@ static void xfuse_cb_rename(fuse_req_t req,
|
||||
old_parent, old_name, new_parent, new_name);
|
||||
|
||||
if (strlen(old_name) > XFS_MAXFILENAMELEN ||
|
||||
strlen(new_name) > XFS_MAXFILENAMELEN)
|
||||
strlen(new_name) > XFS_MAXFILENAMELEN)
|
||||
{
|
||||
fuse_reply_err(req, ENAMETOOLONG);
|
||||
}
|
||||
@ -1766,7 +1804,7 @@ static void xfuse_cb_rename(fuse_req_t req,
|
||||
struct state_rename *fip = g_new0(struct state_rename, 1);
|
||||
char *old_full_path = xfs_get_full_path(g_xfs, old_xinode->inum);
|
||||
char *new_full_path = get_name_for_entry_in_parent(new_parent,
|
||||
new_name);
|
||||
new_name);
|
||||
|
||||
if (!old_full_path || !new_full_path || !fip)
|
||||
{
|
||||
@ -1967,10 +2005,10 @@ static void xfuse_cb_open(fuse_req_t req, fuse_ino_t ino,
|
||||
|
||||
if (!full_path || !fip)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "system out of memory");
|
||||
fuse_reply_err(req, ENOMEM);
|
||||
free(fip);
|
||||
free(full_path);
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "system out of memory");
|
||||
fuse_reply_err(req, ENOMEM);
|
||||
free(fip);
|
||||
free(full_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2201,7 +2239,7 @@ static void xfuse_cb_create(fuse_req_t req, fuse_ino_t parent,
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "entered: parent_inode=%ld, name=%s fi=%p",
|
||||
parent, name, fi);
|
||||
|
||||
xfuse_create_dir_or_file(req, parent, name, mode & ~S_IFDIR , fi);
|
||||
xfuse_create_dir_or_file(req, parent, name, mode & ~S_IFDIR, fi);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2249,13 +2287,13 @@ static void xfuse_cb_setattr(fuse_req_t req, fuse_ino_t ino, struct stat *attr,
|
||||
fuse_reply_err(req, EPERM);
|
||||
}
|
||||
else if ((to_set & FUSE_SET_ATTR_MODE) &&
|
||||
(attr->st_mode & ~(0777 | S_IFDIR | S_IFREG)) != 0)
|
||||
(attr->st_mode & ~(0777 | S_IFDIR | S_IFREG)) != 0)
|
||||
{
|
||||
/* We only support standard mode bits and S_IFDIR / S_IFREG */
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "Asking for invalid mode bits 0%o to be set", attr->st_mode);
|
||||
fuse_reply_err(req, EINVAL);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
struct file_attr attrs = {0};
|
||||
tui32 change_mask = 0;
|
||||
@ -2344,7 +2382,7 @@ static void xfuse_cb_setattr(fuse_req_t req, fuse_ino_t ino, struct stat *attr,
|
||||
* to reply to FUSE immediately
|
||||
*****************************************************************************/
|
||||
static void xfuse_cb_opendir(fuse_req_t req, fuse_ino_t ino,
|
||||
struct fuse_file_info *fi)
|
||||
struct fuse_file_info *fi)
|
||||
{
|
||||
XFS_INODE *xinode;
|
||||
XFUSE_HANDLE *xhandle;
|
||||
@ -2440,7 +2478,7 @@ static void xfuse_cb_releasedir(fuse_req_t req, fuse_ino_t ino,
|
||||
*****************************************************************************/
|
||||
|
||||
static void xfs_inode_to_fuse_entry_param(const XFS_INODE *xinode,
|
||||
struct fuse_entry_param *e)
|
||||
struct fuse_entry_param *e)
|
||||
{
|
||||
memset(e, 0, sizeof(*e));
|
||||
e->ino = xinode->inum;
|
||||
@ -2508,7 +2546,7 @@ static const char *filename_on_device(const char *full_path)
|
||||
* setattr devredir call
|
||||
*/
|
||||
static void update_inode_file_attributes(const struct file_attr *fattr,
|
||||
tui32 change_mask, XFS_INODE *xinode)
|
||||
tui32 change_mask, XFS_INODE *xinode)
|
||||
{
|
||||
int updated = 0;
|
||||
|
||||
@ -2551,8 +2589,8 @@ static char *get_name_for_entry_in_parent(fuse_ino_t parent, const char *name)
|
||||
|
||||
if ((result = xfs_get_full_path(g_xfs, parent)) != NULL)
|
||||
{
|
||||
char * p = (char *) realloc(result,
|
||||
strlen(result) + 1 + strlen(name) + 1);
|
||||
char *p = (char *) realloc(result,
|
||||
strlen(result) + 1 + strlen(name) + 1);
|
||||
if (p == NULL)
|
||||
{
|
||||
/* See cppcheck trac #9292 and #9437 */
|
||||
|
@ -780,7 +780,7 @@ xfs_get_file_open_count(struct xfs_fs *xfs, fuse_ino_t inum)
|
||||
/* ------------------------------------------------------------------------ */
|
||||
void
|
||||
xfs_delete_redirected_entries_with_device_id(struct xfs_fs *xfs,
|
||||
tui32 device_id)
|
||||
tui32 device_id)
|
||||
{
|
||||
fuse_ino_t inum;
|
||||
XFS_INODE_ALL *xino;
|
||||
|
@ -367,10 +367,10 @@ clipboard_init(void)
|
||||
if (rv == 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_init: g_xfixes_event_base %d",
|
||||
g_xfixes_event_base);
|
||||
g_xfixes_event_base);
|
||||
st = XFixesQueryVersion(g_display, &ver_maj, &ver_min);
|
||||
LOG(LOG_LEVEL_DEBUG, "clipboard_init st %d, maj %d min %d", st,
|
||||
ver_maj, ver_min);
|
||||
ver_maj, ver_min);
|
||||
g_clip_property_atom = XInternAtom(g_display, "XRDP_CLIP_PROPERTY_ATOM",
|
||||
False);
|
||||
g_get_time_atom = XInternAtom(g_display, "XRDP_GET_TIME_ATOM",
|
||||
@ -390,7 +390,7 @@ clipboard_init(void)
|
||||
if (g_image_bmp_atom == None)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_init: g_image_bmp_atom was "
|
||||
"not allocated");
|
||||
"not allocated");
|
||||
}
|
||||
|
||||
g_wnd = XCreateSimpleWindow(g_display, RootWindowOfScreen(g_screen),
|
||||
@ -425,12 +425,12 @@ clipboard_init(void)
|
||||
s_mark_end(s);
|
||||
size = (int)(s->end - s->data);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_init: data out, sending "
|
||||
"CB_CLIP_CAPS (clip_msg_id = 1)");
|
||||
"CB_CLIP_CAPS (clip_msg_id = 1)");
|
||||
rv = send_channel_data(g_cliprdr_chan_id, s->data, size);
|
||||
if (rv != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_init: send_channel_data failed "
|
||||
"rv = %d", rv);
|
||||
"rv = %d", rv);
|
||||
rv = 4;
|
||||
}
|
||||
}
|
||||
@ -446,12 +446,12 @@ clipboard_init(void)
|
||||
s_mark_end(s);
|
||||
size = (int)(s->end - s->data);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_init: data out, sending "
|
||||
"CB_MONITOR_READY (clip_msg_id = 1)");
|
||||
"CB_MONITOR_READY (clip_msg_id = 1)");
|
||||
rv = send_channel_data(g_cliprdr_chan_id, s->data, size);
|
||||
if (rv != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_init: send_channel_data failed "
|
||||
"rv = %d", rv);
|
||||
"rv = %d", rv);
|
||||
rv = 4;
|
||||
}
|
||||
}
|
||||
@ -516,7 +516,7 @@ clipboard_send_data_request(int format_id)
|
||||
s_mark_end(s);
|
||||
size = (int)(s->end - s->data);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_data_request: data out, sending "
|
||||
"CLIPRDR_DATA_REQUEST (clip_msg_id = 4)");
|
||||
"CLIPRDR_DATA_REQUEST (clip_msg_id = 4)");
|
||||
rv = send_channel_data(g_cliprdr_chan_id, s->data, size);
|
||||
free_stream(s);
|
||||
return rv;
|
||||
@ -539,7 +539,7 @@ clipboard_send_format_ack(void)
|
||||
s_mark_end(s);
|
||||
size = (int)(s->end - s->data);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_format_ack: data out, sending "
|
||||
"CLIPRDR_FORMAT_ACK (clip_msg_id = 3)");
|
||||
"CLIPRDR_FORMAT_ACK (clip_msg_id = 3)");
|
||||
rv = send_channel_data(g_cliprdr_chan_id, s->data, size);
|
||||
free_stream(s);
|
||||
return rv;
|
||||
@ -677,7 +677,7 @@ clipboard_send_format_announce(int xrdp_clip_type)
|
||||
break;
|
||||
default:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_format_announce: unknown "
|
||||
"xrdp_clip_type %d", xrdp_clip_type);
|
||||
"xrdp_clip_type %d", xrdp_clip_type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -721,7 +721,7 @@ clipboard_send_format_announce(int xrdp_clip_type)
|
||||
break;
|
||||
default:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_format_announce: unknown "
|
||||
"xrdp_clip_type %d", xrdp_clip_type);
|
||||
"xrdp_clip_type %d", xrdp_clip_type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -734,9 +734,9 @@ clipboard_send_format_announce(int xrdp_clip_type)
|
||||
out_uint32_le(s, 0);
|
||||
s_mark_end(s);
|
||||
size = (int)(s->end - s->data);
|
||||
//g_hexdump(s->data, size);
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "clipboard data:", s->data, size);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_format_announce: data out, sending "
|
||||
"CLIPRDR_FORMAT_ANNOUNCE (clip_msg_id = 2)");
|
||||
"CLIPRDR_FORMAT_ANNOUNCE (clip_msg_id = 2)");
|
||||
rv = send_channel_data(g_cliprdr_chan_id, s->data, size);
|
||||
free_stream(s);
|
||||
return rv;
|
||||
@ -751,7 +751,7 @@ clipboard_send_data_response_for_image(const char *data, int data_size)
|
||||
int rv;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_data_response_for_image: data_size %d",
|
||||
data_size);
|
||||
data_size);
|
||||
make_stream(s);
|
||||
init_stream(s, 64 + data_size);
|
||||
out_uint16_le(s, CB_FORMAT_DATA_RESPONSE); /* 5 CLIPRDR_DATA_RESPONSE */
|
||||
@ -776,17 +776,17 @@ clipboard_send_data_response_for_text(const char *data, int data_size)
|
||||
int num_chars;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_data_response_for_text: data_size %d",
|
||||
data_size);
|
||||
//g_hexdump(data, data_size);
|
||||
data_size);
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "clipboard send data response:", data, data_size);
|
||||
num_chars = g_mbstowcs(0, data, 0);
|
||||
if (num_chars < 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_send_data_response_for_text: "
|
||||
"bad string");
|
||||
"bad string");
|
||||
num_chars = 0;
|
||||
}
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_data_response_for_text: data_size %d "
|
||||
"num_chars %d", data_size, num_chars);
|
||||
"num_chars %d", data_size, num_chars);
|
||||
make_stream(s);
|
||||
init_stream(s, 64 + num_chars * 2);
|
||||
out_uint16_le(s, CB_FORMAT_DATA_RESPONSE); /* 5 CLIPRDR_DATA_RESPONSE */
|
||||
@ -795,15 +795,15 @@ clipboard_send_data_response_for_text(const char *data, int data_size)
|
||||
if (clipboard_out_unicode(s, data, num_chars) != num_chars * 2)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_send_data_response_for_text: error "
|
||||
"clipboard_out_unicode didn't write right number of bytes");
|
||||
"clipboard_out_unicode didn't write right number of bytes");
|
||||
}
|
||||
out_uint16_le(s, 0); /* nil for string */
|
||||
out_uint32_le(s, 0);
|
||||
s_mark_end(s);
|
||||
size = (int)(s->end - s->data);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_data_response_for_text: data out, "
|
||||
"sending CLIPRDR_DATA_RESPONSE (clip_msg_id = 5) size %d "
|
||||
"num_chars %d", size, num_chars);
|
||||
"sending CLIPRDR_DATA_RESPONSE (clip_msg_id = 5) size %d "
|
||||
"num_chars %d", size, num_chars);
|
||||
rv = send_channel_data(g_cliprdr_chan_id, s->data, size);
|
||||
free_stream(s);
|
||||
return rv;
|
||||
@ -831,7 +831,7 @@ clipboard_send_data_response(int xrdp_clip_type, const char *data, int data_size
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_data_response: unknown "
|
||||
"xrdp_clip_type %d", xrdp_clip_type);
|
||||
"xrdp_clip_type %d", xrdp_clip_type);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -870,7 +870,7 @@ clipboard_provide_selection_c2s(XSelectionRequestEvent *req, Atom type)
|
||||
long val1[2];
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_provide_selection_c2s: bytes %d",
|
||||
g_clip_c2s.total_bytes);
|
||||
g_clip_c2s.total_bytes);
|
||||
if (g_clip_c2s.total_bytes < g_incr_max_req_size)
|
||||
{
|
||||
XChangeProperty(g_display, req->requestor, req->property,
|
||||
@ -896,8 +896,8 @@ clipboard_provide_selection_c2s(XSelectionRequestEvent *req, Atom type)
|
||||
g_clip_c2s.property = req->property;
|
||||
g_clip_c2s.window = req->requestor;
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_provide_selection_c2s: start INCR property %s "
|
||||
"type %s", get_atom_text(req->property),
|
||||
get_atom_text(type));
|
||||
"type %s", get_atom_text(req->property),
|
||||
get_atom_text(type));
|
||||
val1[0] = g_clip_c2s.total_bytes;
|
||||
val1[1] = 0;
|
||||
XChangeProperty(g_display, req->requestor, req->property,
|
||||
@ -982,7 +982,7 @@ clipboard_process_format_announce(struct stream *s, int clip_msg_status,
|
||||
char *holdp;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_format_announce: "
|
||||
"CLIPRDR_FORMAT_ANNOUNCE");
|
||||
"CLIPRDR_FORMAT_ANNOUNCE");
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_format_announce %d", clip_msg_len);
|
||||
clipboard_send_format_ack();
|
||||
|
||||
@ -1014,8 +1014,8 @@ clipboard_process_format_announce(struct stream *s, int clip_msg_status,
|
||||
clip_msg_len -= 32;
|
||||
}
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_format_announce: formatId 0x%8.8x "
|
||||
"wszFormatName [%s] clip_msg_len %d", formatId, desc,
|
||||
clip_msg_len);
|
||||
"wszFormatName [%s] clip_msg_len %d", formatId, desc,
|
||||
clip_msg_len);
|
||||
if (g_num_formatIds <= 15)
|
||||
{
|
||||
g_formatIds[g_num_formatIds] = formatId;
|
||||
@ -1041,7 +1041,7 @@ clipboard_process_format_announce(struct stream *s, int clip_msg_status,
|
||||
if (clipboard_set_selection_owner() != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_process_format_announce: "
|
||||
"XSetSelectionOwner failed");
|
||||
"XSetSelectionOwner failed");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1092,7 +1092,7 @@ clipboard_process_data_request(struct stream *s, int clip_msg_status,
|
||||
int requestedFormatId;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_data_request: "
|
||||
"CLIPRDR_DATA_REQUEST");
|
||||
"CLIPRDR_DATA_REQUEST");
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_data_request:");
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " %d", g_clip_s2c.xrdp_clip_type);
|
||||
in_uint32_le(s, requestedFormatId);
|
||||
@ -1108,7 +1108,7 @@ clipboard_process_data_request(struct stream *s, int clip_msg_status,
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_data_request: CB_FORMAT_FILE, "
|
||||
"calling XConvertSelection to g_utf8_atom");
|
||||
"calling XConvertSelection to g_utf8_atom");
|
||||
g_clip_s2c.xrdp_clip_type = XRDP_CB_FILE;
|
||||
XConvertSelection(g_display, g_clipboard_atom, g_clip_s2c.type,
|
||||
g_clip_property_atom, g_wnd, CurrentTime);
|
||||
@ -1124,7 +1124,7 @@ clipboard_process_data_request(struct stream *s, int clip_msg_status,
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_data_request: CB_FORMAT_DIB, "
|
||||
"calling XConvertSelection to g_image_bmp_atom");
|
||||
"calling XConvertSelection to g_image_bmp_atom");
|
||||
g_clip_s2c.xrdp_clip_type = XRDP_CB_BITMAP;
|
||||
XConvertSelection(g_display, g_clipboard_atom, g_image_bmp_atom,
|
||||
g_clip_property_atom, g_wnd, CurrentTime);
|
||||
@ -1140,7 +1140,7 @@ clipboard_process_data_request(struct stream *s, int clip_msg_status,
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_data_request: CB_FORMAT_UNICODETEXT, "
|
||||
"calling XConvertSelection to g_utf8_atom");
|
||||
"calling XConvertSelection to g_utf8_atom");
|
||||
g_clip_s2c.xrdp_clip_type = XRDP_CB_TEXT;
|
||||
XConvertSelection(g_display, g_clipboard_atom, g_utf8_atom,
|
||||
g_clip_property_atom, g_wnd, CurrentTime);
|
||||
@ -1148,7 +1148,7 @@ clipboard_process_data_request(struct stream *s, int clip_msg_status,
|
||||
break;
|
||||
default:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_data_request: unknown type %d",
|
||||
requestedFormatId);
|
||||
requestedFormatId);
|
||||
clipboard_send_data_response_failed();
|
||||
break;
|
||||
}
|
||||
@ -1170,7 +1170,7 @@ clipboard_process_data_response_for_image(struct stream *s,
|
||||
int len;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_data_response_for_image: "
|
||||
"CLIPRDR_DATA_RESPONSE_FOR_IMAGE");
|
||||
"CLIPRDR_DATA_RESPONSE_FOR_IMAGE");
|
||||
lxev = &g_saved_selection_req_event;
|
||||
len = (int)(s->end - s->p);
|
||||
if (len < 1)
|
||||
@ -1193,7 +1193,7 @@ clipboard_process_data_response_for_image(struct stream *s,
|
||||
g_memcpy(g_clip_c2s.data, g_bmp_image_header, 14);
|
||||
in_uint8a(s, g_clip_c2s.data + 14, len);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_data_response_for_image: calling "
|
||||
"clipboard_provide_selection_c2s");
|
||||
"clipboard_provide_selection_c2s");
|
||||
clipboard_provide_selection_c2s(lxev, lxev->target);
|
||||
return 0;
|
||||
}
|
||||
@ -1249,7 +1249,7 @@ clipboard_process_data_response(struct stream *s, int clip_msg_status,
|
||||
return 0;
|
||||
}
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_data_response: "
|
||||
"CLIPRDR_DATA_RESPONSE");
|
||||
"CLIPRDR_DATA_RESPONSE");
|
||||
len = (int)(s->end - s->p);
|
||||
if (len < 1)
|
||||
{
|
||||
@ -1310,7 +1310,7 @@ clipboard_process_clip_caps(struct stream *s, int clip_msg_status,
|
||||
char *holdp;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_clip_caps:");
|
||||
//g_hexdump(s->p, s->end - s->p);
|
||||
//LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "", s->p, s->end - s->p);
|
||||
in_uint16_le(s, cCapabilitiesSets);
|
||||
in_uint8s(s, 2); /* pad */
|
||||
for (index = 0; index < cCapabilitiesSets; index++)
|
||||
@ -1324,10 +1324,10 @@ clipboard_process_clip_caps(struct stream *s, int clip_msg_status,
|
||||
in_uint32_le(s, version); /* version */
|
||||
in_uint32_le(s, flags); /* generalFlags */
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_clip_caps: "
|
||||
"g_cliprdr_version %d version %d "
|
||||
"g_cliprdr_flags 0x%x flags 0x%x",
|
||||
g_cliprdr_version, version,
|
||||
g_cliprdr_flags, flags);
|
||||
"g_cliprdr_version %d version %d "
|
||||
"g_cliprdr_flags 0x%x flags 0x%x",
|
||||
g_cliprdr_version, version,
|
||||
g_cliprdr_flags, flags);
|
||||
if (version < g_cliprdr_version)
|
||||
{
|
||||
g_cliprdr_version = version;
|
||||
@ -1336,7 +1336,7 @@ clipboard_process_clip_caps(struct stream *s, int clip_msg_status,
|
||||
break;
|
||||
default:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_clip_caps: unknown "
|
||||
"capabilitySetType %d", capabilitySetType);
|
||||
"capabilitySetType %d", capabilitySetType);
|
||||
break;
|
||||
}
|
||||
s->p = holdp + lengthCapability;
|
||||
@ -1514,16 +1514,16 @@ clipboard_data_in(struct stream *s, int chan_id, int chan_flags, int length,
|
||||
if (!g_clip_up)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "aborting clipboard_data_in - clipboard has not "
|
||||
"been initialized");
|
||||
"been initialized");
|
||||
/* we return 0 here to indicate no protocol problem occurred */
|
||||
return 0;
|
||||
}
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_data_in: chan_id %d "
|
||||
"chan_flags 0x%x length %d total_length %d "
|
||||
"in_request %d g_ins->size %d",
|
||||
chan_id, chan_flags, length, total_length,
|
||||
g_clip_c2s.in_request, g_ins->size);
|
||||
"chan_flags 0x%x length %d total_length %d "
|
||||
"in_request %d g_ins->size %d",
|
||||
chan_id, chan_flags, length, total_length,
|
||||
g_clip_c2s.in_request, g_ins->size);
|
||||
|
||||
if (g_clip_c2s.doing_response_ss)
|
||||
{
|
||||
@ -1583,8 +1583,8 @@ clipboard_data_in(struct stream *s, int chan_id, int chan_flags, int length,
|
||||
in_uint32_le(ls, clip_msg_len);
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_data_in: clip_msg_id %d "
|
||||
"clip_msg_status %d clip_msg_len %d",
|
||||
clip_msg_id, clip_msg_status, clip_msg_len);
|
||||
"clip_msg_status %d clip_msg_len %d",
|
||||
clip_msg_id, clip_msg_status, clip_msg_len);
|
||||
rv = 0;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_data_in: %d", clip_msg_id);
|
||||
@ -1663,14 +1663,14 @@ clipboard_event_selection_owner_notify(XEvent *xevent)
|
||||
lxevent = (XFixesSelectionNotifyEvent *)xevent;
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_owner_notify: 0x%lx", lxevent->owner);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_owner_notify: "
|
||||
"window %ld subtype %d owner %ld g_wnd %ld",
|
||||
lxevent->window, lxevent->subtype, lxevent->owner, g_wnd);
|
||||
"window %ld subtype %d owner %ld g_wnd %ld",
|
||||
lxevent->window, lxevent->subtype, lxevent->owner, g_wnd);
|
||||
|
||||
if (lxevent->owner == g_wnd)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_owner_notify: matches g_wnd");
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_owner_notify: skipping, "
|
||||
"owner == g_wnd");
|
||||
"owner == g_wnd");
|
||||
g_got_selection = 1;
|
||||
return 0;
|
||||
}
|
||||
@ -1832,41 +1832,41 @@ clipboard_event_selection_notify(XEvent *xevent)
|
||||
if (lxevent->property == None)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_event_selection_notify: clip could "
|
||||
"not be converted");
|
||||
"not be converted");
|
||||
rv = 1;
|
||||
}
|
||||
|
||||
if (rv == 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_notify: wnd 0x%lx prop %s",
|
||||
lxevent->requestor,
|
||||
get_atom_text(lxevent->property));
|
||||
lxevent->requestor,
|
||||
get_atom_text(lxevent->property));
|
||||
rv = clipboard_get_window_property(lxevent->requestor, lxevent->property,
|
||||
&type, &fmt,
|
||||
&n_items, &data, &data_size);
|
||||
if (rv != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_event_selection_notify: "
|
||||
"clipboard_get_window_property failed error %d", rv);
|
||||
"clipboard_get_window_property failed error %d", rv);
|
||||
return 0;
|
||||
}
|
||||
//g_hexdump(data, data_size);
|
||||
//LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "", data, data_size);
|
||||
XDeleteProperty(g_display, lxevent->requestor, lxevent->property);
|
||||
if (type == g_incr_atom)
|
||||
{
|
||||
/* nothing more to do here, the data is coming in through
|
||||
PropertyNotify */
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_notify: type is INCR "
|
||||
"data_size %d property name %s type %s", data_size,
|
||||
get_atom_text(lxevent->property),
|
||||
get_atom_text(lxevent->type));
|
||||
"data_size %d property name %s type %s", data_size,
|
||||
get_atom_text(lxevent->property),
|
||||
get_atom_text(lxevent->type));
|
||||
g_clip_s2c.incr_in_progress = 1;
|
||||
g_clip_s2c.property = lxevent->property;
|
||||
g_clip_s2c.type = lxevent->target;
|
||||
g_clip_s2c.total_bytes = 0;
|
||||
g_free(g_clip_s2c.data);
|
||||
g_clip_s2c.data = 0;
|
||||
//g_hexdump(data, sizeof(long));
|
||||
//LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "", data, sizeof(long));
|
||||
g_free(data);
|
||||
return 0;
|
||||
}
|
||||
@ -1886,10 +1886,10 @@ clipboard_event_selection_notify(XEvent *xevent)
|
||||
{
|
||||
atom = atoms[index];
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG,
|
||||
"clipboard_event_selection_notify: 0x%lx %s 0x%lx",
|
||||
atom, get_atom_text(atom), XA_STRING);
|
||||
"clipboard_event_selection_notify: 0x%lx %s 0x%lx",
|
||||
atom, get_atom_text(atom), XA_STRING);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_notify: 0x%lx %s",
|
||||
atom, get_atom_text(atom));
|
||||
atom, get_atom_text(atom));
|
||||
if (atom == g_utf8_atom)
|
||||
{
|
||||
got_utf8 = 1;
|
||||
@ -1916,14 +1916,14 @@ clipboard_event_selection_notify(XEvent *xevent)
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_event_selection_notify: error, "
|
||||
"target is 'TARGETS' and type[%ld] or fmt[%d] not right, "
|
||||
"should be type[%ld], fmt[%d]", type, fmt, XA_ATOM, 32);
|
||||
"target is 'TARGETS' and type[%ld] or fmt[%d] not right, "
|
||||
"should be type[%ld], fmt[%d]", type, fmt, XA_ATOM, 32);
|
||||
}
|
||||
}
|
||||
else if (lxevent->target == g_utf8_atom)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_notify: UTF8_STRING "
|
||||
"data_size %d", data_size);
|
||||
"data_size %d", data_size);
|
||||
if ((g_clip_s2c.incr_in_progress == 0) && (data_size > 0))
|
||||
{
|
||||
g_free(g_clip_s2c.data);
|
||||
@ -1946,7 +1946,7 @@ clipboard_event_selection_notify(XEvent *xevent)
|
||||
else if (lxevent->target == XA_STRING)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_notify: XA_STRING "
|
||||
"data_size %d", data_size);
|
||||
"data_size %d", data_size);
|
||||
if ((g_clip_s2c.incr_in_progress == 0) && (data_size > 0))
|
||||
{
|
||||
g_free(g_clip_s2c.data);
|
||||
@ -1961,7 +1961,7 @@ clipboard_event_selection_notify(XEvent *xevent)
|
||||
else if (lxevent->target == g_image_bmp_atom)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_notify: image/bmp "
|
||||
"data_size %d", data_size);
|
||||
"data_size %d", data_size);
|
||||
if ((g_clip_s2c.incr_in_progress == 0) && (data_size > 14))
|
||||
{
|
||||
g_free(g_clip_s2c.data);
|
||||
@ -1975,7 +1975,7 @@ clipboard_event_selection_notify(XEvent *xevent)
|
||||
else if (lxevent->target == g_file_atom1)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_notify: text/uri-list "
|
||||
"data_size %d", data_size);
|
||||
"data_size %d", data_size);
|
||||
if ((g_clip_s2c.incr_in_progress == 0) && (data_size > 0))
|
||||
{
|
||||
g_free(g_clip_s2c.data);
|
||||
@ -1990,7 +1990,7 @@ clipboard_event_selection_notify(XEvent *xevent)
|
||||
else if (lxevent->target == g_file_atom2)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_notify: text/uri-list "
|
||||
"data_size %d", data_size);
|
||||
"data_size %d", data_size);
|
||||
if ((g_clip_s2c.incr_in_progress == 0) && (data_size > 0))
|
||||
{
|
||||
g_free(g_clip_s2c.data);
|
||||
@ -2005,13 +2005,13 @@ clipboard_event_selection_notify(XEvent *xevent)
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_event_selection_notify: "
|
||||
"unknown target");
|
||||
"unknown target");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_event_selection_notify: "
|
||||
"unknown selection");
|
||||
"unknown selection");
|
||||
}
|
||||
}
|
||||
|
||||
@ -2096,22 +2096,22 @@ clipboard_event_selection_request(XEvent *xevent)
|
||||
lxev = (XSelectionRequestEvent *)xevent;
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_request: 0x%lx", lxev->property);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_request: g_wnd %ld, "
|
||||
".requestor %ld .owner %ld .selection %ld '%s' .target %ld .property %ld",
|
||||
g_wnd, lxev->requestor, lxev->owner, lxev->selection,
|
||||
get_atom_text(lxev->selection),
|
||||
lxev->target, lxev->property);
|
||||
".requestor %ld .owner %ld .selection %ld '%s' .target %ld .property %ld",
|
||||
g_wnd, lxev->requestor, lxev->owner, lxev->selection,
|
||||
get_atom_text(lxev->selection),
|
||||
lxev->target, lxev->property);
|
||||
|
||||
if (lxev->property == None)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_request: "
|
||||
"lxev->property is None");
|
||||
"lxev->property is None");
|
||||
}
|
||||
else if (lxev->target == g_targets_atom)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_request: g_targets_atom");
|
||||
/* requestor is asking what the selection can be converted to */
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_request: "
|
||||
"g_targets_atom");
|
||||
"g_targets_atom");
|
||||
atom_buf[0] = g_targets_atom;
|
||||
atom_buf[1] = g_timestamp_atom;
|
||||
atom_buf[2] = g_multiple_atom;
|
||||
@ -2142,7 +2142,7 @@ clipboard_event_selection_request(XEvent *xevent)
|
||||
{
|
||||
/* requestor is asking the time I got the selection */
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_request: "
|
||||
"g_timestamp_atom");
|
||||
"g_timestamp_atom");
|
||||
atom_buf[0] = g_selection_time;
|
||||
atom_buf[1] = 0;
|
||||
return clipboard_provide_selection(lxev, XA_INTEGER, 32,
|
||||
@ -2152,7 +2152,7 @@ clipboard_event_selection_request(XEvent *xevent)
|
||||
{
|
||||
/* target, property pairs */
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_request: "
|
||||
"g_multiple_atom");
|
||||
"g_multiple_atom");
|
||||
|
||||
xdata = 0;
|
||||
if (clipboard_get_window_property(lxev->requestor, lxev->property,
|
||||
@ -2160,7 +2160,7 @@ clipboard_event_selection_request(XEvent *xevent)
|
||||
&xdata_size) == 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_selection_request: g_multiple_atom "
|
||||
"n_items %d", n_items);
|
||||
"n_items %d", n_items);
|
||||
/* todo */
|
||||
g_free(xdata);
|
||||
}
|
||||
@ -2225,7 +2225,7 @@ clipboard_event_selection_request(XEvent *xevent)
|
||||
else
|
||||
{
|
||||
LOG(LOG_LEVEL_ERROR, "clipboard_event_selection_request: unknown "
|
||||
"target %s", get_atom_text(lxev->target));
|
||||
"target %s", get_atom_text(lxev->target));
|
||||
}
|
||||
|
||||
clipboard_refuse_selection(lxev);
|
||||
@ -2278,9 +2278,9 @@ clipboard_event_property_notify(XEvent *xevent)
|
||||
char *cptr;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_event_property_notify: PropertyNotify .window %ld "
|
||||
".state %d .atom %ld %s", xevent->xproperty.window,
|
||||
xevent->xproperty.state, xevent->xproperty.atom,
|
||||
get_atom_text(xevent->xproperty.atom));
|
||||
".state %d .atom %ld %s", xevent->xproperty.window,
|
||||
xevent->xproperty.state, xevent->xproperty.atom,
|
||||
get_atom_text(xevent->xproperty.atom));
|
||||
|
||||
if (g_clip_c2s.incr_in_progress &&
|
||||
(xevent->xproperty.window == g_clip_c2s.window) &&
|
||||
@ -2352,7 +2352,7 @@ clipboard_event_property_notify(XEvent *xevent)
|
||||
if (g_clip_s2c.type == g_image_bmp_atom)
|
||||
{
|
||||
g_clip_s2c.xrdp_clip_type = XRDP_CB_BITMAP;
|
||||
//g_hexdump(g_last_clip_data, 64);
|
||||
//LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "", g_last_clip_data, 64);
|
||||
/* skip header */
|
||||
clipboard_send_data_response(g_clip_s2c.xrdp_clip_type,
|
||||
g_clip_s2c.data + 14,
|
||||
@ -2369,7 +2369,7 @@ clipboard_event_property_notify(XEvent *xevent)
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_event_property_notify: error unknown type %ld",
|
||||
g_clip_s2c.type);
|
||||
g_clip_s2c.type);
|
||||
clipboard_send_data_response_failed();
|
||||
}
|
||||
|
||||
|
@ -170,19 +170,19 @@ clipboard_get_file(const char *file, int bytes)
|
||||
if (g_directory_exist(full_fn))
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_get_file: file [%s] is a directory, "
|
||||
"not supported", full_fn);
|
||||
"not supported", full_fn);
|
||||
flags |= CB_FILE_ATTRIBUTE_DIRECTORY;
|
||||
return 1;
|
||||
}
|
||||
if (!g_file_exist(full_fn))
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_get_file: file [%s] does not exist",
|
||||
full_fn);
|
||||
full_fn);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
cfi = (struct cb_file_info*)g_malloc(sizeof(struct cb_file_info), 1);
|
||||
cfi = (struct cb_file_info *)g_malloc(sizeof(struct cb_file_info), 1);
|
||||
list_add_item(g_files_list, (tintptr)cfi);
|
||||
g_strcpy(cfi->filename, filename);
|
||||
g_strcpy(cfi->pathname, pathname);
|
||||
@ -190,7 +190,7 @@ clipboard_get_file(const char *file, int bytes)
|
||||
cfi->flags = flags;
|
||||
cfi->time = (g_time1() + CB_EPOCH_DIFF) * 10000000LL;
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "ok filename [%s] pathname [%s] size [%d]",
|
||||
cfi->filename, cfi->pathname, cfi->size);
|
||||
cfi->filename, cfi->pathname, cfi->size);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -253,8 +253,8 @@ clipboard_send_data_response_for_file(const char *data, int data_size)
|
||||
struct cb_file_info *cfi;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_data_response_for_file: data_size %d",
|
||||
data_size);
|
||||
//g_hexdump(data, data_size);
|
||||
data_size);
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "", data, data_size);
|
||||
if (g_files_list == 0)
|
||||
{
|
||||
g_files_list = list_create();
|
||||
@ -326,7 +326,7 @@ clipboard_send_file_size(int streamId, int lindex)
|
||||
}
|
||||
file_size = cfi->size;
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_file_size: streamId %d file_size %d",
|
||||
streamId, file_size);
|
||||
streamId, file_size);
|
||||
make_stream(s);
|
||||
init_stream(s, 8192);
|
||||
out_uint16_le(s, CB_FILECONTENTS_RESPONSE); /* 9 */
|
||||
@ -356,7 +356,7 @@ clipboard_request_file_size(int stream_id, int lindex)
|
||||
if (g_file_request_sent_type != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_request_file_size: warning, still waiting "
|
||||
"for CB_FILECONTENTS_RESPONSE");
|
||||
"for CB_FILECONTENTS_RESPONSE");
|
||||
}
|
||||
make_stream(s);
|
||||
init_stream(s, 8192);
|
||||
@ -404,20 +404,20 @@ clipboard_send_file_data(int streamId, int lindex,
|
||||
return 1;
|
||||
}
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_send_file_data: streamId %d lindex %d "
|
||||
"nPositionLow %d cbRequested %d", streamId, lindex,
|
||||
nPositionLow, cbRequested);
|
||||
"nPositionLow %d cbRequested %d", streamId, lindex,
|
||||
nPositionLow, cbRequested);
|
||||
g_snprintf(full_fn, 255, "%s/%s", cfi->pathname, cfi->filename);
|
||||
fd = g_file_open_ex(full_fn, 1, 0, 0, 0);
|
||||
if (fd == -1)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_send_file_data: file open [%s] failed",
|
||||
full_fn);
|
||||
full_fn);
|
||||
return 1;
|
||||
}
|
||||
if (g_file_seek(fd, nPositionLow) < 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_send_file_data: seek error "
|
||||
"in file: %s", full_fn);
|
||||
"in file: %s", full_fn);
|
||||
g_file_close(fd);
|
||||
return 1;
|
||||
}
|
||||
@ -427,7 +427,7 @@ clipboard_send_file_data(int streamId, int lindex,
|
||||
if (size < 1)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_send_file_data: read error, want %d got %d",
|
||||
cbRequested, size);
|
||||
cbRequested, size);
|
||||
free_stream(s);
|
||||
g_file_close(fd);
|
||||
return 1;
|
||||
@ -457,12 +457,12 @@ clipboard_request_file_data(int stream_id, int lindex, int offset,
|
||||
int rv;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_request_file_data: stream_id=%d lindex=%d off=%d request_bytes=%d",
|
||||
stream_id, lindex, offset, request_bytes);
|
||||
stream_id, lindex, offset, request_bytes);
|
||||
|
||||
if (g_file_request_sent_type != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_request_file_data: warning, still waiting "
|
||||
"for CB_FILECONTENTS_RESPONSE");
|
||||
"for CB_FILECONTENTS_RESPONSE");
|
||||
}
|
||||
make_stream(s);
|
||||
init_stream(s, 8192);
|
||||
@ -500,7 +500,7 @@ clipboard_process_file_request(struct stream *s, int clip_msg_status,
|
||||
//int clipDataId;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_file_request:");
|
||||
//g_hexdump(s->p, clip_msg_len);
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "", s->p, clip_msg_len);
|
||||
in_uint32_le(s, streamId);
|
||||
in_uint32_le(s, lindex);
|
||||
in_uint32_le(s, dwFlags);
|
||||
@ -536,7 +536,7 @@ clipboard_process_file_response(struct stream *s, int clip_msg_status,
|
||||
in_uint32_le(s, streamId);
|
||||
in_uint32_le(s, file_size);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "clipboard_process_file_response: streamId %d "
|
||||
"file_size %d", streamId, file_size);
|
||||
"file_size %d", streamId, file_size);
|
||||
xfuse_file_contents_size(streamId, file_size);
|
||||
}
|
||||
else if (g_file_request_sent_type == CB_FILECONTENTS_RANGE)
|
||||
@ -579,9 +579,9 @@ clipboard_c2s_in_file_info(struct stream *s, struct clip_file_desc *cfd)
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " flags 0x%8.8x", cfd->flags);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " fileAttributes 0x%8.8x", cfd->fileAttributes);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " lastWriteTime 0x%8.8x%8.8x", cfd->lastWriteTimeHigh,
|
||||
cfd->lastWriteTimeLow);
|
||||
cfd->lastWriteTimeLow);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " fileSize 0x%8.8x%8.8x", cfd->fileSizeHigh,
|
||||
cfd->fileSizeLow);
|
||||
cfd->fileSizeLow);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " num_chars %d cFileName [%s]", num_chars, cfd->cFileName);
|
||||
return 0;
|
||||
}
|
||||
@ -619,10 +619,10 @@ clipboard_c2s_in_files(struct stream *s, char *file_list)
|
||||
g_memset(cfd, 0, sizeof(struct clip_file_desc));
|
||||
clipboard_c2s_in_file_info(s, cfd);
|
||||
if ((g_pos(cfd->cFileName, "\\") >= 0) ||
|
||||
(cfd->fileAttributes & CB_FILE_ATTRIBUTE_DIRECTORY))
|
||||
(cfd->fileAttributes & CB_FILE_ATTRIBUTE_DIRECTORY))
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "clipboard_c2s_in_files: skipping directory not "
|
||||
"supported [%s]", cfd->cFileName);
|
||||
"supported [%s]", cfd->cFileName);
|
||||
continue;
|
||||
}
|
||||
if (xfuse_add_clip_dir_item(cfd->cFileName, 0, cfd->fileSizeLow, lindex) == -1)
|
||||
|
@ -115,10 +115,10 @@ struct stream *g_input_stream = NULL;
|
||||
*/
|
||||
static void devredir_proc_cid_rmdir_or_file(IRP *irp, enum NTSTATUS IoStatus);
|
||||
static void devredir_proc_cid_rmdir_or_file_resp(IRP *irp,
|
||||
enum NTSTATUS IoStatus);
|
||||
enum NTSTATUS IoStatus);
|
||||
static void devredir_proc_cid_rename_file(IRP *irp, enum NTSTATUS IoStatus);
|
||||
static void devredir_proc_cid_rename_file_resp(IRP *irp,
|
||||
enum NTSTATUS IoStatus);
|
||||
enum NTSTATUS IoStatus);
|
||||
static void devredir_proc_cid_lookup( IRP *irp,
|
||||
struct stream *s_in,
|
||||
enum NTSTATUS IoStatus);
|
||||
@ -135,10 +135,10 @@ static void devredir_proc_client_devlist_announce_req(struct stream *s);
|
||||
static void devredir_proc_client_devlist_remove_req(struct stream *s);
|
||||
static void devredir_proc_device_iocompletion(struct stream *s);
|
||||
static void devredir_proc_query_dir_response(IRP *irp,
|
||||
struct stream *s_in,
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
enum NTSTATUS IoStatus);
|
||||
struct stream *s_in,
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
enum NTSTATUS IoStatus);
|
||||
|
||||
static void devredir_cvt_slash(char *path);
|
||||
static void devredir_cvt_to_unicode(char *unicode, const char *path);
|
||||
@ -189,21 +189,21 @@ devredir_deinit(void)
|
||||
*/
|
||||
const char *completion_type_to_str(enum COMPLETION_TYPE cid)
|
||||
{
|
||||
return
|
||||
(cid == CID_CREATE_DIR_REQ) ? "CID_CREATE_DIR_REQ" :
|
||||
(cid == CID_DIRECTORY_CONTROL) ? "CID_DIRECTORY_CONTROL" :
|
||||
(cid == CID_CREATE_REQ) ? "CID_CREATE_REQ" :
|
||||
(cid == CID_OPEN_REQ) ? "CID_OPEN_REQ" :
|
||||
(cid == CID_READ) ? "CID_READ" :
|
||||
(cid == CID_WRITE) ? "CID_WRITE" :
|
||||
(cid == CID_CLOSE) ? "CID_CLOSE" :
|
||||
(cid == CID_FILE_CLOSE) ? "CID_FILE_CLOSE" :
|
||||
(cid == CID_RMDIR_OR_FILE) ? "CID_RMDIR_OR_FILE" :
|
||||
(cid == CID_RMDIR_OR_FILE_RESP) ? "CID_RMDIR_OR_FILE_RESP" :
|
||||
(cid == CID_RENAME_FILE) ? "CID_RENAME_FILE" :
|
||||
(cid == CID_RENAME_FILE_RESP) ? "CID_RENAME_FILE_RESP" :
|
||||
(cid == CID_LOOKUP) ? "CID_LOOKUP" :
|
||||
(cid == CID_SETATTR) ? "CID_SETATTR" :
|
||||
return
|
||||
(cid == CID_CREATE_DIR_REQ) ? "CID_CREATE_DIR_REQ" :
|
||||
(cid == CID_DIRECTORY_CONTROL) ? "CID_DIRECTORY_CONTROL" :
|
||||
(cid == CID_CREATE_REQ) ? "CID_CREATE_REQ" :
|
||||
(cid == CID_OPEN_REQ) ? "CID_OPEN_REQ" :
|
||||
(cid == CID_READ) ? "CID_READ" :
|
||||
(cid == CID_WRITE) ? "CID_WRITE" :
|
||||
(cid == CID_CLOSE) ? "CID_CLOSE" :
|
||||
(cid == CID_FILE_CLOSE) ? "CID_FILE_CLOSE" :
|
||||
(cid == CID_RMDIR_OR_FILE) ? "CID_RMDIR_OR_FILE" :
|
||||
(cid == CID_RMDIR_OR_FILE_RESP) ? "CID_RMDIR_OR_FILE_RESP" :
|
||||
(cid == CID_RENAME_FILE) ? "CID_RENAME_FILE" :
|
||||
(cid == CID_RENAME_FILE_RESP) ? "CID_RENAME_FILE_RESP" :
|
||||
(cid == CID_LOOKUP) ? "CID_LOOKUP" :
|
||||
(cid == CID_SETATTR) ? "CID_SETATTR" :
|
||||
/* default */ "<unknown>";
|
||||
};
|
||||
|
||||
@ -227,10 +227,16 @@ WindowsToLinuxFilePerm(tui32 wperm)
|
||||
else
|
||||
{
|
||||
result = S_IFREG | 0444; /* files are always readable */
|
||||
if (wperm & W_FILE_ATTRIBUTE_SYSTEM) result |= 0111; /* Executable */
|
||||
if (wperm & W_FILE_ATTRIBUTE_SYSTEM)
|
||||
{
|
||||
result |= 0111; /* Executable */
|
||||
}
|
||||
}
|
||||
|
||||
if ((wperm & W_FILE_ATTRIBUTE_READONLY) == 0) result |= 0222;
|
||||
if ((wperm & W_FILE_ATTRIBUTE_READONLY) == 0)
|
||||
{
|
||||
result |= 0222;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
@ -298,13 +304,17 @@ devredir_data_in(struct stream *s, int chan_id, int chan_flags, int length,
|
||||
{
|
||||
/* is this is the first packet? */
|
||||
if (chan_flags & 1)
|
||||
{
|
||||
xstream_new(g_input_stream, total_length);
|
||||
}
|
||||
|
||||
xstream_copyin(g_input_stream, s->p, length);
|
||||
|
||||
/* in last packet, chan_flags & 0x02 will be true */
|
||||
if ((chan_flags & 2) == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
g_input_stream->p = g_input_stream->data;
|
||||
ls = g_input_stream;
|
||||
@ -441,8 +451,8 @@ devredir_send_server_core_cap_req(void)
|
||||
/* setup general capability */
|
||||
xstream_wr_u16_le(s, CAP_GENERAL_TYPE); /* CapabilityType */
|
||||
xstream_wr_u16_le(s, 44); /* CapabilityLength - len of this */
|
||||
/* CAPABILITY_SET in bytes, inc */
|
||||
/* the header */
|
||||
/* CAPABILITY_SET in bytes, inc */
|
||||
/* the header */
|
||||
xstream_wr_u32_le(s, 2); /* Version */
|
||||
xstream_wr_u32_le(s, 2); /* O.S type */
|
||||
xstream_wr_u32_le(s, 0); /* O.S version */
|
||||
@ -468,8 +478,8 @@ devredir_send_server_core_cap_req(void)
|
||||
/* setup file system capability */
|
||||
xstream_wr_u16_le(s, CAP_DRIVE_TYPE); /* CapabilityType */
|
||||
xstream_wr_u16_le(s, 8); /* CapabilityLength - len of this */
|
||||
/* CAPABILITY_SET in bytes, inc */
|
||||
/* the header */
|
||||
/* CAPABILITY_SET in bytes, inc */
|
||||
/* the header */
|
||||
xstream_wr_u32_le(s, 2); /* Version */
|
||||
|
||||
/* setup smart card capability */
|
||||
@ -527,7 +537,7 @@ devredir_send_server_user_logged_on(void)
|
||||
|
||||
static void
|
||||
devredir_send_server_device_announce_resp(tui32 device_id,
|
||||
enum NTSTATUS result_code)
|
||||
enum NTSTATUS result_code)
|
||||
{
|
||||
struct stream *s;
|
||||
int bytes;
|
||||
@ -566,13 +576,13 @@ devredir_send_drive_create_request(tui32 device_id,
|
||||
tui32 SharedAccess;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "device_id=%d path=\"%s\""
|
||||
" DesiredAccess=0x%x CreateDisposition=0x%x"
|
||||
" FileAttributes=0x%x CreateOptions=0x%x"
|
||||
" CompletionId=%d",
|
||||
device_id, path,
|
||||
DesiredAccess, CreateDisposition,
|
||||
FileAttributes, CreateOptions,
|
||||
completion_id);
|
||||
" DesiredAccess=0x%x CreateDisposition=0x%x"
|
||||
" FileAttributes=0x%x CreateOptions=0x%x"
|
||||
" CompletionId=%d",
|
||||
device_id, path,
|
||||
DesiredAccess, CreateDisposition,
|
||||
FileAttributes, CreateOptions,
|
||||
completion_id);
|
||||
|
||||
/* path in unicode needs this much space */
|
||||
len = ((g_mbstowcs(NULL, path, 0) * sizeof(twchar)) / 2) + 2;
|
||||
@ -632,7 +642,9 @@ devredir_send_drive_close_request(tui16 Component, tui16 PacketId,
|
||||
MajorFunction, MinorFunc);
|
||||
|
||||
if (pad_len)
|
||||
{
|
||||
xstream_seek(s, pad_len);
|
||||
}
|
||||
|
||||
/* send to client */
|
||||
bytes = xstream_len(s);
|
||||
@ -722,7 +734,7 @@ devredir_proc_client_core_cap_resp(struct stream *s)
|
||||
tui16 cap_type;
|
||||
tui16 cap_len;
|
||||
tui32 cap_version;
|
||||
char* holdp;
|
||||
char *holdp;
|
||||
|
||||
xstream_rd_u16_le(s, num_caps);
|
||||
xstream_seek(s, 2); /* padding */
|
||||
@ -808,7 +820,7 @@ devredir_proc_client_devlist_announce_req(struct stream *s)
|
||||
if (device_data_len)
|
||||
{
|
||||
xstream_rd_string(g_full_name_for_filesystem, s,
|
||||
device_data_len);
|
||||
device_data_len);
|
||||
}
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "device_type=FILE_SYSTEM device_id=0x%x dosname=%s "
|
||||
@ -835,33 +847,33 @@ devredir_proc_client_devlist_announce_req(struct stream *s)
|
||||
break;
|
||||
|
||||
case RDPDR_DTYP_SERIAL:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG,
|
||||
"device_type=SERIAL device_id=0x%x dosname=%s",
|
||||
g_device_id, preferred_dos_name);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG,
|
||||
"device_type=SERIAL device_id=0x%x dosname=%s",
|
||||
g_device_id, preferred_dos_name);
|
||||
break;
|
||||
|
||||
case RDPDR_DTYP_PARALLEL:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG,
|
||||
"device_type=PARALLEL device_id=0x%x dosname=%s",
|
||||
g_device_id, preferred_dos_name);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG,
|
||||
"device_type=PARALLEL device_id=0x%x dosname=%s",
|
||||
g_device_id, preferred_dos_name);
|
||||
break;
|
||||
|
||||
case RDPDR_DTYP_PRINT:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG,
|
||||
"device_type=PRINT device_id=0x%x dosname=%s",
|
||||
g_device_id, preferred_dos_name);
|
||||
"device_type=PRINT device_id=0x%x dosname=%s",
|
||||
g_device_id, preferred_dos_name);
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG,
|
||||
"device_type=UNKNOWN device_id=0x%x dosname=%s",
|
||||
g_device_id, preferred_dos_name);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG,
|
||||
"device_type=UNKNOWN device_id=0x%x dosname=%s",
|
||||
g_device_id, preferred_dos_name);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Tell the client wheth or not we're supporting this one */
|
||||
devredir_send_server_device_announce_resp(g_device_id,
|
||||
response_status);
|
||||
response_status);
|
||||
}
|
||||
}
|
||||
|
||||
@ -905,8 +917,7 @@ devredir_proc_device_iocompletion(struct stream *s)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "IRP with completion ID %d not found", CompletionId);
|
||||
}
|
||||
else
|
||||
if (irp->callback)
|
||||
else if (irp->callback)
|
||||
{
|
||||
/* Callback has been set - call it */
|
||||
(*irp->callback)(s, irp, DeviceId, CompletionId, IoStatus);
|
||||
@ -916,8 +927,8 @@ devredir_proc_device_iocompletion(struct stream *s)
|
||||
comp_type = (enum COMPLETION_TYPE) irp->completion_type;
|
||||
/* Log something about the IRP */
|
||||
if (IoStatus == STATUS_SUCCESS ||
|
||||
IoStatus == STATUS_NO_MORE_FILES ||
|
||||
(IoStatus == STATUS_NO_SUCH_FILE && comp_type == CID_LOOKUP))
|
||||
IoStatus == STATUS_NO_MORE_FILES ||
|
||||
(IoStatus == STATUS_NO_SUCH_FILE && comp_type == CID_LOOKUP))
|
||||
{
|
||||
/* Successes or common occurrences - debug logging only */
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "got %s", completion_type_to_str(comp_type));
|
||||
@ -933,105 +944,105 @@ devredir_proc_device_iocompletion(struct stream *s)
|
||||
|
||||
switch (comp_type)
|
||||
{
|
||||
case CID_CREATE_DIR_REQ:
|
||||
if (IoStatus != STATUS_SUCCESS)
|
||||
{
|
||||
xfuse_devredir_cb_enum_dir_done(
|
||||
(struct state_dirscan *) irp->fuse_info, IoStatus);
|
||||
devredir_irp_delete(irp);
|
||||
}
|
||||
else
|
||||
{
|
||||
case CID_CREATE_DIR_REQ:
|
||||
if (IoStatus != STATUS_SUCCESS)
|
||||
{
|
||||
xfuse_devredir_cb_enum_dir_done(
|
||||
(struct state_dirscan *) irp->fuse_info, IoStatus);
|
||||
devredir_irp_delete(irp);
|
||||
}
|
||||
else
|
||||
{
|
||||
xstream_rd_u32_le(s, irp->FileId);
|
||||
devredir_send_drive_dir_request(irp, DeviceId,
|
||||
1, irp->pathname);
|
||||
}
|
||||
break;
|
||||
|
||||
case CID_CREATE_REQ:
|
||||
xstream_rd_u32_le(s, irp->FileId);
|
||||
devredir_send_drive_dir_request(irp, DeviceId,
|
||||
1, irp->pathname);
|
||||
}
|
||||
break;
|
||||
|
||||
case CID_CREATE_REQ:
|
||||
xstream_rd_u32_le(s, irp->FileId);
|
||||
xfuse_devredir_cb_create_file(
|
||||
(struct state_create *) irp->fuse_info,
|
||||
IoStatus, DeviceId, irp->FileId);
|
||||
if (irp->gen.create.creating_dir || IoStatus != STATUS_SUCCESS)
|
||||
{
|
||||
devredir_irp_delete(irp);
|
||||
}
|
||||
break;
|
||||
|
||||
xfuse_devredir_cb_create_file(
|
||||
(struct state_create *) irp->fuse_info,
|
||||
IoStatus, DeviceId, irp->FileId);
|
||||
if (irp->gen.create.creating_dir || IoStatus != STATUS_SUCCESS)
|
||||
{
|
||||
case CID_OPEN_REQ:
|
||||
xstream_rd_u32_le(s, irp->FileId);
|
||||
|
||||
xfuse_devredir_cb_open_file((struct state_open *) irp->fuse_info,
|
||||
IoStatus, DeviceId, irp->FileId);
|
||||
if (IoStatus != STATUS_SUCCESS)
|
||||
{
|
||||
devredir_irp_delete(irp);
|
||||
}
|
||||
break;
|
||||
|
||||
case CID_READ:
|
||||
xstream_rd_u32_le(s, Length);
|
||||
xfuse_devredir_cb_read_file((struct state_read *) irp->fuse_info,
|
||||
IoStatus,
|
||||
s->p, Length);
|
||||
devredir_irp_delete(irp);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case CID_OPEN_REQ:
|
||||
xstream_rd_u32_le(s, irp->FileId);
|
||||
|
||||
xfuse_devredir_cb_open_file((struct state_open *) irp->fuse_info,
|
||||
IoStatus, DeviceId, irp->FileId);
|
||||
if (IoStatus != STATUS_SUCCESS)
|
||||
{
|
||||
case CID_WRITE:
|
||||
xstream_rd_u32_le(s, Length);
|
||||
xfuse_devredir_cb_write_file((struct state_write *) irp->fuse_info,
|
||||
IoStatus,
|
||||
irp->gen.write.offset, Length);
|
||||
devredir_irp_delete(irp);
|
||||
}
|
||||
break;
|
||||
break;
|
||||
|
||||
case CID_READ:
|
||||
xstream_rd_u32_le(s, Length);
|
||||
xfuse_devredir_cb_read_file((struct state_read *) irp->fuse_info,
|
||||
IoStatus,
|
||||
s->p, Length);
|
||||
devredir_irp_delete(irp);
|
||||
break;
|
||||
case CID_CLOSE:
|
||||
devredir_irp_delete(irp);
|
||||
break;
|
||||
|
||||
case CID_WRITE:
|
||||
xstream_rd_u32_le(s, Length);
|
||||
xfuse_devredir_cb_write_file((struct state_write *) irp->fuse_info,
|
||||
IoStatus,
|
||||
irp->gen.write.offset, Length);
|
||||
devredir_irp_delete(irp);
|
||||
break;
|
||||
case CID_FILE_CLOSE:
|
||||
xfuse_devredir_cb_file_close((struct state_close *) irp->fuse_info);
|
||||
devredir_irp_delete(irp);
|
||||
break;
|
||||
|
||||
case CID_CLOSE:
|
||||
devredir_irp_delete(irp);
|
||||
break;
|
||||
case CID_DIRECTORY_CONTROL:
|
||||
devredir_proc_query_dir_response(irp, s, DeviceId,
|
||||
CompletionId, IoStatus);
|
||||
break;
|
||||
|
||||
case CID_FILE_CLOSE:
|
||||
xfuse_devredir_cb_file_close((struct state_close *) irp->fuse_info);
|
||||
devredir_irp_delete(irp);
|
||||
break;
|
||||
case CID_RMDIR_OR_FILE:
|
||||
xstream_rd_u32_le(s, irp->FileId);
|
||||
devredir_proc_cid_rmdir_or_file(irp, IoStatus);
|
||||
break;
|
||||
|
||||
case CID_DIRECTORY_CONTROL:
|
||||
devredir_proc_query_dir_response(irp, s, DeviceId,
|
||||
CompletionId, IoStatus);
|
||||
break;
|
||||
case CID_RMDIR_OR_FILE_RESP:
|
||||
devredir_proc_cid_rmdir_or_file_resp(irp, IoStatus);
|
||||
break;
|
||||
|
||||
case CID_RMDIR_OR_FILE:
|
||||
xstream_rd_u32_le(s, irp->FileId);
|
||||
devredir_proc_cid_rmdir_or_file(irp, IoStatus);
|
||||
break;
|
||||
case CID_RENAME_FILE:
|
||||
xstream_rd_u32_le(s, irp->FileId);
|
||||
devredir_proc_cid_rename_file(irp, IoStatus);
|
||||
break;
|
||||
|
||||
case CID_RMDIR_OR_FILE_RESP:
|
||||
devredir_proc_cid_rmdir_or_file_resp(irp, IoStatus);
|
||||
break;
|
||||
case CID_RENAME_FILE_RESP:
|
||||
devredir_proc_cid_rename_file_resp(irp, IoStatus);
|
||||
break;
|
||||
|
||||
case CID_RENAME_FILE:
|
||||
xstream_rd_u32_le(s, irp->FileId);
|
||||
devredir_proc_cid_rename_file(irp, IoStatus);
|
||||
break;
|
||||
case CID_LOOKUP:
|
||||
devredir_proc_cid_lookup(irp, s, IoStatus);
|
||||
break;
|
||||
|
||||
case CID_RENAME_FILE_RESP:
|
||||
devredir_proc_cid_rename_file_resp(irp, IoStatus);
|
||||
break;
|
||||
case CID_SETATTR:
|
||||
devredir_proc_cid_setattr(irp, s, IoStatus);
|
||||
break;
|
||||
|
||||
case CID_LOOKUP:
|
||||
devredir_proc_cid_lookup(irp, s, IoStatus);
|
||||
break;
|
||||
|
||||
case CID_SETATTR:
|
||||
devredir_proc_cid_setattr(irp, s, IoStatus);
|
||||
break;
|
||||
|
||||
default:
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "got unknown CompletionID: DeviceId=0x%x "
|
||||
"CompletionId=0x%x IoStatus=0x%x",
|
||||
DeviceId, CompletionId, IoStatus);
|
||||
break;
|
||||
default:
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "got unknown CompletionID: DeviceId=0x%x "
|
||||
"CompletionId=0x%x IoStatus=0x%x",
|
||||
DeviceId, CompletionId, IoStatus);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1089,8 +1100,8 @@ devredir_proc_query_dir_response(IRP *irp,
|
||||
|
||||
/* add this entry to xrdp file system */
|
||||
xfuse_devredir_cb_enum_dir_add_entry(
|
||||
(struct state_dirscan *) irp->fuse_info,
|
||||
filename, &fattr);
|
||||
(struct state_dirscan *) irp->fuse_info,
|
||||
filename, &fattr);
|
||||
}
|
||||
|
||||
/* Ask for more directory entries */
|
||||
@ -1155,13 +1166,13 @@ devredir_get_dir_listing(struct state_dirscan *fusep, tui32 device_id,
|
||||
CreateDisposition = CD_FILE_OPEN;
|
||||
|
||||
rval = devredir_send_drive_create_request(device_id, irp->pathname,
|
||||
DesiredAccess, CreateOptions,
|
||||
0, CreateDisposition,
|
||||
irp->CompletionId);
|
||||
DesiredAccess, CreateOptions,
|
||||
0, CreateDisposition,
|
||||
irp->CompletionId);
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "looking for device_id=%d path=%s", device_id, irp->pathname);
|
||||
|
||||
/* when we get a response to devredir_send_drive_create_request(), we
|
||||
/* when we get a response to devredir_send_drive_create_request(), we
|
||||
* call devredir_send_drive_dir_request(), which needs the following
|
||||
* at the end of the path argument */
|
||||
if (devredir_string_ends_with(irp->pathname, '\\'))
|
||||
@ -1222,10 +1233,10 @@ devredir_lookup_entry(struct state_lookup *fusep, tui32 device_id,
|
||||
device_id, irp->pathname, irp->CompletionId);
|
||||
|
||||
rval = devredir_send_drive_create_request(device_id,
|
||||
irp->pathname,
|
||||
DesiredAccess, CreateOptions,
|
||||
0, CreateDisposition,
|
||||
irp->CompletionId);
|
||||
irp->pathname,
|
||||
DesiredAccess, CreateOptions,
|
||||
0, CreateDisposition,
|
||||
irp->CompletionId);
|
||||
}
|
||||
|
||||
return rval;
|
||||
@ -1288,13 +1299,13 @@ devredir_setattr_for_entry(struct state_setattr *fusep, tui32 device_id,
|
||||
CreateDisposition = CD_FILE_OPEN;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "lookup for device_id=%d path=%s",
|
||||
device_id, irp->pathname);
|
||||
device_id, irp->pathname);
|
||||
|
||||
rval = devredir_send_drive_create_request(device_id,
|
||||
irp->pathname,
|
||||
DesiredAccess, CreateOptions,
|
||||
0, CreateDisposition,
|
||||
irp->CompletionId);
|
||||
irp->pathname,
|
||||
DesiredAccess, CreateOptions,
|
||||
0, CreateDisposition,
|
||||
irp->CompletionId);
|
||||
}
|
||||
|
||||
return rval;
|
||||
@ -1343,10 +1354,10 @@ devredir_file_create(struct state_create *fusep, tui32 device_id,
|
||||
CreateDisposition = 0x02; /* got this value from windows */
|
||||
|
||||
rval = devredir_send_drive_create_request(device_id, path,
|
||||
DesiredAccess, CreateOptions,
|
||||
FileAttributes,
|
||||
CreateDisposition,
|
||||
irp->CompletionId);
|
||||
DesiredAccess, CreateOptions,
|
||||
FileAttributes,
|
||||
CreateDisposition,
|
||||
irp->CompletionId);
|
||||
}
|
||||
|
||||
return rval;
|
||||
@ -1377,7 +1388,7 @@ devredir_file_open(struct state_open *fusep, tui32 device_id,
|
||||
|
||||
irp->fuse_info = fusep;
|
||||
|
||||
switch(flags & O_ACCMODE)
|
||||
switch (flags & O_ACCMODE)
|
||||
{
|
||||
case O_RDONLY:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "open file in O_RDONLY");
|
||||
@ -1397,7 +1408,7 @@ devredir_file_open(struct state_open *fusep, tui32 device_id,
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "open file in O_RDWR");
|
||||
/* without the 0x00000010 rdesktop opens files in */
|
||||
/* O_RDONLY instead of O_RDWR mode */
|
||||
DesiredAccess = DA_FILE_READ_DATA | DA_FILE_WRITE_DATA |
|
||||
DesiredAccess = DA_FILE_READ_DATA | DA_FILE_WRITE_DATA |
|
||||
DA_SYNCHRONIZE | 0x00000010;
|
||||
}
|
||||
|
||||
@ -1405,10 +1416,10 @@ devredir_file_open(struct state_open *fusep, tui32 device_id,
|
||||
CreateDisposition = CD_FILE_OPEN; // WAS 1
|
||||
|
||||
rval = devredir_send_drive_create_request(device_id, path,
|
||||
DesiredAccess, CreateOptions,
|
||||
FileAttributes,
|
||||
CreateDisposition,
|
||||
irp->CompletionId);
|
||||
DesiredAccess, CreateOptions,
|
||||
FileAttributes,
|
||||
CreateDisposition,
|
||||
irp->CompletionId);
|
||||
}
|
||||
|
||||
return rval;
|
||||
@ -1424,7 +1435,9 @@ int devredir_file_close(struct state_close *fusep, tui32 device_id,
|
||||
|
||||
#if 0
|
||||
if ((irp = devredir_irp_new()) == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
irp->CompletionId = g_completion_id++;
|
||||
#else
|
||||
@ -1439,12 +1452,12 @@ int devredir_file_close(struct state_close *fusep, tui32 device_id,
|
||||
irp->fuse_info = fusep;
|
||||
|
||||
return devredir_send_drive_close_request(RDPDR_CTYP_CORE,
|
||||
PAKID_CORE_DEVICE_IOREQUEST,
|
||||
device_id,
|
||||
FileId,
|
||||
irp->CompletionId,
|
||||
IRP_MJ_CLOSE,
|
||||
IRP_MN_NONE, 32);
|
||||
PAKID_CORE_DEVICE_IOREQUEST,
|
||||
device_id,
|
||||
FileId,
|
||||
irp->CompletionId,
|
||||
IRP_MJ_CLOSE,
|
||||
IRP_MN_NONE, 32);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1483,9 +1496,9 @@ devredir_rmdir_or_file(struct state_remove *fusep, tui32 device_id,
|
||||
CreateDisposition = 0x01; /* got this value from windows */
|
||||
|
||||
rval = devredir_send_drive_create_request(device_id, path,
|
||||
DesiredAccess, CreateOptions,
|
||||
0, CreateDisposition,
|
||||
irp->CompletionId);
|
||||
DesiredAccess, CreateOptions,
|
||||
0, CreateDisposition,
|
||||
irp->CompletionId);
|
||||
}
|
||||
|
||||
return rval;
|
||||
@ -1625,7 +1638,7 @@ int devredir_file_rename(struct state_rename *fusep, tui32 device_id,
|
||||
int rval = -1;
|
||||
IRP *irp;
|
||||
unsigned int len;
|
||||
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "device_id=%d old_name=%s new_name=%s",
|
||||
device_id, old_name, new_name);
|
||||
|
||||
@ -1661,10 +1674,10 @@ int devredir_file_rename(struct state_rename *fusep, tui32 device_id,
|
||||
CreateDisposition = CD_FILE_OPEN; // WAS 1
|
||||
|
||||
rval = devredir_send_drive_create_request(device_id, old_name,
|
||||
DesiredAccess, CreateOptions,
|
||||
FileAttributes,
|
||||
CreateDisposition,
|
||||
irp->CompletionId);
|
||||
DesiredAccess, CreateOptions,
|
||||
FileAttributes,
|
||||
CreateDisposition,
|
||||
irp->CompletionId);
|
||||
}
|
||||
|
||||
return rval;
|
||||
@ -1705,7 +1718,9 @@ devredir_cvt_slash(char *path)
|
||||
while (*cptr != 0)
|
||||
{
|
||||
if (*cptr == '/')
|
||||
{
|
||||
*cptr = '\\';
|
||||
}
|
||||
cptr++;
|
||||
}
|
||||
}
|
||||
@ -1791,7 +1806,7 @@ devredir_proc_cid_rmdir_or_file(IRP *irp, enum NTSTATUS IoStatus)
|
||||
if (IoStatus != STATUS_SUCCESS)
|
||||
{
|
||||
xfuse_devredir_cb_rmdir_or_file((struct state_remove *) irp->fuse_info,
|
||||
IoStatus);
|
||||
IoStatus);
|
||||
devredir_irp_delete(irp);
|
||||
return;
|
||||
}
|
||||
@ -1857,7 +1872,7 @@ devredir_proc_cid_rename_file(IRP *irp, enum NTSTATUS IoStatus)
|
||||
|
||||
/* Path in unicode needs this much space */
|
||||
flen = ((g_mbstowcs(NULL, irp->gen.rename.new_name, 0)
|
||||
* sizeof(twchar)) / 2) + 2;
|
||||
* sizeof(twchar)) / 2) + 2;
|
||||
sblen = 6 + flen;
|
||||
|
||||
xstream_new(s, 1024 + flen);
|
||||
@ -1900,11 +1915,11 @@ devredir_proc_cid_rename_file_resp(IRP *irp, enum NTSTATUS IoStatus)
|
||||
|
||||
irp->completion_type = CID_CLOSE;
|
||||
devredir_send_drive_close_request(RDPDR_CTYP_CORE,
|
||||
PAKID_CORE_DEVICE_IOREQUEST,
|
||||
irp->DeviceId,
|
||||
irp->FileId,
|
||||
irp->CompletionId,
|
||||
IRP_MJ_CLOSE, IRP_MN_NONE, 32);
|
||||
PAKID_CORE_DEVICE_IOREQUEST,
|
||||
irp->DeviceId,
|
||||
irp->FileId,
|
||||
irp->CompletionId,
|
||||
IRP_MJ_CLOSE, IRP_MN_NONE, 32);
|
||||
}
|
||||
|
||||
|
||||
@ -1993,7 +2008,7 @@ static void lookup_read_standard_attributes(IRP *irp, struct stream *s_in)
|
||||
static void lookup_done(IRP *irp, enum NTSTATUS IoStatus)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "Lookup with completion_id=%d returning 0x%x",
|
||||
irp->CompletionId, IoStatus);
|
||||
irp->CompletionId, IoStatus);
|
||||
xfuse_devredir_cb_lookup_entry((struct state_lookup *)irp->fuse_info,
|
||||
IoStatus,
|
||||
&irp->gen.lookup.fattr);
|
||||
@ -2008,11 +2023,11 @@ static void lookup_done(IRP *irp, enum NTSTATUS IoStatus)
|
||||
/* Close the file handle */
|
||||
irp->completion_type = CID_CLOSE;
|
||||
devredir_send_drive_close_request(RDPDR_CTYP_CORE,
|
||||
PAKID_CORE_DEVICE_IOREQUEST,
|
||||
irp->DeviceId,
|
||||
irp->FileId,
|
||||
irp->CompletionId,
|
||||
IRP_MJ_CLOSE, IRP_MN_NONE, 32);
|
||||
PAKID_CORE_DEVICE_IOREQUEST,
|
||||
irp->DeviceId,
|
||||
irp->FileId,
|
||||
irp->CompletionId,
|
||||
IRP_MJ_CLOSE, IRP_MN_NONE, 32);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2028,7 +2043,7 @@ devredir_proc_cid_lookup(IRP *irp,
|
||||
{
|
||||
tui32 Length;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "entry state is %d",irp->gen.lookup.state);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "entry state is %d", irp->gen.lookup.state);
|
||||
if (IoStatus != STATUS_SUCCESS)
|
||||
{
|
||||
/* This is common to all setattr states */
|
||||
@ -2038,7 +2053,7 @@ devredir_proc_cid_lookup(IRP *irp,
|
||||
else
|
||||
{
|
||||
/* Read and validate any data we've got queued up */
|
||||
switch(irp->gen.lookup.state)
|
||||
switch (irp->gen.lookup.state)
|
||||
{
|
||||
case E_LOOKUP_GET_FH:
|
||||
/* We've been sent the file ID */
|
||||
@ -2123,7 +2138,7 @@ static void issue_setattr_basic(IRP *irp)
|
||||
|
||||
xstream_wr_u32_le(s, FileBasicInformation);
|
||||
xstream_wr_u32_le(s, FILE_BASIC_INFORMATION_SIZE);
|
||||
/* buffer length */
|
||||
/* buffer length */
|
||||
xstream_seek(s, 24); /* padding */
|
||||
|
||||
xstream_wr_u64_le(s, 0LL); /* CreationTime */
|
||||
@ -2156,10 +2171,10 @@ static void issue_setattr_eof(IRP *irp)
|
||||
|
||||
xstream_wr_u32_le(s, FileEndOfFileInformation);
|
||||
xstream_wr_u32_le(s, FILE_END_OF_FILE_INFORMATION_SIZE);
|
||||
/* buffer length */
|
||||
/* buffer length */
|
||||
xstream_seek(s, 24); /* padding */
|
||||
xstream_wr_u64_le(s, (tui64)irp->gen.setattr.fattr.size);
|
||||
/* File size */
|
||||
/* File size */
|
||||
/* send to client */
|
||||
bytes = xstream_len(s);
|
||||
send_channel_data(g_rdpdr_chan_id, s->data, bytes);
|
||||
@ -2184,11 +2199,11 @@ static void setattr_done(IRP *irp, enum NTSTATUS IoStatus)
|
||||
/* Close the file handle */
|
||||
irp->completion_type = CID_CLOSE;
|
||||
devredir_send_drive_close_request(RDPDR_CTYP_CORE,
|
||||
PAKID_CORE_DEVICE_IOREQUEST,
|
||||
irp->DeviceId,
|
||||
irp->FileId,
|
||||
irp->CompletionId,
|
||||
IRP_MJ_CLOSE, IRP_MN_NONE, 32);
|
||||
PAKID_CORE_DEVICE_IOREQUEST,
|
||||
irp->DeviceId,
|
||||
irp->FileId,
|
||||
irp->CompletionId,
|
||||
IRP_MJ_CLOSE, IRP_MN_NONE, 32);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2206,7 +2221,7 @@ devredir_proc_cid_setattr(IRP *irp,
|
||||
TO_SET_ATIME | TO_SET_MTIME)
|
||||
tui32 Length;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "entry state is %d",irp->gen.setattr.state);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "entry state is %d", irp->gen.setattr.state);
|
||||
if (IoStatus != STATUS_SUCCESS)
|
||||
{
|
||||
/* This is common to all setattr states */
|
||||
@ -2216,7 +2231,7 @@ devredir_proc_cid_setattr(IRP *irp,
|
||||
else
|
||||
{
|
||||
/* Read and validate any data we've got queued up */
|
||||
switch(irp->gen.setattr.state)
|
||||
switch (irp->gen.setattr.state)
|
||||
{
|
||||
case E_SETATTR_GET_FH:
|
||||
/* We've been sent the file ID */
|
||||
|
@ -16,7 +16,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* FIFO implementation to store a pointer to a user struct */
|
||||
/* FIFO implementation to store a pointer to a user struct */
|
||||
|
||||
/* module based logging */
|
||||
#if defined(HAVE_CONFIG_H)
|
||||
@ -39,7 +39,7 @@
|
||||
* @return 0 on success, -1 on failure
|
||||
*****************************************************************************/
|
||||
int
|
||||
fifo_init(FIFO* fp, int num_entries)
|
||||
fifo_init(FIFO *fp, int num_entries)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_TRACE, "entered");
|
||||
|
||||
@ -51,7 +51,9 @@ fifo_init(FIFO* fp, int num_entries)
|
||||
}
|
||||
|
||||
if (num_entries < 1)
|
||||
{
|
||||
num_entries = 10;
|
||||
}
|
||||
|
||||
fp->rd_ptr = 0;
|
||||
fp->wr_ptr = 0;
|
||||
@ -61,7 +63,7 @@ fifo_init(FIFO* fp, int num_entries)
|
||||
{
|
||||
fp->entries = num_entries;
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "FIFO created; rd_ptr=%d wr_ptr=%d entries=%d",
|
||||
fp->rd_ptr, fp->wr_ptr, fp->entries);
|
||||
fp->rd_ptr, fp->wr_ptr, fp->entries);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
@ -80,7 +82,7 @@ fifo_init(FIFO* fp, int num_entries)
|
||||
* @return 0 on success, -1 on error
|
||||
*****************************************************************************/
|
||||
int
|
||||
fifo_deinit(FIFO* fp)
|
||||
fifo_deinit(FIFO *fp)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_TRACE, "entered");
|
||||
|
||||
@ -110,7 +112,7 @@ fifo_deinit(FIFO* fp)
|
||||
* @return 1 if FIFO is empty, 0 otherwise
|
||||
*****************************************************************************/
|
||||
int
|
||||
fifo_is_empty(FIFO* fp)
|
||||
fifo_is_empty(FIFO *fp)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_TRACE, "entered");
|
||||
|
||||
@ -133,9 +135,9 @@ fifo_is_empty(FIFO* fp)
|
||||
*****************************************************************************/
|
||||
|
||||
int
|
||||
fifo_insert(FIFO* fp, void* data)
|
||||
fifo_insert(FIFO *fp, void *data)
|
||||
{
|
||||
long* lp;
|
||||
long *lp;
|
||||
int next_val; /* next value for wr_ptr */
|
||||
int i;
|
||||
|
||||
@ -149,7 +151,9 @@ fifo_insert(FIFO* fp, void* data)
|
||||
|
||||
next_val = fp->wr_ptr + 1;
|
||||
if (next_val >= fp->entries)
|
||||
{
|
||||
next_val = 0;
|
||||
}
|
||||
|
||||
if (next_val == fp->rd_ptr)
|
||||
{
|
||||
@ -168,7 +172,9 @@ fifo_insert(FIFO* fp, void* data)
|
||||
{
|
||||
lp[i] = fp->user_data[fp->rd_ptr++];
|
||||
if (fp->rd_ptr >= fp->entries)
|
||||
{
|
||||
fp->rd_ptr = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* update pointers */
|
||||
@ -197,8 +203,8 @@ fifo_insert(FIFO* fp, void* data)
|
||||
*
|
||||
* @param data on success, NULL on error
|
||||
*****************************************************************************/
|
||||
void*
|
||||
fifo_remove(FIFO* fp)
|
||||
void *
|
||||
fifo_remove(FIFO *fp)
|
||||
{
|
||||
long data;
|
||||
|
||||
@ -236,8 +242,8 @@ fifo_remove(FIFO* fp)
|
||||
*
|
||||
* @param data on success, NULL on error
|
||||
*****************************************************************************/
|
||||
void*
|
||||
fifo_peek(FIFO* fp)
|
||||
void *
|
||||
fifo_peek(FIFO *fp)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_TRACE, "entered");
|
||||
|
||||
|
@ -38,7 +38,7 @@ IRP *g_irp_head = NULL;
|
||||
* @return new IRP or NULL on error
|
||||
*****************************************************************************/
|
||||
|
||||
IRP * devredir_irp_new(void)
|
||||
IRP *devredir_irp_new(void)
|
||||
{
|
||||
IRP *irp;
|
||||
IRP *irp_last;
|
||||
@ -78,10 +78,10 @@ IRP * devredir_irp_new(void)
|
||||
* @return new IRP or NULL on error
|
||||
*****************************************************************************/
|
||||
|
||||
IRP * devredir_irp_with_pathname_new(const char *pathname)
|
||||
IRP *devredir_irp_with_pathname_new(const char *pathname)
|
||||
{
|
||||
unsigned int len = g_strlen(pathname);
|
||||
IRP * irp = devredir_irp_with_pathnamelen_new(len);
|
||||
IRP *irp = devredir_irp_with_pathnamelen_new(len);
|
||||
if (irp != NULL)
|
||||
{
|
||||
g_strcpy(irp->pathname, pathname);
|
||||
@ -100,7 +100,7 @@ IRP * devredir_irp_with_pathname_new(const char *pathname)
|
||||
* @return new IRP or NULL on error
|
||||
*****************************************************************************/
|
||||
|
||||
IRP * devredir_irp_with_pathnamelen_new(unsigned int pathnamelen)
|
||||
IRP *devredir_irp_with_pathnamelen_new(unsigned int pathnamelen)
|
||||
{
|
||||
IRP *irp;
|
||||
IRP *irp_last;
|
||||
@ -144,7 +144,9 @@ int devredir_irp_delete(IRP *irp)
|
||||
IRP *lirp = g_irp_head;
|
||||
|
||||
if ((irp == NULL) || (lirp == NULL))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "irp=%p completion_id=%d type=%d",
|
||||
irp, irp->CompletionId, irp->completion_type);
|
||||
@ -154,13 +156,17 @@ int devredir_irp_delete(IRP *irp)
|
||||
while (lirp)
|
||||
{
|
||||
if (lirp == irp)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
lirp = lirp->next;
|
||||
}
|
||||
|
||||
if (lirp == NULL)
|
||||
return -1; /* did not find specified irp */
|
||||
{
|
||||
return -1; /* did not find specified irp */
|
||||
}
|
||||
|
||||
if (lirp->prev == NULL)
|
||||
{
|
||||
@ -220,7 +226,7 @@ IRP *devredir_irp_find(tui32 completion_id)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
IRP * devredir_irp_find_by_fileid(tui32 FileId)
|
||||
IRP *devredir_irp_find_by_fileid(tui32 FileId)
|
||||
{
|
||||
IRP *irp = g_irp_head;
|
||||
|
||||
@ -243,14 +249,16 @@ IRP * devredir_irp_find_by_fileid(tui32 FileId)
|
||||
* Return last IRP in linked list
|
||||
*****************************************************************************/
|
||||
|
||||
IRP * devredir_irp_get_last(void)
|
||||
IRP *devredir_irp_get_last(void)
|
||||
{
|
||||
IRP *irp = g_irp_head;
|
||||
|
||||
while (irp)
|
||||
{
|
||||
if (irp->next == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
irp = irp->next;
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ static int g_true = 1;
|
||||
|
||||
/*****************************************************************************/
|
||||
static int
|
||||
writeln(const char* format, ...)
|
||||
writeln(const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char text[256];
|
||||
@ -86,13 +86,13 @@ writeln(const char* format, ...)
|
||||
}
|
||||
|
||||
#define LLOAD(_func, _type, _name) \
|
||||
do { \
|
||||
_func = (_type) GetProcAddress(lib, _name); \
|
||||
if (_func == 0) \
|
||||
{ \
|
||||
writeln("LLOAD error %s", _name); \
|
||||
} \
|
||||
} while (0)
|
||||
do { \
|
||||
_func = (_type) GetProcAddress(lib, _name); \
|
||||
if (_func == 0) \
|
||||
{ \
|
||||
writeln("LLOAD error %s", _name); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static int g_funcs_loaded = 0;
|
||||
|
||||
|
@ -63,9 +63,9 @@ PCSC_API SCARD_IO_REQUEST g_rgSCardRawPci = { SCARD_PROTOCOL_RAW, 8 };
|
||||
|
||||
#define LLOG_LEVEL 5
|
||||
#define LLOGLN(_level, _args) \
|
||||
do { if (_level < LLOG_LEVEL) { printf _args ; printf("\n"); } } while (0)
|
||||
do { if (_level < LLOG_LEVEL) { printf _args ; printf("\n"); } } while (0)
|
||||
#define LHEXDUMP(_level, _args) \
|
||||
do { if (_level < LLOG_LEVEL) { lhexdump _args ; } } while (0)
|
||||
do { if (_level < LLOG_LEVEL) { lhexdump _args ; } } while (0)
|
||||
|
||||
#define SCARD_ESTABLISH_CONTEXT 0x01
|
||||
#define SCARD_RELEASE_CONTEXT 0x02
|
||||
@ -88,16 +88,16 @@ PCSC_API SCARD_IO_REQUEST g_rgSCardRawPci = { SCARD_PROTOCOL_RAW, 8 };
|
||||
#define SCARD_F_INTERNAL_ERROR ((LONG)0x80100001)
|
||||
|
||||
#define SET_UINT32(_data, _offset, _val) do { \
|
||||
(((BYTE*)(_data)) + (_offset))[0] = ((_val) >> 0) & 0xff; \
|
||||
(((BYTE*)(_data)) + (_offset))[1] = ((_val) >> 8) & 0xff; \
|
||||
(((BYTE*)(_data)) + (_offset))[2] = ((_val) >> 16) & 0xff; \
|
||||
(((BYTE*)(_data)) + (_offset))[3] = ((_val) >> 24) & 0xff; } while (0)
|
||||
(((BYTE*)(_data)) + (_offset))[0] = ((_val) >> 0) & 0xff; \
|
||||
(((BYTE*)(_data)) + (_offset))[1] = ((_val) >> 8) & 0xff; \
|
||||
(((BYTE*)(_data)) + (_offset))[2] = ((_val) >> 16) & 0xff; \
|
||||
(((BYTE*)(_data)) + (_offset))[3] = ((_val) >> 24) & 0xff; } while (0)
|
||||
|
||||
#define GET_UINT32(_data, _offset) \
|
||||
((((BYTE*)(_data)) + (_offset))[0] << 0) | \
|
||||
((((BYTE*)(_data)) + (_offset))[1] << 8) | \
|
||||
((((BYTE*)(_data)) + (_offset))[2] << 16) | \
|
||||
((((BYTE*)(_data)) + (_offset))[3] << 24)
|
||||
((((BYTE*)(_data)) + (_offset))[0] << 0) | \
|
||||
((((BYTE*)(_data)) + (_offset))[1] << 8) | \
|
||||
((((BYTE*)(_data)) + (_offset))[2] << 16) | \
|
||||
((((BYTE*)(_data)) + (_offset))[3] << 24)
|
||||
|
||||
#define LMIN(_val1, _val2) (_val1) < (_val2) ? (_val1) : (_val2)
|
||||
#define LMAX(_val1, _val2) (_val1) > (_val2) ? (_val1) : (_val2)
|
||||
@ -208,7 +208,7 @@ get_display_num_from_display(const char *display_text)
|
||||
disp[disp_index] = 0;
|
||||
scre[scre_index] = 0;
|
||||
LLOGLN(10, ("get_display_num_from_display: host [%s] disp [%s] scre [%s]",
|
||||
host, disp, scre));
|
||||
host, disp, scre));
|
||||
rv = atoi(disp);
|
||||
return rv;
|
||||
}
|
||||
@ -359,7 +359,7 @@ get_message(int *code, char *data, int *bytes)
|
||||
else
|
||||
{
|
||||
LLOGLN(10, ("get_message: lcode %d *code %d",
|
||||
lcode, *code));
|
||||
lcode, *code));
|
||||
}
|
||||
}
|
||||
else if (recv_rv == 0)
|
||||
@ -421,7 +421,7 @@ SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2,
|
||||
if (connect_to_chansrv() != 0)
|
||||
{
|
||||
LLOGLN(0, ("SCardEstablishContext: error, can not connect "
|
||||
"to chansrv"));
|
||||
"to chansrv"));
|
||||
return SCARD_F_INTERNAL_ERROR;
|
||||
}
|
||||
}
|
||||
@ -515,8 +515,8 @@ SCardConnect(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode,
|
||||
|
||||
LLOGLN(10, ("SCardConnect:"));
|
||||
LLOGLN(10, ("SCardConnect: hContext 0x%8.8x szReader %s dwShareMode %d "
|
||||
"dwPreferredProtocols %d",
|
||||
(int)hContext, szReader, (int)dwShareMode, (int)dwPreferredProtocols));
|
||||
"dwPreferredProtocols %d",
|
||||
(int)hContext, szReader, (int)dwShareMode, (int)dwPreferredProtocols));
|
||||
if (g_sck == -1)
|
||||
{
|
||||
LLOGLN(0, ("SCardConnect: error, not connected"));
|
||||
@ -559,8 +559,8 @@ SCardConnect(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode,
|
||||
*pdwActiveProtocol = GET_UINT32(msg, 4);
|
||||
status = GET_UINT32(msg, 8);
|
||||
LLOGLN(10, ("SCardConnect: got status 0x%8.8x hCard 0x%8.8x "
|
||||
"dwActiveProtocol %d",
|
||||
status, (int)*phCard, (int)*pdwActiveProtocol));
|
||||
"dwActiveProtocol %d",
|
||||
status, (int)*phCard, (int)*pdwActiveProtocol));
|
||||
return status;
|
||||
}
|
||||
|
||||
@ -589,7 +589,7 @@ SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition)
|
||||
int status;
|
||||
|
||||
LLOGLN(10, ("SCardDisconnect: hCard 0x%8.8x dwDisposition %d",
|
||||
(int)hCard, (int)dwDisposition));
|
||||
(int)hCard, (int)dwDisposition));
|
||||
if (g_sck == -1)
|
||||
{
|
||||
LLOGLN(0, ("SCardDisconnect: error, not connected"));
|
||||
@ -1051,10 +1051,10 @@ SCardTransmit(SCARDHANDLE hCard, const SCARD_IO_REQUEST *pioSendPci,
|
||||
offset += 4;
|
||||
SET_UINT32(msg, offset, pioSendPci->dwProtocol);
|
||||
offset += 4;
|
||||
/* SET_UINT32(msg, offset, pioSendPci->cbPciLength); */
|
||||
/* SET_UINT32(msg, offset, pioSendPci->cbPciLength); */
|
||||
SET_UINT32(msg, offset, 8);
|
||||
offset += 4;
|
||||
/* extra_len = pioSendPci->cbPciLength - 8; */
|
||||
/* extra_len = pioSendPci->cbPciLength - 8; */
|
||||
extra_len = 0;
|
||||
SET_UINT32(msg, offset, extra_len);
|
||||
offset += 4;
|
||||
@ -1158,8 +1158,8 @@ PCSC_API LONG
|
||||
SCardListReaders(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders,
|
||||
LPDWORD pcchReaders)
|
||||
{
|
||||
char* msg;
|
||||
char* reader_names;
|
||||
char *msg;
|
||||
char *reader_names;
|
||||
int reader_names_index;
|
||||
int code;
|
||||
int bytes;
|
||||
@ -1229,7 +1229,7 @@ SCardListReaders(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders,
|
||||
num_readers = GET_UINT32(msg, offset);
|
||||
offset += 4;
|
||||
LLOGLN(10, ("SCardListReaders: mszReaders %p pcchReaders %p num_readers %d",
|
||||
mszReaders, pcchReaders, num_readers));
|
||||
mszReaders, pcchReaders, num_readers));
|
||||
reader_names = (char *) malloc(8192);
|
||||
reader_names_index = 0;
|
||||
for (index = 0; index < num_readers; index++)
|
||||
|
@ -65,7 +65,7 @@ int g_rail_up = 0;
|
||||
/* for rail_is_another_wm_running */
|
||||
static int g_rail_running = 1;
|
||||
/* list of valid rail windows */
|
||||
static struct list* g_window_list = 0;
|
||||
static struct list *g_window_list = 0;
|
||||
|
||||
static int g_got_focus = 0;
|
||||
static int g_focus_counter = 0;
|
||||
@ -185,7 +185,7 @@ rail_send_key_esc(int window_id)
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static struct rail_window_data*
|
||||
static struct rail_window_data *
|
||||
rail_get_window_data(Window window)
|
||||
{
|
||||
unsigned int bytes;
|
||||
@ -193,8 +193,8 @@ rail_get_window_data(Window window)
|
||||
int actual_format_return;
|
||||
unsigned long nitems_return;
|
||||
unsigned long bytes_after_return;
|
||||
unsigned char* prop_return;
|
||||
struct rail_window_data* rv;
|
||||
unsigned char *prop_return;
|
||||
struct rail_window_data *rv;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_get_window_data:");
|
||||
rv = 0;
|
||||
@ -213,29 +213,29 @@ rail_get_window_data(Window window)
|
||||
}
|
||||
if (nitems_return == bytes)
|
||||
{
|
||||
rv = (struct rail_window_data*)prop_return;
|
||||
rv = (struct rail_window_data *)prop_return;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
static int
|
||||
rail_set_window_data(Window window, struct rail_window_data* rwd)
|
||||
rail_set_window_data(Window window, struct rail_window_data *rwd)
|
||||
{
|
||||
int bytes;
|
||||
|
||||
bytes = sizeof(struct rail_window_data);
|
||||
XChangeProperty(g_display, window, g_rwd_atom, XA_STRING, 8,
|
||||
PropModeReplace, (unsigned char*)rwd, bytes);
|
||||
PropModeReplace, (unsigned char *)rwd, bytes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/* get the rail window data, if not exist, try to create it and return */
|
||||
static struct rail_window_data*
|
||||
static struct rail_window_data *
|
||||
rail_get_window_data_safe(Window window)
|
||||
{
|
||||
struct rail_window_data* rv;
|
||||
struct rail_window_data *rv;
|
||||
|
||||
rv = rail_get_window_data(window);
|
||||
if (rv != 0)
|
||||
@ -369,8 +369,8 @@ rail_startup(void)
|
||||
|
||||
if (rail_is_another_wm_running())
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "rail_init: another window manager "
|
||||
"is running");
|
||||
LOG(LOG_LEVEL_ERROR, "rail_init: another window manager "
|
||||
"is running");
|
||||
}
|
||||
|
||||
list_delete(g_window_list);
|
||||
@ -382,7 +382,7 @@ rail_startup(void)
|
||||
if (!XRRQueryExtension(g_display, &g_xrr_event_base, &dummy))
|
||||
{
|
||||
g_xrr_event_base = 0;
|
||||
log_message(LOG_LEVEL_ERROR, "rail_init: RandR extension not found");
|
||||
LOG(LOG_LEVEL_ERROR, "rail_init: RandR extension not found");
|
||||
}
|
||||
|
||||
if (g_xrr_event_base > 0)
|
||||
@ -462,9 +462,9 @@ rail_process_exec(struct stream *s, int size)
|
||||
WorkingDir = read_uni(s, WorkingDirLength);
|
||||
Arguments = read_uni(s, ArgumentsLen);
|
||||
LOG(LOG_LEVEL_DEBUG, " flags 0x%8.8x ExeOrFileLength %d WorkingDirLength %d "
|
||||
"ArgumentsLen %d ExeOrFile [%s] WorkingDir [%s] "
|
||||
"Arguments [%s]", flags, ExeOrFileLength, WorkingDirLength,
|
||||
ArgumentsLen, ExeOrFile, WorkingDir, Arguments);
|
||||
"ArgumentsLen %d ExeOrFile [%s] WorkingDir [%s] "
|
||||
"Arguments [%s]", flags, ExeOrFileLength, WorkingDirLength,
|
||||
ArgumentsLen, ExeOrFile, WorkingDir, Arguments);
|
||||
|
||||
if (g_strlen(ExeOrFile) > 0)
|
||||
{
|
||||
@ -495,7 +495,7 @@ rail_win_popdown(void)
|
||||
unsigned int nchild;
|
||||
Window r;
|
||||
Window p;
|
||||
Window* children;
|
||||
Window *children;
|
||||
XWindowAttributes window_attributes;
|
||||
|
||||
/*
|
||||
@ -509,8 +509,8 @@ rail_win_popdown(void)
|
||||
{
|
||||
XGetWindowAttributes(g_display, children[i], &window_attributes);
|
||||
if (window_attributes.override_redirect &&
|
||||
window_attributes.map_state == IsViewable &&
|
||||
list_index_of(g_window_list, children[i]) >= 0)
|
||||
window_attributes.map_state == IsViewable &&
|
||||
list_index_of(g_window_list, children[i]) >= 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " dismiss pop up 0x%8.8lx", children[i]);
|
||||
rail_send_key_esc(children[i]);
|
||||
@ -547,7 +547,7 @@ rail_close_window(int window_id)
|
||||
|
||||
/*****************************************************************************/
|
||||
void
|
||||
my_timeout(void* data)
|
||||
my_timeout(void *data)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "my_timeout: g_got_focus %d", g_got_focus);
|
||||
if (g_focus_counter == (int)(long)data)
|
||||
@ -575,7 +575,7 @@ rail_process_activate(struct stream *s, int size)
|
||||
if (index < 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_process_activate: window 0x%8.8x not in list",
|
||||
window_id);
|
||||
window_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -615,10 +615,12 @@ rail_process_activate(struct stream *s, int size)
|
||||
XRaiseWindow(g_display, window_id);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_process_activate: calling XSetInputFocus 0x%8.8x", window_id);
|
||||
XSetInputFocus(g_display, window_id, RevertToParent, CurrentTime);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " window attributes: override_redirect %d",
|
||||
window_attributes.override_redirect);
|
||||
add_timeout(200, my_timeout, (void*)(long)g_focus_counter);
|
||||
window_attributes.override_redirect);
|
||||
add_timeout(200, my_timeout, (void *)(long)g_focus_counter);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -643,7 +645,7 @@ rail_restore_windows(void)
|
||||
unsigned int nchild;
|
||||
Window r;
|
||||
Window p;
|
||||
Window* children;
|
||||
Window *children;
|
||||
|
||||
XQueryTree(g_display, g_root_window, &r, &p, &children, &nchild);
|
||||
for (i = 0; i < nchild; i++)
|
||||
@ -690,13 +692,13 @@ rail_process_system_param(struct stream *s, int size)
|
||||
|
||||
/*****************************************************************************/
|
||||
static int
|
||||
rail_get_property(Display* display, Window target, Atom type, Atom property,
|
||||
unsigned char** data, unsigned long* count)
|
||||
rail_get_property(Display *display, Window target, Atom type, Atom property,
|
||||
unsigned char **data, unsigned long *count)
|
||||
{
|
||||
Atom atom_return;
|
||||
int size;
|
||||
unsigned long nitems, bytes_left;
|
||||
char* prop_name;
|
||||
char *prop_name;
|
||||
|
||||
int ret = XGetWindowProperty(display, target, property,
|
||||
0l, 1l, False,
|
||||
@ -734,7 +736,7 @@ rail_win_get_state(Window win)
|
||||
{
|
||||
unsigned long nitems = 0;
|
||||
int rv = -1;
|
||||
char* data = 0;
|
||||
char *data = 0;
|
||||
|
||||
rail_get_property(g_display, win, g_wm_state, g_wm_state,
|
||||
(unsigned char **)&data,
|
||||
@ -823,7 +825,9 @@ rail_minmax_window(int window_id, int max)
|
||||
if (max)
|
||||
{
|
||||
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
XUnmapWindow(g_display, window_id);
|
||||
/* change window state to IconicState (3) */
|
||||
rail_win_set_state(window_id, 0x3);
|
||||
@ -870,7 +874,7 @@ rail_process_system_command(struct stream *s, int size)
|
||||
if (index < 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_process_system_command: window 0x%8.8x not in list",
|
||||
window_id);
|
||||
window_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -905,7 +909,7 @@ rail_process_system_command(struct stream *s, int size)
|
||||
break;
|
||||
default:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " window_id 0x%8.8x unknown command command %d",
|
||||
window_id, command);
|
||||
window_id, command);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -937,7 +941,7 @@ rail_process_notify_event(struct stream *s, int size)
|
||||
in_uint32_le(s, notify_id);
|
||||
in_uint32_le(s, message);
|
||||
LOG(LOG_LEVEL_DEBUG, " window_id 0x%8.8x notify_id 0x%8.8x message 0x%8.8x",
|
||||
window_id, notify_id, message);
|
||||
window_id, notify_id, message);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -951,7 +955,7 @@ rail_process_window_move(struct stream *s, int size)
|
||||
int right;
|
||||
int bottom;
|
||||
tsi16 si16;
|
||||
struct rail_window_data* rwd;
|
||||
struct rail_window_data *rwd;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_process_window_move:");
|
||||
in_uint32_le(s, window_id);
|
||||
@ -964,10 +968,10 @@ rail_process_window_move(struct stream *s, int size)
|
||||
in_uint16_le(s, si16);
|
||||
bottom = si16;
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " window_id 0x%8.8x left %d top %d right %d bottom %d width %d height %d",
|
||||
window_id, left, top, right, bottom, right - left, bottom - top);
|
||||
window_id, left, top, right, bottom, right - left, bottom - top);
|
||||
XMoveResizeWindow(g_display, window_id, left, top, right - left, bottom - top);
|
||||
rwd = (struct rail_window_data*)
|
||||
g_malloc(sizeof(struct rail_window_data), 1);
|
||||
rwd = (struct rail_window_data *)
|
||||
g_malloc(sizeof(struct rail_window_data), 1);
|
||||
rwd->x = left;
|
||||
rwd->y = top;
|
||||
rwd->width = right - left;
|
||||
@ -997,8 +1001,8 @@ rail_process_local_move_size(struct stream *s, int size)
|
||||
in_uint16_le(s, si16);
|
||||
pos_y = si16;
|
||||
LOG(LOG_LEVEL_DEBUG, " window_id 0x%8.8x is_move_size_start %d move_size_type %d "
|
||||
"pos_x %d pos_y %d", window_id, is_move_size_start, move_size_type,
|
||||
pos_x, pos_y);
|
||||
"pos_x %d pos_y %d", window_id, is_move_size_start, move_size_type,
|
||||
pos_x, pos_y);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1199,12 +1203,12 @@ static const unsigned int g_crc_table[256] =
|
||||
|
||||
#define CRC_START(in_crc) (in_crc) = g_crc_seed
|
||||
#define CRC_PASS(in_pixel, in_crc) \
|
||||
(in_crc) = g_crc_table[((in_crc) ^ (in_pixel)) & 0xff] ^ ((in_crc) >> 8)
|
||||
(in_crc) = g_crc_table[((in_crc) ^ (in_pixel)) & 0xff] ^ ((in_crc) >> 8)
|
||||
#define CRC_END(in_crc) (in_crc) = ((in_crc) ^ g_crc_seed)
|
||||
|
||||
/*****************************************************************************/
|
||||
static int
|
||||
get_string_crc(const char* text)
|
||||
get_string_crc(const char *text)
|
||||
{
|
||||
int index;
|
||||
int crc;
|
||||
@ -1225,12 +1229,12 @@ get_string_crc(const char* text)
|
||||
static int
|
||||
rail_win_send_text(Window win)
|
||||
{
|
||||
char* data = 0;
|
||||
struct stream* s;
|
||||
char *data = 0;
|
||||
struct stream *s;
|
||||
int len = 0;
|
||||
int flags;
|
||||
int crc;
|
||||
struct rail_window_data* rwd;
|
||||
struct rail_window_data *rwd;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_win_send_text:");
|
||||
len = rail_win_get_text(win, &data);
|
||||
@ -1261,7 +1265,7 @@ rail_win_send_text(Window win)
|
||||
if (data && len > 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_win_send_text: 0x%8.8lx text %s length %d",
|
||||
win, data, len);
|
||||
win, data, len);
|
||||
make_stream(s);
|
||||
init_stream(s, len + 1024);
|
||||
flags = WINDOW_ORDER_TYPE_WINDOW | WINDOW_ORDER_FIELD_TITLE;
|
||||
@ -1308,7 +1312,7 @@ static int
|
||||
rail_show_window(Window window_id, int show_state)
|
||||
{
|
||||
int flags;
|
||||
struct stream* s;
|
||||
struct stream *s;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_show_window 0x%8.8lx 0x%x", window_id, show_state);
|
||||
make_stream(s);
|
||||
@ -1336,7 +1340,7 @@ rail_create_window(Window window_id, Window owner_id)
|
||||
tui32 border;
|
||||
Window root;
|
||||
tui32 depth;
|
||||
char* title_bytes = 0;
|
||||
char *title_bytes = 0;
|
||||
int title_size = 0;
|
||||
XWindowAttributes attributes;
|
||||
int style;
|
||||
@ -1349,8 +1353,8 @@ rail_create_window(Window window_id, Window owner_id)
|
||||
int index;
|
||||
int crc;
|
||||
Window transient_for = 0;
|
||||
struct rail_window_data* rwd;
|
||||
struct stream* s;
|
||||
struct rail_window_data *rwd;
|
||||
struct stream *s;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_create_window 0x%8.8lx", window_id);
|
||||
|
||||
@ -1365,7 +1369,7 @@ rail_create_window(Window window_id, Window owner_id)
|
||||
XGetWindowAttributes(g_display, window_id, &attributes);
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " x %d y %d width %d height %d border_width %d", x, y, width,
|
||||
height, border);
|
||||
height, border);
|
||||
|
||||
index = list_index_of(g_window_list, window_id);
|
||||
if (index == -1)
|
||||
@ -1488,7 +1492,7 @@ rail_create_window(Window window_id, Window owner_id)
|
||||
/*****************************************************************************/
|
||||
/* returns 0, event handled, 1 unhandled */
|
||||
int
|
||||
rail_configure_request_window(XConfigureRequestEvent* config)
|
||||
rail_configure_request_window(XConfigureRequestEvent *config)
|
||||
{
|
||||
int num_window_rects = 1;
|
||||
int num_visibility_rects = 1;
|
||||
@ -1498,9 +1502,9 @@ rail_configure_request_window(XConfigureRequestEvent* config)
|
||||
int window_id;
|
||||
int mask;
|
||||
int resized = 0;
|
||||
struct rail_window_data* rwd;
|
||||
struct rail_window_data *rwd;
|
||||
|
||||
struct stream* s;
|
||||
struct stream *s;
|
||||
|
||||
window_id = config->window;
|
||||
mask = config->value_mask;
|
||||
@ -1508,11 +1512,11 @@ rail_configure_request_window(XConfigureRequestEvent* config)
|
||||
if (mask & CWStackMode)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_configure_request_window: CWStackMode "
|
||||
"detail 0x%8.8x above 0x%8.8lx", config->detail, config->above);
|
||||
"detail 0x%8.8x above 0x%8.8lx", config->detail, config->above);
|
||||
if (config->detail == Above)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_configure_request_window: bring to front "
|
||||
"window_id 0x%8.8x", window_id);
|
||||
"window_id 0x%8.8x", window_id);
|
||||
/* 0x05 - Show the window in its current size and position. */
|
||||
rail_show_window(window_id, 5);
|
||||
}
|
||||
@ -1520,7 +1524,7 @@ rail_configure_request_window(XConfigureRequestEvent* config)
|
||||
rwd = rail_get_window_data(window_id);
|
||||
if (rwd == 0)
|
||||
{
|
||||
rwd = (struct rail_window_data*)g_malloc(sizeof(struct rail_window_data), 1);
|
||||
rwd = (struct rail_window_data *)g_malloc(sizeof(struct rail_window_data), 1);
|
||||
rwd->x = config->x;
|
||||
rwd->y = config->y;
|
||||
rwd->width = config->width;
|
||||
@ -1625,7 +1629,7 @@ rail_configure_request_window(XConfigureRequestEvent* config)
|
||||
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " x %d y %d width %d height %d border_width %d", config->x,
|
||||
config->y, config->width, config->height, config->border_width);
|
||||
config->y, config->width, config->height, config->border_width);
|
||||
|
||||
index = list_index_of(g_window_list, window_id);
|
||||
if (index == -1)
|
||||
@ -1702,7 +1706,7 @@ rail_configure_window(XConfigureEvent *config)
|
||||
int index;
|
||||
int window_id;
|
||||
|
||||
struct stream* s;
|
||||
struct stream *s;
|
||||
|
||||
window_id = config->window;
|
||||
|
||||
@ -1710,7 +1714,7 @@ rail_configure_window(XConfigureEvent *config)
|
||||
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " x %d y %d width %d height %d border_width %d", config->x,
|
||||
config->y, config->width, config->height, config->border_width);
|
||||
config->y, config->width, config->height, config->border_width);
|
||||
|
||||
index = list_index_of(g_window_list, window_id);
|
||||
if (index == -1)
|
||||
@ -1793,7 +1797,7 @@ rail_xevent(void *xevent)
|
||||
int rv;
|
||||
int index;
|
||||
XWindowAttributes wnd_attributes;
|
||||
char* prop_name;
|
||||
char *prop_name;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "chansrv::rail_xevent:");
|
||||
|
||||
@ -1810,8 +1814,8 @@ rail_xevent(void *xevent)
|
||||
case PropertyNotify:
|
||||
prop_name = XGetAtomName(g_display, lxevent->xproperty.atom);
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " got PropertyNotify window_id 0x%8.8lx %s state new %d",
|
||||
lxevent->xproperty.window, prop_name,
|
||||
lxevent->xproperty.state == PropertyNewValue);
|
||||
lxevent->xproperty.window, prop_name,
|
||||
lxevent->xproperty.state == PropertyNewValue);
|
||||
|
||||
if (list_index_of(g_window_list, lxevent->xproperty.window) < 0)
|
||||
{
|
||||
@ -1819,7 +1823,7 @@ rail_xevent(void *xevent)
|
||||
}
|
||||
|
||||
if (g_strcmp(prop_name, "WM_NAME") == 0 ||
|
||||
g_strcmp(prop_name, "_NET_WM_NAME") == 0)
|
||||
g_strcmp(prop_name, "_NET_WM_NAME") == 0)
|
||||
{
|
||||
XGetWindowAttributes(g_display, lxevent->xproperty.window, &wnd_attributes);
|
||||
if (wnd_attributes.map_state == IsViewable)
|
||||
@ -1851,13 +1855,13 @@ rail_xevent(void *xevent)
|
||||
|
||||
case CreateNotify:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " got CreateNotify window 0x%8.8lx parent 0x%8.8lx",
|
||||
lxevent->xcreatewindow.window, lxevent->xcreatewindow.parent);
|
||||
lxevent->xcreatewindow.window, lxevent->xcreatewindow.parent);
|
||||
rail_select_input(lxevent->xcreatewindow.window);
|
||||
break;
|
||||
|
||||
case DestroyNotify:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " got DestroyNotify window 0x%8.8lx event 0x%8.8lx",
|
||||
lxevent->xdestroywindow.window, lxevent->xdestroywindow.event);
|
||||
lxevent->xdestroywindow.window, lxevent->xdestroywindow.event);
|
||||
if (lxevent->xdestroywindow.window != lxevent->xdestroywindow.event)
|
||||
{
|
||||
break;
|
||||
@ -1878,7 +1882,7 @@ rail_xevent(void *xevent)
|
||||
|
||||
case MapNotify:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " got MapNotify window 0x%8.8lx event 0x%8.8lx",
|
||||
lxevent->xmap.window, lxevent->xmap.event);
|
||||
lxevent->xmap.window, lxevent->xmap.event);
|
||||
if (lxevent->xmap.window != lxevent->xmap.event)
|
||||
{
|
||||
break;
|
||||
@ -1920,8 +1924,10 @@ rail_xevent(void *xevent)
|
||||
// remove popups
|
||||
rail_destroy_window(lxevent->xunmap.window);
|
||||
list_remove_item(g_window_list, index);
|
||||
} else {
|
||||
rail_show_window(lxevent->xunmap.window, 0x0);
|
||||
}
|
||||
else
|
||||
{
|
||||
rail_show_window(lxevent->xunmap.window, 0x0);
|
||||
}
|
||||
|
||||
rv = 0;
|
||||
@ -1931,10 +1937,10 @@ rail_xevent(void *xevent)
|
||||
|
||||
case ConfigureNotify:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " got ConfigureNotify 0x%8.8lx event 0x%8.8lx", lxevent->xconfigure.window,
|
||||
lxevent->xconfigure.event);
|
||||
lxevent->xconfigure.event);
|
||||
rv = 0;
|
||||
if (lxevent->xconfigure.event != lxevent->xconfigure.window ||
|
||||
lxevent->xconfigure.override_redirect)
|
||||
lxevent->xconfigure.override_redirect)
|
||||
{
|
||||
break;
|
||||
}
|
||||
@ -1944,7 +1950,7 @@ rail_xevent(void *xevent)
|
||||
ConfigureNotify, &lastevent))
|
||||
{
|
||||
if (lastevent.xconfigure.event == lastevent.xconfigure.window &&
|
||||
lxevent->xconfigure.override_redirect == 0)
|
||||
lxevent->xconfigure.override_redirect == 0)
|
||||
{
|
||||
lxevent = &lastevent;
|
||||
}
|
||||
@ -1977,10 +1983,10 @@ rail_xevent(void *xevent)
|
||||
|
||||
case ReparentNotify:
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, " got ReparentNotify window 0x%8.8lx parent 0x%8.8lx "
|
||||
"event 0x%8.8lx x %d y %d override redirect %d",
|
||||
lxevent->xreparent.window, lxevent->xreparent.parent,
|
||||
lxevent->xreparent.event, lxevent->xreparent.x,
|
||||
lxevent->xreparent.y, lxevent->xreparent.override_redirect);
|
||||
"event 0x%8.8lx x %d y %d override redirect %d",
|
||||
lxevent->xreparent.window, lxevent->xreparent.parent,
|
||||
lxevent->xreparent.event, lxevent->xreparent.x,
|
||||
lxevent->xreparent.y, lxevent->xreparent.override_redirect);
|
||||
|
||||
if (lxevent->xreparent.window != lxevent->xreparent.event)
|
||||
{
|
||||
|
@ -111,7 +111,7 @@ typedef struct smartcard
|
||||
} SMARTCARD;
|
||||
|
||||
/* globals */
|
||||
SMARTCARD* smartcards[MAX_SMARTCARDS];
|
||||
SMARTCARD *smartcards[MAX_SMARTCARDS];
|
||||
int g_smartcards_inited = 0;
|
||||
static tui32 g_device_id = 0;
|
||||
static int g_scard_index = 0;
|
||||
@ -124,132 +124,132 @@ extern int g_rdpdr_chan_id; /* in chansrv.c */
|
||||
/******************************************************************************
|
||||
** static functions local to this file **
|
||||
******************************************************************************/
|
||||
static struct stream * scard_make_new_ioctl(IRP *irp, tui32 ioctl);
|
||||
static struct stream *scard_make_new_ioctl(IRP *irp, tui32 ioctl);
|
||||
static int scard_add_new_device(tui32 device_id);
|
||||
static int scard_get_free_slot(void);
|
||||
static void scard_release_resources(void);
|
||||
static void scard_send_EstablishContext(IRP *irp, int scope);
|
||||
static void scard_send_ReleaseContext(IRP *irp,
|
||||
char *context, int context_bytes);
|
||||
static void scard_send_IsContextValid(IRP* irp,
|
||||
char *context, int context_bytes);
|
||||
char *context, int context_bytes);
|
||||
static void scard_send_IsContextValid(IRP *irp,
|
||||
char *context, int context_bytes);
|
||||
static void scard_send_ListReaders(IRP *irp,
|
||||
char *context, int context_bytes,
|
||||
char *groups, int cchReaders,
|
||||
int wide);
|
||||
char *context, int context_bytes,
|
||||
char *groups, int cchReaders,
|
||||
int wide);
|
||||
static void scard_send_GetStatusChange(IRP *irp,
|
||||
char *context, int context_bytes,
|
||||
int wide,
|
||||
tui32 timeout, tui32 num_readers,
|
||||
READER_STATE *rsa);
|
||||
char *context, int context_bytes,
|
||||
int wide,
|
||||
tui32 timeout, tui32 num_readers,
|
||||
READER_STATE *rsa);
|
||||
static void scard_send_Connect(IRP *irp,
|
||||
char *context, int context_bytes,
|
||||
int wide,
|
||||
READER_STATE *rs);
|
||||
char *context, int context_bytes,
|
||||
int wide,
|
||||
READER_STATE *rs);
|
||||
static void scard_send_Reconnect(IRP *irp,
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
READER_STATE *rs);
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
READER_STATE *rs);
|
||||
static void scard_send_BeginTransaction(IRP *irp,
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes);
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes);
|
||||
static void scard_send_EndTransaction(IRP *irp,
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
tui32 dwDisposition);
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
tui32 dwDisposition);
|
||||
static void scard_send_Status(IRP *irp, int wide,
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
int cchReaderLen, int cbAtrLen);
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
int cchReaderLen, int cbAtrLen);
|
||||
static void scard_send_Disconnect(IRP *irp,
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
int dwDisposition);
|
||||
char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
int dwDisposition);
|
||||
static int scard_send_Transmit(IRP *irp,
|
||||
char *context, int context_byte,
|
||||
char *card, int card_bytes,
|
||||
char *send_data, int send_bytes,
|
||||
int recv_bytes,
|
||||
struct xrdp_scard_io_request *send_ior,
|
||||
struct xrdp_scard_io_request *recv_ior);
|
||||
static int scard_send_Control(IRP* irp, char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
char *send_data, int send_bytes,
|
||||
int recv_bytes, int control_code);
|
||||
char *context, int context_byte,
|
||||
char *card, int card_bytes,
|
||||
char *send_data, int send_bytes,
|
||||
int recv_bytes,
|
||||
struct xrdp_scard_io_request *send_ior,
|
||||
struct xrdp_scard_io_request *recv_ior);
|
||||
static int scard_send_Control(IRP *irp, char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
char *send_data, int send_bytes,
|
||||
int recv_bytes, int control_code);
|
||||
static int scard_send_Cancel(IRP *irp, char *context, int context_bytes);
|
||||
static int scard_send_GetAttrib(IRP *irp, char *card, int card_bytes,
|
||||
READER_STATE *rs);
|
||||
READER_STATE *rs);
|
||||
|
||||
/******************************************************************************
|
||||
** local callbacks into this module **
|
||||
******************************************************************************/
|
||||
|
||||
static void scard_handle_EstablishContext_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_ReleaseContext_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
|
||||
static void scard_handle_IsContextValid_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_ListReaders_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_GetStatusChange_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_Connect_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_Reconnect_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_BeginTransaction_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_EndTransaction_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_Status_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_Disconnect_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId, tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
|
||||
static void scard_handle_Transmit_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_Control_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_Cancel_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
static void scard_handle_GetAttrib_Return(struct stream *s, IRP *irp,
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
tui32 DeviceId,
|
||||
tui32 CompletionId,
|
||||
tui32 IoStatus);
|
||||
|
||||
/******************************************************************************
|
||||
** **
|
||||
@ -448,7 +448,7 @@ scard_send_list_readers(void *user_data, char *context, int context_bytes,
|
||||
int
|
||||
scard_send_get_status_change(void *user_data, char *context, int context_bytes,
|
||||
int wide, tui32 timeout, tui32 num_readers,
|
||||
READER_STATE* rsa)
|
||||
READER_STATE *rsa)
|
||||
{
|
||||
IRP *irp;
|
||||
|
||||
@ -480,7 +480,7 @@ scard_send_get_status_change(void *user_data, char *context, int context_bytes,
|
||||
*****************************************************************************/
|
||||
int
|
||||
scard_send_connect(void *user_data, char *context, int context_bytes,
|
||||
int wide, READER_STATE* rs)
|
||||
int wide, READER_STATE *rs)
|
||||
{
|
||||
IRP *irp;
|
||||
|
||||
@ -516,7 +516,7 @@ scard_send_connect(void *user_data, char *context, int context_bytes,
|
||||
*****************************************************************************/
|
||||
int
|
||||
scard_send_reconnect(void *user_data, char *context, int context_bytes,
|
||||
char *card, int card_bytes, READER_STATE* rs)
|
||||
char *card, int card_bytes, READER_STATE *rs)
|
||||
{
|
||||
IRP *irp;
|
||||
|
||||
@ -547,7 +547,7 @@ scard_send_reconnect(void *user_data, char *context, int context_bytes,
|
||||
*****************************************************************************/
|
||||
int
|
||||
scard_send_begin_transaction(void *user_data, char *context, int context_bytes,
|
||||
char *card, int card_bytes)
|
||||
char *card, int card_bytes)
|
||||
{
|
||||
IRP *irp;
|
||||
|
||||
@ -707,7 +707,7 @@ scard_send_transmit(void *user_data, char *context, int context_bytes,
|
||||
* Communicate directly with the smart card reader
|
||||
*****************************************************************************/
|
||||
int
|
||||
scard_send_control(void *user_data, char* context, int context_bytes,
|
||||
scard_send_control(void *user_data, char *context, int context_bytes,
|
||||
char *card, int card_bytes,
|
||||
char *send_data, int send_bytes,
|
||||
int recv_bytes, int control_code)
|
||||
@ -768,7 +768,7 @@ scard_send_cancel(void *user_data, char *context, int context_bytes)
|
||||
*****************************************************************************/
|
||||
int
|
||||
scard_send_get_attrib(void *user_data, char *card, int card_bytes,
|
||||
READER_STATE* rs)
|
||||
READER_STATE *rs)
|
||||
{
|
||||
IRP *irp;
|
||||
|
||||
@ -1104,7 +1104,7 @@ scard_send_ListReaders(IRP *irp, char *context, int context_bytes,
|
||||
}
|
||||
|
||||
ioctl = (wide) ? SCARD_IOCTL_LIST_READERS_W :
|
||||
SCARD_IOCTL_LIST_READERS_A;
|
||||
SCARD_IOCTL_LIST_READERS_A;
|
||||
|
||||
if ((s = scard_make_new_ioctl(irp, ioctl)) == NULL)
|
||||
{
|
||||
@ -1180,10 +1180,7 @@ scard_send_ListReaders(IRP *irp, char *context, int context_bytes,
|
||||
/* send to client */
|
||||
send_channel_data(g_rdpdr_chan_id, s->data, bytes);
|
||||
|
||||
#if 0
|
||||
g_writeln("scard_send_ListReaders:");
|
||||
g_hexdump(s->data, bytes);
|
||||
#endif
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "scard_send_ListReaders:", s->data, bytes);
|
||||
|
||||
free_stream(s);
|
||||
}
|
||||
@ -1213,9 +1210,9 @@ align_s(struct stream *s, int bytes)
|
||||
* @param rsa array of READER_STATEs
|
||||
*****************************************************************************/
|
||||
static void
|
||||
scard_send_GetStatusChange(IRP* irp, char *context, int context_bytes,
|
||||
scard_send_GetStatusChange(IRP *irp, char *context, int context_bytes,
|
||||
int wide, tui32 timeout,
|
||||
tui32 num_readers, READER_STATE* rsa)
|
||||
tui32 num_readers, READER_STATE *rsa)
|
||||
{
|
||||
/* see [MS-RDPESC] 2.2.2.11 for ASCII */
|
||||
/* see [MS-RDPESC] 2.2.2.12 for Wide char */
|
||||
@ -1237,7 +1234,7 @@ scard_send_GetStatusChange(IRP* irp, char *context, int context_bytes,
|
||||
}
|
||||
|
||||
ioctl = (wide) ? SCARD_IOCTL_GET_STATUS_CHANGE_W :
|
||||
SCARD_IOCTL_GET_STATUS_CHANGE_A;
|
||||
SCARD_IOCTL_GET_STATUS_CHANGE_A;
|
||||
|
||||
if ((s = scard_make_new_ioctl(irp, ioctl)) == NULL)
|
||||
{
|
||||
@ -1328,10 +1325,7 @@ scard_send_GetStatusChange(IRP* irp, char *context, int context_bytes,
|
||||
/* send to client */
|
||||
send_channel_data(g_rdpdr_chan_id, s->data, bytes);
|
||||
|
||||
#if 0
|
||||
g_writeln("scard_send_GetStatusChange:");
|
||||
g_hexdump(s->data, bytes);
|
||||
#endif
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "scard_send_GetStatusChange:", s->data, bytes);
|
||||
|
||||
free_stream(s);
|
||||
}
|
||||
@ -1344,14 +1338,14 @@ scard_send_GetStatusChange(IRP* irp, char *context, int context_bytes,
|
||||
* @param rs reader state
|
||||
*****************************************************************************/
|
||||
static void
|
||||
scard_send_Connect(IRP* irp, char *context, int context_bytes,
|
||||
int wide, READER_STATE* rs)
|
||||
scard_send_Connect(IRP *irp, char *context, int context_bytes,
|
||||
int wide, READER_STATE *rs)
|
||||
{
|
||||
/* see [MS-RDPESC] 2.2.2.13 for ASCII */
|
||||
/* see [MS-RDPESC] 2.2.2.14 for Wide char */
|
||||
|
||||
SMARTCARD* sc;
|
||||
struct stream* s;
|
||||
SMARTCARD *sc;
|
||||
struct stream *s;
|
||||
tui32 ioctl;
|
||||
int bytes;
|
||||
int num_chars;
|
||||
@ -1365,7 +1359,7 @@ scard_send_Connect(IRP* irp, char *context, int context_bytes,
|
||||
}
|
||||
|
||||
ioctl = (wide) ? SCARD_IOCTL_CONNECT_W :
|
||||
SCARD_IOCTL_CONNECT_A;
|
||||
SCARD_IOCTL_CONNECT_A;
|
||||
|
||||
if ((s = scard_make_new_ioctl(irp, ioctl)) == NULL)
|
||||
{
|
||||
@ -1669,7 +1663,7 @@ scard_send_Status(IRP *irp, int wide, char *context, int context_bytes,
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "scard_make_new_ioctl");
|
||||
return;
|
||||
}
|
||||
/*
|
||||
/*
|
||||
30 00 00 00
|
||||
00 00 00 00
|
||||
04 00 00 00
|
||||
@ -1684,7 +1678,7 @@ scard_send_Status(IRP *irp, int wide, char *context, int context_bytes,
|
||||
04 00 00 00
|
||||
09 00 00 00 hCard
|
||||
00 00 00 00
|
||||
*/
|
||||
*/
|
||||
s_push_layer(s, mcs_hdr, 4); /* bytes, set later */
|
||||
out_uint32_le(s, 0x00000000);
|
||||
out_uint32_le(s, context_bytes);
|
||||
@ -1719,7 +1713,7 @@ scard_send_Status(IRP *irp, int wide, char *context, int context_bytes,
|
||||
|
||||
bytes = (int) (s->end - s->data);
|
||||
|
||||
//g_hexdump(s->data, bytes);
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "", s->data, bytes);
|
||||
|
||||
/* send to client */
|
||||
send_channel_data(g_rdpdr_chan_id, s->data, bytes);
|
||||
@ -1978,10 +1972,7 @@ scard_send_Transmit(IRP *irp, char *context, int context_bytes,
|
||||
/* send to client */
|
||||
send_channel_data(g_rdpdr_chan_id, s->data, bytes);
|
||||
|
||||
#if 0
|
||||
g_writeln("scard_send_Transmit:");
|
||||
g_hexdump(s->data, bytes);
|
||||
#endif
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "scard_send_Transmit:", s->data, bytes);
|
||||
|
||||
free_stream(s);
|
||||
return 0;
|
||||
@ -2054,7 +2045,7 @@ scard_send_Control(IRP *irp, char *context, int context_bytes,
|
||||
|
||||
bytes = (int) (s->end - s->data);
|
||||
|
||||
//g_hexdump(s->data, bytes);
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "", s->data, bytes);
|
||||
|
||||
/* send to client */
|
||||
send_channel_data(g_rdpdr_chan_id, s->data, bytes);
|
||||
@ -2495,7 +2486,7 @@ scard_handle_Transmit_Return(struct stream *s, IRP *irp, tui32 DeviceId,
|
||||
*****************************************************************************/
|
||||
static void
|
||||
scard_handle_Control_Return(struct stream *s, IRP *irp, tui32 DeviceId,
|
||||
tui32 CompletionId,tui32 IoStatus)
|
||||
tui32 CompletionId, tui32 IoStatus)
|
||||
{
|
||||
tui32 len;
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -43,9 +43,9 @@ static HANDLE_AACENCODER g_fdk_aac_encoder = 0;
|
||||
|
||||
#define AACENCODER_LIB_VER_GTEQ(vl0, vl1, vl2) \
|
||||
(defined(AACENCODER_LIB_VL0) && \
|
||||
((AACENCODER_LIB_VL0 > vl0) || \
|
||||
(AACENCODER_LIB_VL0 == vl0 && AACENCODER_LIB_VL1 >= vl1) || \
|
||||
(AACENCODER_LIB_VL0 == vl0 && AACENCODER_LIB_VL1 == vl1 && AACENCODER_LIB_VL2 > vl2)))
|
||||
((AACENCODER_LIB_VL0 > vl0) || \
|
||||
(AACENCODER_LIB_VL0 == vl0 && AACENCODER_LIB_VL1 >= vl1) || \
|
||||
(AACENCODER_LIB_VL0 == vl0 && AACENCODER_LIB_VL1 == vl1 && AACENCODER_LIB_VL2 > vl2)))
|
||||
#endif
|
||||
|
||||
#if defined(XRDP_OPUS)
|
||||
@ -249,9 +249,9 @@ static int g_server_input_format_index = 0;
|
||||
/* microphone related */
|
||||
static int sound_send_server_input_formats(void);
|
||||
static int sound_process_input_format(int aindex, int wFormatTag,
|
||||
int nChannels, int nSamplesPerSec,
|
||||
int nAvgBytesPerSec, int nBlockAlign,
|
||||
int wBitsPerSample, int cbSize, char *data);
|
||||
int nChannels, int nSamplesPerSec,
|
||||
int nAvgBytesPerSec, int nBlockAlign,
|
||||
int wBitsPerSample, int cbSize, char *data);
|
||||
static int sound_process_input_formats(struct stream *s, int size);
|
||||
static int sound_input_start_recording(void);
|
||||
static int sound_input_stop_recording(void);
|
||||
@ -378,15 +378,15 @@ sound_process_output_format(int aindex, int wFormatTag, int nChannels,
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, " wBitsPerSample %d", wBitsPerSample);
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, " cbSize %d", cbSize);
|
||||
|
||||
g_hexdump(data, cbSize);
|
||||
LOG_DEVEL_HEXDUMP(LOG_LEVEL_TRACE, "", data, cbSize);
|
||||
|
||||
/* select CD quality audio */
|
||||
if (wFormatTag == g_pcm_44100.wFormatTag &&
|
||||
nChannels == g_pcm_44100.nChannels &&
|
||||
nSamplesPerSec == g_pcm_44100.nSamplesPerSec &&
|
||||
nAvgBytesPerSec == g_pcm_44100.nAvgBytesPerSec &&
|
||||
nBlockAlign == g_pcm_44100.nBlockAlign &&
|
||||
wBitsPerSample == g_pcm_44100.wBitsPerSample)
|
||||
nChannels == g_pcm_44100.nChannels &&
|
||||
nSamplesPerSec == g_pcm_44100.nSamplesPerSec &&
|
||||
nAvgBytesPerSec == g_pcm_44100.nAvgBytesPerSec &&
|
||||
nBlockAlign == g_pcm_44100.nBlockAlign &&
|
||||
wBitsPerSample == g_pcm_44100.wBitsPerSample)
|
||||
{
|
||||
g_current_client_format_index = aindex;
|
||||
g_current_server_format_index = 0;
|
||||
@ -395,11 +395,11 @@ sound_process_output_format(int aindex, int wFormatTag, int nChannels,
|
||||
for (lindex = 0; lindex < NUM_BUILT_IN; lindex++)
|
||||
{
|
||||
if (wFormatTag == g_wave_formats[lindex]->wFormatTag &&
|
||||
nChannels == g_wave_formats[lindex]->nChannels &&
|
||||
nSamplesPerSec == g_wave_formats[lindex]->nSamplesPerSec &&
|
||||
nAvgBytesPerSec == g_wave_formats[lindex]->nAvgBytesPerSec &&
|
||||
nBlockAlign == g_wave_formats[lindex]->nBlockAlign &&
|
||||
wBitsPerSample == g_wave_formats[lindex]->wBitsPerSample)
|
||||
nChannels == g_wave_formats[lindex]->nChannels &&
|
||||
nSamplesPerSec == g_wave_formats[lindex]->nSamplesPerSec &&
|
||||
nAvgBytesPerSec == g_wave_formats[lindex]->nAvgBytesPerSec &&
|
||||
nBlockAlign == g_wave_formats[lindex]->nBlockAlign &&
|
||||
wBitsPerSample == g_wave_formats[lindex]->wBitsPerSample)
|
||||
{
|
||||
g_current_client_format_index = aindex;
|
||||
g_current_server_format_index = lindex;
|
||||
@ -407,7 +407,7 @@ sound_process_output_format(int aindex, int wFormatTag, int nChannels,
|
||||
}
|
||||
#endif
|
||||
|
||||
switch(wFormatTag)
|
||||
switch (wFormatTag)
|
||||
{
|
||||
case WAVE_FORMAT_AAC:
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "wFormatTag, fdk aac");
|
||||
@ -415,7 +415,7 @@ sound_process_output_format(int aindex, int wFormatTag, int nChannels,
|
||||
g_client_fdk_aac_index = aindex;
|
||||
break;
|
||||
case WAVE_FORMAT_MPEGLAYER3:
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "wFormatTag, mp3");
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "wFormatTag, mp3");
|
||||
g_client_does_mp3lame = 1;
|
||||
g_client_mp3lame_index = aindex;
|
||||
break;
|
||||
@ -451,7 +451,9 @@ sound_process_output_formats(struct stream *s, int size)
|
||||
char *data;
|
||||
|
||||
if (size < 16)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
in_uint8s(s, 14);
|
||||
in_uint16_le(s, num_formats);
|
||||
@ -534,7 +536,7 @@ sound_wave_compress_fdk_aac(char *data, int data_bytes, int *format_index)
|
||||
if (error != AACENC_OK)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_wave_compress_fdk_aac: aacEncoder_SetParam() "
|
||||
"AACENC_AOT failed");
|
||||
"AACENC_AOT failed");
|
||||
}
|
||||
|
||||
sample_rate = g_fdk_aac_44100.nSamplesPerSec;
|
||||
@ -543,7 +545,7 @@ sound_wave_compress_fdk_aac(char *data, int data_bytes, int *format_index)
|
||||
if (error != AACENC_OK)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_wave_compress_fdk_aac: aacEncoder_SetParam() "
|
||||
"AACENC_SAMPLERATE failed");
|
||||
"AACENC_SAMPLERATE failed");
|
||||
}
|
||||
|
||||
mode = MODE_2;
|
||||
@ -552,7 +554,7 @@ sound_wave_compress_fdk_aac(char *data, int data_bytes, int *format_index)
|
||||
if (error != AACENC_OK)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_wave_compress_fdk_aac: aacEncoder_SetParam() "
|
||||
"AACENC_CHANNELMODE failed");
|
||||
"AACENC_CHANNELMODE failed");
|
||||
}
|
||||
|
||||
channel_order = 1; /* WAVE file format channel ordering */
|
||||
@ -561,7 +563,7 @@ sound_wave_compress_fdk_aac(char *data, int data_bytes, int *format_index)
|
||||
if (error != AACENC_OK)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_wave_compress_fdk_aac: aacEncoder_SetParam() "
|
||||
"AACENC_CHANNELORDER failed");
|
||||
"AACENC_CHANNELORDER failed");
|
||||
}
|
||||
|
||||
/* bytes rate to bit rate */
|
||||
@ -571,14 +573,14 @@ sound_wave_compress_fdk_aac(char *data, int data_bytes, int *format_index)
|
||||
if (error != AACENC_OK)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_wave_compress_fdk_aac: aacEncoder_SetParam() "
|
||||
"AACENC_BITRATE failed");
|
||||
"AACENC_BITRATE failed");
|
||||
}
|
||||
|
||||
error = aacEncoder_SetParam(g_fdk_aac_encoder, AACENC_TRANSMUX, 0);
|
||||
if (error != AACENC_OK)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_wave_compress_fdk_aac: aacEncoder_SetParam() "
|
||||
"AACENC_TRANSMUX failed");
|
||||
"AACENC_TRANSMUX failed");
|
||||
}
|
||||
|
||||
afterburner = 1;
|
||||
@ -587,14 +589,14 @@ sound_wave_compress_fdk_aac(char *data, int data_bytes, int *format_index)
|
||||
if (error != AACENC_OK)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_wave_compress_fdk_aac: aacEncoder_SetParam() "
|
||||
"AACENC_AFTERBURNER failed");
|
||||
"AACENC_AFTERBURNER failed");
|
||||
}
|
||||
|
||||
error = aacEncEncode(g_fdk_aac_encoder, NULL, NULL, NULL, NULL);
|
||||
if (error != AACENC_OK)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_wave_compress_fdk_aac: Unable to initialize "
|
||||
"the encoder");
|
||||
"the encoder");
|
||||
}
|
||||
|
||||
g_memset(&info, 0, sizeof(info));
|
||||
@ -663,7 +665,7 @@ sound_wave_compress_fdk_aac(char *data, int data_bytes, int *format_index)
|
||||
{
|
||||
cdata_bytes = out_args.numOutBytes;
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "sound_wave_compress_fdk_aac: aacEncEncode ok "
|
||||
"cdata_bytes %d", cdata_bytes);
|
||||
"cdata_bytes %d", cdata_bytes);
|
||||
*format_index = g_client_fdk_aac_index;
|
||||
g_memcpy(data, cdata, cdata_bytes);
|
||||
rv = cdata_bytes;
|
||||
@ -819,14 +821,14 @@ sound_wave_compress_mp3lame(char *data, int data_bytes, int *format_index)
|
||||
data_bytes = g_bbuf_size;
|
||||
}
|
||||
cdata_bytes = lame_encode_buffer_interleaved(g_lame_encoder,
|
||||
(short int *) data,
|
||||
data_bytes / 4,
|
||||
cdata,
|
||||
cdata_bytes);
|
||||
(short int *) data,
|
||||
data_bytes / 4,
|
||||
cdata,
|
||||
cdata_bytes);
|
||||
if (cdata_bytes < 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "sound_wave_compress: lame_encode_buffer_interleaved() "
|
||||
"failed, error %d", cdata_bytes);
|
||||
"failed, error %d", cdata_bytes);
|
||||
return rv;
|
||||
}
|
||||
if ((cdata_bytes > 0) && (cdata_bytes < odata_bytes))
|
||||
@ -913,7 +915,7 @@ sound_send_wave_data_chunk(char *data, int data_bytes)
|
||||
g_sent_time[g_cBlockNo & 0xff] = time;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "sound_send_wave_data_chunk: sending time %d, g_cBlockNo %d",
|
||||
time & 0xffff, g_cBlockNo & 0xff);
|
||||
time & 0xffff, g_cBlockNo & 0xff);
|
||||
|
||||
out_uint8s(s, 3);
|
||||
out_uint8a(s, data, 4);
|
||||
@ -1115,10 +1117,14 @@ sound_sndsrvr_sink_data_in(struct trans *trans)
|
||||
int error;
|
||||
|
||||
if (trans == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (trans != g_audio_c_trans_out)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
s = trans_get_in_s(trans);
|
||||
in_uint32_le(s, id);
|
||||
@ -1153,16 +1159,24 @@ sound_sndsrvr_sink_conn_in(struct trans *trans, struct trans *new_trans)
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_sndsrvr_sink_conn_in:");
|
||||
|
||||
if (trans == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (trans != g_audio_l_trans_out)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (g_audio_c_trans_out != 0) /* if already set, error */
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (new_trans == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
g_audio_c_trans_out = new_trans;
|
||||
g_audio_c_trans_out->trans_data_in = sound_sndsrvr_sink_data_in;
|
||||
@ -1183,16 +1197,24 @@ sound_sndsrvr_source_conn_in(struct trans *trans, struct trans *new_trans)
|
||||
LOG_DEVEL(LOG_LEVEL_INFO, "sound_sndsrvr_source_conn_in: client connected");
|
||||
|
||||
if (trans == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (trans != g_audio_l_trans_in)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (g_audio_c_trans_in != 0) /* if already set, error */
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (new_trans == 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
g_audio_c_trans_in = new_trans;
|
||||
g_audio_c_trans_in->trans_data_in = sound_sndsrvr_source_data_in;
|
||||
@ -1524,11 +1546,11 @@ sound_process_input_format(int aindex, int wFormatTag, int nChannels,
|
||||
#if 1
|
||||
/* select CD quality audio */
|
||||
if (wFormatTag == g_pcm_inp_44100.wFormatTag &&
|
||||
nChannels == g_pcm_inp_44100.nChannels &&
|
||||
nSamplesPerSec == g_pcm_inp_44100.nSamplesPerSec &&
|
||||
nAvgBytesPerSec == g_pcm_inp_44100.nAvgBytesPerSec &&
|
||||
nBlockAlign == g_pcm_inp_44100.nBlockAlign &&
|
||||
wBitsPerSample == g_pcm_inp_44100.wBitsPerSample)
|
||||
nChannels == g_pcm_inp_44100.nChannels &&
|
||||
nSamplesPerSec == g_pcm_inp_44100.nSamplesPerSec &&
|
||||
nAvgBytesPerSec == g_pcm_inp_44100.nAvgBytesPerSec &&
|
||||
nBlockAlign == g_pcm_inp_44100.nBlockAlign &&
|
||||
wBitsPerSample == g_pcm_inp_44100.wBitsPerSample)
|
||||
{
|
||||
g_client_input_format_index = aindex;
|
||||
g_server_input_format_index = 0;
|
||||
@ -1536,11 +1558,11 @@ sound_process_input_format(int aindex, int wFormatTag, int nChannels,
|
||||
#else
|
||||
/* select half of CD quality audio */
|
||||
if (wFormatTag == g_pcm_inp_22050.wFormatTag &&
|
||||
nChannels == g_pcm_inp_22050.nChannels &&
|
||||
nSamplesPerSec == g_pcm_inp_22050.nSamplesPerSec &&
|
||||
nAvgBytesPerSec == g_pcm_inp_22050.nAvgBytesPerSec &&
|
||||
nBlockAlign == g_pcm_inp_22050.nBlockAlign &&
|
||||
wBitsPerSample == g_pcm_inp_22050.wBitsPerSample)
|
||||
nChannels == g_pcm_inp_22050.nChannels &&
|
||||
nSamplesPerSec == g_pcm_inp_22050.nSamplesPerSec &&
|
||||
nAvgBytesPerSec == g_pcm_inp_22050.nAvgBytesPerSec &&
|
||||
nBlockAlign == g_pcm_inp_22050.nBlockAlign &&
|
||||
wBitsPerSample == g_pcm_inp_22050.wBitsPerSample)
|
||||
{
|
||||
g_client_input_format_index = aindex;
|
||||
g_server_input_format_index = 0;
|
||||
@ -1606,7 +1628,7 @@ sound_process_input_formats(struct stream *s, int size)
|
||||
static int
|
||||
sound_input_start_recording(void)
|
||||
{
|
||||
struct stream* s;
|
||||
struct stream *s;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "sound_input_start_recording:");
|
||||
|
||||
@ -1645,7 +1667,7 @@ sound_input_start_recording(void)
|
||||
static int
|
||||
sound_input_stop_recording(void)
|
||||
{
|
||||
struct stream* s;
|
||||
struct stream *s;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "sound_input_stop_recording:");
|
||||
|
||||
@ -1678,7 +1700,7 @@ sound_process_input_data(struct stream *s, int bytes)
|
||||
struct stream *ls;
|
||||
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "sound_process_input_data: bytes %d g_bytes_in_fifo %d",
|
||||
bytes, g_bytes_in_fifo);
|
||||
bytes, g_bytes_in_fifo);
|
||||
#if 0 /* no need to cap anymore */
|
||||
/* cap data in fifo */
|
||||
if (g_bytes_in_fifo > 8 * 1024)
|
||||
@ -1712,14 +1734,20 @@ sound_sndsrvr_source_data_in(struct trans *trans)
|
||||
int i;
|
||||
|
||||
if (trans == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (trans != g_audio_c_trans_in)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
ts = trans_get_in_s(trans);
|
||||
if (trans_force_read(trans, 3))
|
||||
log_message(LOG_LEVEL_ERROR, "sound.c: error reading from transport");
|
||||
{
|
||||
LOG(LOG_LEVEL_ERROR, "sound.c: error reading from transport");
|
||||
}
|
||||
|
||||
ts->p = ts->data + 8;
|
||||
in_uint8(ts, cmd);
|
||||
@ -1753,7 +1781,9 @@ sound_sndsrvr_source_data_in(struct trans *trans)
|
||||
else
|
||||
{
|
||||
if (g_bytes_in_stream == 0)
|
||||
{
|
||||
g_bytes_in_stream = g_stream_inp->size;
|
||||
}
|
||||
|
||||
i = bytes_req - bytes_read;
|
||||
|
||||
@ -1825,7 +1855,9 @@ sound_start_source_listener(void)
|
||||
g_snprintf(port, 255, CHANSRV_PORT_IN_STR, g_display_num);
|
||||
g_audio_l_trans_in->trans_conn_in = sound_sndsrvr_source_conn_in;
|
||||
if (trans_listen(g_audio_l_trans_in, port) != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "trans_listen failed");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1842,7 +1874,9 @@ sound_start_sink_listener(void)
|
||||
g_snprintf(port, 255, CHANSRV_PORT_OUT_STR, g_display_num);
|
||||
g_audio_l_trans_out->trans_conn_in = sound_sndsrvr_sink_conn_in;
|
||||
if (trans_listen(g_audio_l_trans_out, port) != 0)
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "trans_listen failed");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -57,8 +57,8 @@ xcommon_error_handler(Display *dis, XErrorEvent *xer)
|
||||
|
||||
XGetErrorText(dis, xer->error_code, text, 255);
|
||||
LOG_DEVEL(LOG_LEVEL_ERROR, "X error [%s](%d) opcodes %d/%d "
|
||||
"resource 0x%lx", text, xer->error_code,
|
||||
xer->request_code, xer->minor_code, xer->resourceid);
|
||||
"resource 0x%lx", text, xer->error_code,
|
||||
xer->request_code, xer->minor_code, xer->resourceid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -186,7 +186,7 @@ xcommon_check_wait_objs(void)
|
||||
if ((clip_rv == 1) && (rail_rv == 1))
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "xcommon_check_wait_objs unknown xevent type %d",
|
||||
xevent.type);
|
||||
xevent.type);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
28
sesman/env.c
28
sesman/env.c
@ -76,9 +76,9 @@ env_check_password_file(const char *filename, const char *passwd)
|
||||
fd = g_file_open_ex(filename, 0, 1, 1, 1);
|
||||
if (fd == -1)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"Cannot write VNC password hash to file %s: %s",
|
||||
filename, g_get_strerror());
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"Cannot write VNC password hash to file %s: %s",
|
||||
filename, g_get_strerror());
|
||||
return 1;
|
||||
}
|
||||
g_file_write(fd, encryptedPasswd, 8);
|
||||
@ -151,7 +151,7 @@ env_set_user(const char *username, char **passwd_file, int display,
|
||||
g_snprintf(text, sizeof(text) - 1, CHANSRV_PORT_IN_BASE_STR, display);
|
||||
g_setenv("XRDP_PULSE_SOURCE_SOCKET", text, 1);
|
||||
if ((env_names != 0) && (env_values != 0) &&
|
||||
(env_names->count == env_values->count))
|
||||
(env_names->count == env_values->count))
|
||||
{
|
||||
for (index = 0; index < env_names->count; index++)
|
||||
{
|
||||
@ -172,9 +172,9 @@ env_set_user(const char *username, char **passwd_file, int display,
|
||||
{
|
||||
if (g_mkdir(".vnc") < 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR,
|
||||
"Error creating .vnc directory: %s",
|
||||
g_get_strerror());
|
||||
LOG(LOG_LEVEL_ERROR,
|
||||
"Error creating .vnc directory: %s",
|
||||
g_get_strerror());
|
||||
}
|
||||
}
|
||||
|
||||
@ -189,16 +189,16 @@ env_set_user(const char *username, char **passwd_file, int display,
|
||||
pw_dir, username, display);
|
||||
if (g_file_exist(*passwd_file))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "Removing old "
|
||||
"password file %s", *passwd_file);
|
||||
LOG(LOG_LEVEL_WARNING, "Removing old "
|
||||
"password file %s", *passwd_file);
|
||||
g_file_delete(*passwd_file);
|
||||
}
|
||||
g_sprintf(*passwd_file, "%s/.vnc/sesman_%s_passwd",
|
||||
pw_dir, username);
|
||||
if (g_file_exist(*passwd_file))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "Removing insecure "
|
||||
"password file %s", *passwd_file);
|
||||
LOG(LOG_LEVEL_WARNING, "Removing insecure "
|
||||
"password file %s", *passwd_file);
|
||||
g_file_delete(*passwd_file);
|
||||
}
|
||||
g_sprintf(*passwd_file, "%s/.vnc/sesman_passwd-%s@%s:%d",
|
||||
@ -229,9 +229,9 @@ env_set_user(const char *username, char **passwd_file, int display,
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR,
|
||||
"error getting user info for user %s",
|
||||
username);
|
||||
LOG(LOG_LEVEL_ERROR,
|
||||
"error getting user info for user %s",
|
||||
username);
|
||||
}
|
||||
|
||||
return error;
|
||||
|
@ -41,7 +41,7 @@ scp_connection_create(int sck)
|
||||
|
||||
if (0 == conn)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "[connection:%d] connection create: malloc error", __LINE__);
|
||||
LOG(LOG_LEVEL_ERROR, "[connection:%d] connection create: malloc error", __LINE__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ scp_init(void)
|
||||
|
||||
scp_lock_init();
|
||||
|
||||
log_message(LOG_LEVEL_DEBUG, "libscp initialized");
|
||||
LOG(LOG_LEVEL_DEBUG, "libscp initialized");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ scp_session_create(void)
|
||||
|
||||
if (0 == s)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "[session:%d] session create: malloc error", __LINE__);
|
||||
LOG(LOG_LEVEL_ERROR, "[session:%d] session create: malloc error", __LINE__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -81,14 +81,14 @@ scp_session_set_type(struct SCP_SESSION *s, tui8 type)
|
||||
|
||||
if (NULL == s->mng)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "[session:%d] set_type: internal error", __LINE__);
|
||||
LOG(LOG_LEVEL_ERROR, "[session:%d] set_type: internal error", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_type: unknown type", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_type: unknown type", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -108,7 +108,7 @@ scp_session_set_version(struct SCP_SESSION *s, tui32 version)
|
||||
s->version = 1;
|
||||
break;
|
||||
default:
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_version: unknown version", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_version: unknown version", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -172,7 +172,7 @@ scp_session_set_locale(struct SCP_SESSION *s, const char *str)
|
||||
{
|
||||
if (0 == str)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_locale: null locale", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_locale: null locale", __LINE__);
|
||||
s->locale[0] = '\0';
|
||||
return 1;
|
||||
}
|
||||
@ -188,7 +188,7 @@ scp_session_set_username(struct SCP_SESSION *s, const char *str)
|
||||
{
|
||||
if (0 == str)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_username: null username", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_username: null username", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -201,7 +201,7 @@ scp_session_set_username(struct SCP_SESSION *s, const char *str)
|
||||
|
||||
if (0 == s->username)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_username: strdup error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_username: strdup error", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -214,7 +214,7 @@ scp_session_set_password(struct SCP_SESSION *s, const char *str)
|
||||
{
|
||||
if (0 == str)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_password: null password", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_password: null password", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -227,7 +227,7 @@ scp_session_set_password(struct SCP_SESSION *s, const char *str)
|
||||
|
||||
if (0 == s->password)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_password: strdup error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_password: strdup error", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -240,7 +240,7 @@ scp_session_set_domain(struct SCP_SESSION *s, const char *str)
|
||||
{
|
||||
if (0 == str)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_domain: null domain", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_domain: null domain", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -253,7 +253,7 @@ scp_session_set_domain(struct SCP_SESSION *s, const char *str)
|
||||
|
||||
if (0 == s->domain)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_domain: strdup error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_domain: strdup error", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -266,7 +266,7 @@ scp_session_set_program(struct SCP_SESSION *s, const char *str)
|
||||
{
|
||||
if (0 == str)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_program: null program", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_program: null program", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -279,7 +279,7 @@ scp_session_set_program(struct SCP_SESSION *s, const char *str)
|
||||
|
||||
if (0 == s->program)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_program: strdup error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_program: strdup error", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -292,7 +292,7 @@ scp_session_set_directory(struct SCP_SESSION *s, const char *str)
|
||||
{
|
||||
if (0 == str)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_directory: null directory", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_directory: null directory", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -305,7 +305,7 @@ scp_session_set_directory(struct SCP_SESSION *s, const char *str)
|
||||
|
||||
if (0 == s->directory)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_directory: strdup error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_directory: strdup error", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -318,7 +318,7 @@ scp_session_set_client_ip(struct SCP_SESSION *s, const char *str)
|
||||
{
|
||||
if (0 == str)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_client_ip: null ip", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_client_ip: null ip", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -331,7 +331,7 @@ scp_session_set_client_ip(struct SCP_SESSION *s, const char *str)
|
||||
|
||||
if (0 == s->client_ip)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_client_ip: strdup error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_client_ip: strdup error", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -344,7 +344,7 @@ scp_session_set_hostname(struct SCP_SESSION *s, const char *str)
|
||||
{
|
||||
if (0 == str)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_hostname: null hostname", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_hostname: null hostname", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -357,7 +357,7 @@ scp_session_set_hostname(struct SCP_SESSION *s, const char *str)
|
||||
|
||||
if (0 == s->hostname)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_hostname: strdup error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_hostname: strdup error", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -370,7 +370,7 @@ scp_session_set_errstr(struct SCP_SESSION *s, const char *str)
|
||||
{
|
||||
if (0 == str)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_errstr: null string", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_errstr: null string", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -383,7 +383,7 @@ scp_session_set_errstr(struct SCP_SESSION *s, const char *str)
|
||||
|
||||
if (0 == s->errstr)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_errstr: strdup error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_errstr: strdup error", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -425,7 +425,7 @@ scp_session_set_guid(struct SCP_SESSION *s, const tui8 *guid)
|
||||
{
|
||||
if (0 == guid)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[session:%d] set_guid: null guid", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[session:%d] set_guid: null guid", __LINE__);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,7 @@ int in_string16(struct stream *s, char str[], const char *param)
|
||||
if (sz > STRING16_MAX_LEN)
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"connection aborted: %s too long (%u chars)", param, sz);
|
||||
"connection aborted: %s too long (%u chars)", param, sz);
|
||||
result = 0;
|
||||
}
|
||||
else
|
||||
@ -308,7 +308,7 @@ scp_v0s_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
if (0 != scp_session_set_bpp(session, (tui8)bpp))
|
||||
{
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"connection aborted: unsupported bpp: %d", (tui8)bpp);
|
||||
"connection aborted: unsupported bpp: %d", (tui8)bpp);
|
||||
return SCP_SERVER_STATE_INTERNAL_ERR;
|
||||
}
|
||||
|
||||
|
@ -47,8 +47,8 @@ scp_v1c_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
|
||||
size = 19 + 17 + 4 + g_strlen(s->hostname) + g_strlen(s->username) +
|
||||
g_strlen(s->password);
|
||||
size = (19 + 17 + 4 + g_strlen(s->hostname) + g_strlen(s->username) +
|
||||
g_strlen(s->password));
|
||||
|
||||
if (s->addr_type == SCP_ADDRESS_TYPE_IPV4)
|
||||
{
|
||||
|
@ -49,8 +49,8 @@ scp_v1c_mng_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
init_stream(c->out_s, c->out_s->size);
|
||||
init_stream(c->in_s, c->in_s->size);
|
||||
|
||||
size = 12 + 4 + g_strlen(s->hostname) + g_strlen(s->username) +
|
||||
g_strlen(s->password);
|
||||
size = (12 + 4 + g_strlen(s->hostname) + g_strlen(s->username) +
|
||||
g_strlen(s->password));
|
||||
|
||||
if (s->addr_type == SCP_ADDRESS_TYPE_IPV4)
|
||||
{
|
||||
@ -96,7 +96,7 @@ scp_v1c_mng_connect(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -132,7 +132,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -143,7 +143,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
@ -152,7 +152,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: version error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: version error", __LINE__);
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_VERSION_ERR;
|
||||
}
|
||||
@ -161,7 +161,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
|
||||
if (size < 12)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: size error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: size error", __LINE__);
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_SIZE_ERR;
|
||||
}
|
||||
@ -170,7 +170,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, size - 8))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
@ -179,7 +179,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_MANAGE)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
@ -188,7 +188,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
|
||||
if (cmd != SCP_CMD_MNG_LIST) /* session list */
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
g_free(ds);
|
||||
return SCP_CLIENT_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
@ -213,7 +213,7 @@ scp_v1c_mng_get_session_list(struct SCP_CONNECTION *c, int *scount,
|
||||
|
||||
if (ds == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: internal error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: internal error", __LINE__);
|
||||
return SCP_CLIENT_STATE_INTERNAL_ERR;
|
||||
}
|
||||
}
|
||||
@ -373,7 +373,7 @@ _scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -381,7 +381,7 @@ _scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: version error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: version error", __LINE__);
|
||||
return SCP_CLIENT_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
@ -392,7 +392,7 @@ _scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
/* read the rest of the packet */
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, size - 8))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_CLIENT_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -400,7 +400,7 @@ _scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_MANAGE)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_CLIENT_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -408,7 +408,7 @@ _scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (cmd == SCP_CMD_MNG_LOGIN_ALLOW) /* connection ok */
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "[v1c_mng:%d] connection ok", __LINE__);
|
||||
LOG(LOG_LEVEL_INFO, "[v1c_mng:%d] connection ok", __LINE__);
|
||||
return SCP_CLIENT_STATE_OK;
|
||||
}
|
||||
else if (cmd == SCP_CMD_MNG_LOGIN_DENY) /* connection denied */
|
||||
@ -418,10 +418,10 @@ _scp_v1c_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
in_uint8a(c->in_s, buf, dim);
|
||||
scp_session_set_errstr(s, buf);
|
||||
|
||||
log_message(LOG_LEVEL_INFO, "[v1c_mng:%d] connection denied: %s", __LINE__ , s->errstr);
|
||||
LOG(LOG_LEVEL_INFO, "[v1c_mng:%d] connection denied: %s", __LINE__, s->errstr);
|
||||
return SCP_CLIENT_STATE_CONNECTION_DENIED;
|
||||
}
|
||||
|
||||
log_message(LOG_LEVEL_WARNING, "[v1c-mng:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1c-mng:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_CLIENT_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
@ -57,9 +57,9 @@ int in_string8(struct stream *s, char str[], const char *param, int line)
|
||||
|
||||
if (!s_check_rem(s, 1))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: %s len missing",
|
||||
line, param);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: %s len missing",
|
||||
line, param);
|
||||
result = 0;
|
||||
}
|
||||
else
|
||||
@ -70,9 +70,9 @@ int in_string8(struct stream *s, char str[], const char *param, int line)
|
||||
result = s_check_rem(s, sz);
|
||||
if (!result)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: %s data missing",
|
||||
line, param);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: %s data missing",
|
||||
line, param);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -109,9 +109,9 @@ scp_v1s_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
* bpp, the resource sharing indicator and the locale */
|
||||
if (!s_check_rem(c->in_s, 1 + 2 + 2 + 1 + 1 + 17))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: short packet",
|
||||
__LINE__);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: short packet",
|
||||
__LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
@ -119,7 +119,7 @@ scp_v1s_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
|
||||
if ((type != SCP_SESSION_TYPE_XVNC) && (type != SCP_SESSION_TYPE_XRDP))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: unknown session type", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: unknown session type", __LINE__);
|
||||
return SCP_SERVER_STATE_SESSION_TYPE_ERR;
|
||||
}
|
||||
|
||||
@ -132,9 +132,9 @@ scp_v1s_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
in_uint8(c->in_s, bpp);
|
||||
if (0 != scp_session_set_bpp(session, bpp))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: unsupported bpp: %d",
|
||||
__LINE__, bpp);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: unsupported bpp: %d",
|
||||
__LINE__, bpp);
|
||||
return SCP_SERVER_STATE_INTERNAL_ERR;
|
||||
}
|
||||
in_uint8(c->in_s, sz);
|
||||
@ -146,9 +146,9 @@ scp_v1s_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
/* Check there's enough data left for at least an IPv4 address (+len) */
|
||||
if (!s_check_rem(c->in_s, 1 + 4))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: IP addr len missing",
|
||||
__LINE__);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: IP addr len missing",
|
||||
__LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
@ -164,9 +164,9 @@ scp_v1s_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
{
|
||||
if (!s_check_rem(c->in_s, 16))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: IP addr missing",
|
||||
__LINE__);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: IP addr missing",
|
||||
__LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
in_uint8a(c->in_s, buf, 16);
|
||||
@ -181,7 +181,7 @@ scp_v1s_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
|
||||
if (0 != scp_session_set_hostname(session, buf))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
return SCP_SERVER_STATE_INTERNAL_ERR;
|
||||
}
|
||||
|
||||
@ -193,7 +193,7 @@ scp_v1s_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
|
||||
if (0 != scp_session_set_username(session, buf))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
return SCP_SERVER_STATE_INTERNAL_ERR;
|
||||
}
|
||||
|
||||
@ -205,7 +205,7 @@ scp_v1s_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
|
||||
if (0 != scp_session_set_password(session, buf))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
return SCP_SERVER_STATE_INTERNAL_ERR;
|
||||
}
|
||||
|
||||
@ -233,13 +233,13 @@ enum SCP_SERVER_STATES_E scp_v1s_accept(struct SCP_CONNECTION *c, struct SCP_SES
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: version error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: version error", __LINE__);
|
||||
return SCP_SERVER_STATE_VERSION_ERR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
}
|
||||
@ -250,7 +250,7 @@ enum SCP_SERVER_STATES_E scp_v1s_accept(struct SCP_CONNECTION *c, struct SCP_SES
|
||||
* the command (but not too big) */
|
||||
if (size < (8 + 2 + 2) || size > SCP_MAX_MESSAGE_SIZE)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: size error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: size error", __LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
@ -258,7 +258,7 @@ enum SCP_SERVER_STATES_E scp_v1s_accept(struct SCP_CONNECTION *c, struct SCP_SES
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, (size - 8)))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -270,7 +270,7 @@ enum SCP_SERVER_STATES_E scp_v1s_accept(struct SCP_CONNECTION *c, struct SCP_SES
|
||||
/* if we are starting a management session */
|
||||
if (cmdset == SCP_COMMAND_SET_MANAGE)
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG, "[v1s:%d] requested management connection", __LINE__);
|
||||
LOG(LOG_LEVEL_DEBUG, "[v1s:%d] requested management connection", __LINE__);
|
||||
/* should return SCP_SERVER_STATE_START_MANAGE */
|
||||
return scp_v1s_mng_accept(c, s);
|
||||
}
|
||||
@ -278,7 +278,7 @@ enum SCP_SERVER_STATES_E scp_v1s_accept(struct SCP_CONNECTION *c, struct SCP_SES
|
||||
/* if we started with resource sharing... */
|
||||
if (cmdset == SCP_COMMAND_SET_RSR)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -287,7 +287,7 @@ enum SCP_SERVER_STATES_E scp_v1s_accept(struct SCP_CONNECTION *c, struct SCP_SES
|
||||
|
||||
if (cmd != 1)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -295,9 +295,9 @@ enum SCP_SERVER_STATES_E scp_v1s_accept(struct SCP_CONNECTION *c, struct SCP_SES
|
||||
|
||||
if (NULL == session)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: internal error "
|
||||
"(malloc returned NULL)", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: internal error "
|
||||
"(malloc returned NULL)", __LINE__);
|
||||
result = SCP_SERVER_STATE_INTERNAL_ERR;
|
||||
}
|
||||
else
|
||||
@ -342,7 +342,7 @@ scp_v1s_deny_connection(struct SCP_CONNECTION *c, const char *reason)
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, rlen + 14))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -385,14 +385,14 @@ scp_v1s_request_password(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, 14 + rlen))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
/* receive password & username */
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -400,7 +400,7 @@ scp_v1s_request_password(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: version error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: version error", __LINE__);
|
||||
return SCP_SERVER_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
@ -410,9 +410,9 @@ scp_v1s_request_password(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
* the command (but not too big) */
|
||||
if (size < (8 + 2 + 2) || size > SCP_MAX_MESSAGE_SIZE)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: size error",
|
||||
__LINE__);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s:%d] connection aborted: size error",
|
||||
__LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
@ -420,7 +420,7 @@ scp_v1s_request_password(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, (size - 8)))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -430,7 +430,7 @@ scp_v1s_request_password(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
|
||||
if (cmdset != SCP_COMMAND_SET_DEFAULT)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -438,7 +438,7 @@ scp_v1s_request_password(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
|
||||
if (cmd != 4)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -450,7 +450,7 @@ scp_v1s_request_password(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
|
||||
if (0 != scp_session_set_username(s, buf))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
return SCP_SERVER_STATE_INTERNAL_ERR;
|
||||
}
|
||||
|
||||
@ -462,7 +462,7 @@ scp_v1s_request_password(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
|
||||
if (0 != scp_session_set_password(s, buf))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error", __LINE__);
|
||||
return SCP_SERVER_STATE_INTERNAL_ERR;
|
||||
}
|
||||
|
||||
@ -503,7 +503,7 @@ scp_v1s_connect_new_session(struct SCP_CONNECTION *c, SCP_DISPLAY d)
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, 14))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -557,7 +557,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -571,7 +571,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -579,7 +579,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: version error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: version error", __LINE__);
|
||||
return SCP_SERVER_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
@ -589,7 +589,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
* the command (but not too big) */
|
||||
if (size < (8 + 2 + 2) || size > SCP_MAX_MESSAGE_SIZE)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: size error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: size error", __LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
@ -597,7 +597,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, (size - 8)))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -607,7 +607,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_DEFAULT)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -615,7 +615,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (cmd != 41)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -703,7 +703,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
}
|
||||
@ -713,7 +713,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, (8)))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -721,7 +721,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: version error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: version error", __LINE__);
|
||||
return SCP_SERVER_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
@ -731,7 +731,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
* the command (but not too big) */
|
||||
if (size < (8 + 2 + 2) || size > SCP_MAX_MESSAGE_SIZE)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: size error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: size error", __LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
@ -740,7 +740,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, (size - 8)))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -750,7 +750,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_DEFAULT)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -760,7 +760,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
{
|
||||
if (!s_check_rem(c->in_s, 4))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: missing session", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: missing session", __LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
/* select session */
|
||||
@ -779,7 +779,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
|
||||
/* if we got here, the requested sid wasn't one from the list we sent */
|
||||
/* we should kill the connection */
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error (no such session in list)", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: internal error (no such session in list)", __LINE__);
|
||||
return SCP_SERVER_STATE_INTERNAL_ERR;
|
||||
}
|
||||
else if (cmd == 44)
|
||||
@ -795,7 +795,7 @@ scp_v1s_list_sessions(struct SCP_CONNECTION *c, int sescnt, struct SCP_DISCONNEC
|
||||
else
|
||||
{
|
||||
/* wrong response */
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -832,7 +832,7 @@ scp_v1s_reconnect_session(struct SCP_CONNECTION *c, SCP_DISPLAY d)
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
|
@ -60,9 +60,9 @@ int in_string8(struct stream *s, char str[], const char *param, int line)
|
||||
|
||||
if (!s_check_rem(s, 1))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s_mng:%d] connection aborted: %s len missing",
|
||||
line, param);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s_mng:%d] connection aborted: %s len missing",
|
||||
line, param);
|
||||
result = 0;
|
||||
}
|
||||
else
|
||||
@ -73,9 +73,9 @@ int in_string8(struct stream *s, char str[], const char *param, int line)
|
||||
result = s_check_rem(s, sz);
|
||||
if (!result)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s_mng:%d] connection aborted: %s data missing",
|
||||
line, param);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s_mng:%d] connection aborted: %s data missing",
|
||||
line, param);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -144,9 +144,9 @@ scp_v1s_mng_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
* Check there's enough data left for at least an IPv4 address (+len) */
|
||||
if (!s_check_rem(c->in_s, 1 + 4))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s_mng:%d] connection aborted: IP addr len missing",
|
||||
__LINE__);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s_mng:%d] connection aborted: IP addr len missing",
|
||||
__LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
@ -160,9 +160,9 @@ scp_v1s_mng_init_session(struct SCP_CONNECTION *c, struct SCP_SESSION *session)
|
||||
{
|
||||
if (!s_check_rem(c->in_s, 16))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"[v1s_mng:%d] connection aborted: IP addr missing",
|
||||
__LINE__);
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"[v1s_mng:%d] connection aborted: IP addr missing",
|
||||
__LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
in_uint8a(c->in_s, buf, 16);
|
||||
@ -282,16 +282,16 @@ scp_v1s_mng_list_sessions(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
/* calculating the number of packets to send */
|
||||
if (sescnt == 0)
|
||||
{
|
||||
pktcnt = 1;
|
||||
pktcnt = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
pktcnt = sescnt / SCP_SERVER_MAX_LIST_SIZE;
|
||||
pktcnt = sescnt / SCP_SERVER_MAX_LIST_SIZE;
|
||||
|
||||
if ((sescnt % SCP_SERVER_MAX_LIST_SIZE) != 0)
|
||||
{
|
||||
pktcnt++;
|
||||
}
|
||||
if ((sescnt % SCP_SERVER_MAX_LIST_SIZE) != 0)
|
||||
{
|
||||
pktcnt++;
|
||||
}
|
||||
}
|
||||
|
||||
for (idx = 0; idx < pktcnt; idx++)
|
||||
@ -369,7 +369,7 @@ scp_v1s_mng_list_sessions(struct SCP_CONNECTION *c, struct SCP_SESSION *s,
|
||||
|
||||
if (0 != scp_tcp_force_send(c->in_sck, c->out_s->data, size))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
}
|
||||
@ -390,7 +390,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, 8))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -398,7 +398,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (version != 1)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: version error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: version error", __LINE__);
|
||||
return SCP_SERVER_STATE_VERSION_ERR;
|
||||
}
|
||||
|
||||
@ -408,7 +408,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
* the command (but not too big) */
|
||||
if (size < (8 + 2 + 2) || size > SCP_MAX_MESSAGE_SIZE)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: size error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: size error", __LINE__);
|
||||
return SCP_SERVER_STATE_SIZE_ERR;
|
||||
}
|
||||
|
||||
@ -417,7 +417,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
/* read the rest of the packet */
|
||||
if (0 != scp_tcp_force_recv(c->in_sck, c->in_s->data, size - 8))
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: network error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: network error", __LINE__);
|
||||
return SCP_SERVER_STATE_NETWORK_ERR;
|
||||
}
|
||||
|
||||
@ -427,7 +427,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (cmd != SCP_COMMAND_SET_MANAGE)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
@ -435,7 +435,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (cmd == SCP_CMD_MNG_LIST_REQ) /* request session list */
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "[v1s_mng:%d] request session list", __LINE__);
|
||||
LOG(LOG_LEVEL_INFO, "[v1s_mng:%d] request session list", __LINE__);
|
||||
return SCP_SERVER_STATE_MNG_LISTREQ;
|
||||
}
|
||||
else if (cmd == SCP_CMD_MNG_ACTION) /* execute an action */
|
||||
@ -445,7 +445,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
in_uint8a(c->in_s, buf, dim);
|
||||
scp_session_set_errstr(s, buf);*/
|
||||
|
||||
log_message(LOG_LEVEL_INFO, "[v1s_mng:%d] action request", __LINE__);
|
||||
LOG(LOG_LEVEL_INFO, "[v1s_mng:%d] action request", __LINE__);
|
||||
return SCP_SERVER_STATE_MNG_ACTION;
|
||||
}
|
||||
|
||||
@ -460,7 +460,7 @@ _scp_v1s_mng_check_response(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
return SCP_SERVER_STATE_SESSION_LIST;
|
||||
}*/
|
||||
|
||||
log_message(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
LOG(LOG_LEVEL_WARNING, "[v1s_mng:%d] connection aborted: sequence error", __LINE__);
|
||||
return SCP_SERVER_STATE_SEQUENCE_ERR;
|
||||
}
|
||||
|
||||
|
16
sesman/scp.c
16
sesman/scp.c
@ -71,8 +71,8 @@ scp_process_start(void *sck)
|
||||
break;
|
||||
case SCP_SERVER_STATE_START_MANAGE:
|
||||
/* starting a management session */
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"starting a sesman management session...");
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"starting a sesman management session...");
|
||||
scp_v1_mng_process(&scon, sdata);
|
||||
break;
|
||||
case SCP_SERVER_STATE_VERSION_ERR:
|
||||
@ -80,21 +80,21 @@ scp_process_start(void *sck)
|
||||
/* an unknown scp version was requested, or the message sizes
|
||||
are inconsistent. Shut down the connection and log the
|
||||
fact */
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"protocol violation. connection refused.");
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"protocol violation. connection refused.");
|
||||
break;
|
||||
case SCP_SERVER_STATE_NETWORK_ERR:
|
||||
log_message(LOG_LEVEL_WARNING, "libscp network error.");
|
||||
LOG(LOG_LEVEL_WARNING, "libscp network error.");
|
||||
break;
|
||||
case SCP_SERVER_STATE_SEQUENCE_ERR:
|
||||
log_message(LOG_LEVEL_WARNING, "libscp sequence error.");
|
||||
LOG(LOG_LEVEL_WARNING, "libscp sequence error.");
|
||||
break;
|
||||
case SCP_SERVER_STATE_INTERNAL_ERR:
|
||||
/* internal error occurred (eg. malloc() error, ecc.) */
|
||||
log_message(LOG_LEVEL_ERROR, "libscp internal error occurred.");
|
||||
LOG(LOG_LEVEL_ERROR, "libscp internal error occurred.");
|
||||
break;
|
||||
default:
|
||||
log_message(LOG_LEVEL_ALWAYS, "unknown return from scp_vXs_accept()");
|
||||
LOG(LOG_LEVEL_ALWAYS, "unknown return from scp_vXs_accept()");
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -54,23 +54,23 @@ scp_v0_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
{
|
||||
/* the user is member of the correct groups. */
|
||||
scp_v0s_replyauthentication(c, errorcode);
|
||||
log_message(LOG_LEVEL_INFO, "Access permitted for user: %s",
|
||||
s->username);
|
||||
LOG(LOG_LEVEL_INFO, "Access permitted for user: %s",
|
||||
s->username);
|
||||
/* g_writeln("Connection allowed"); */
|
||||
}
|
||||
else
|
||||
{
|
||||
scp_v0s_replyauthentication(c, 32 + 3); /* all first 32 are reserved for PAM errors */
|
||||
log_message(LOG_LEVEL_INFO, "Username okey but group problem for "
|
||||
"user: %s", s->username);
|
||||
LOG(LOG_LEVEL_INFO, "Username okey but group problem for "
|
||||
"user: %s", s->username);
|
||||
/* g_writeln("user password ok, but group problem"); */
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* g_writeln("username or password error"); */
|
||||
log_message(LOG_LEVEL_INFO, "Username or password error for user: %s",
|
||||
s->username);
|
||||
LOG(LOG_LEVEL_INFO, "Username or password error for user: %s",
|
||||
s->username);
|
||||
scp_v0s_replyauthentication(c, errorcode);
|
||||
}
|
||||
}
|
||||
@ -85,15 +85,15 @@ scp_v0_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
g_memcpy(s->guid, s_item->guid, 16);
|
||||
if (0 != s->client_ip)
|
||||
{
|
||||
log_message( LOG_LEVEL_INFO, "++ reconnected session: username %s, "
|
||||
"display :%d.0, session_pid %d, ip %s",
|
||||
s->username, display, s_item->pid, s->client_ip);
|
||||
LOG( LOG_LEVEL_INFO, "++ reconnected session: username %s, "
|
||||
"display :%d.0, session_pid %d, ip %s",
|
||||
s->username, display, s_item->pid, s->client_ip);
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "++ reconnected session: username %s, "
|
||||
"display :%d.0, session_pid %d", s->username, display,
|
||||
s_item->pid);
|
||||
LOG(LOG_LEVEL_INFO, "++ reconnected session: username %s, "
|
||||
"display :%d.0, session_pid %d", s->username, display,
|
||||
s_item->pid);
|
||||
}
|
||||
|
||||
session_reconnect(display, s->username, data);
|
||||
@ -106,34 +106,34 @@ scp_v0_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
{
|
||||
tui8 guid[16];
|
||||
|
||||
g_random((char*)guid, 16);
|
||||
g_random((char *)guid, 16);
|
||||
scp_session_set_guid(s, guid);
|
||||
|
||||
if (0 != s->client_ip)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "++ created session (access granted): "
|
||||
"username %s, ip %s", s->username, s->client_ip);
|
||||
LOG(LOG_LEVEL_INFO, "++ created session (access granted): "
|
||||
"username %s, ip %s", s->username, s->client_ip);
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "++ created session (access granted): "
|
||||
"username %s", s->username);
|
||||
LOG(LOG_LEVEL_INFO, "++ created session (access granted): "
|
||||
"username %s", s->username);
|
||||
}
|
||||
|
||||
if (SCP_SESSION_TYPE_XVNC == s->type)
|
||||
{
|
||||
log_message( LOG_LEVEL_INFO, "starting Xvnc session...");
|
||||
LOG( LOG_LEVEL_INFO, "starting Xvnc session...");
|
||||
display = session_start(data, SESMAN_SESSION_TYPE_XVNC, c, s);
|
||||
}
|
||||
else if (SCP_SESSION_TYPE_XRDP == s->type)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "starting X11rdp session...");
|
||||
LOG(LOG_LEVEL_INFO, "starting X11rdp session...");
|
||||
display = session_start(data, SESMAN_SESSION_TYPE_XRDP, c, s);
|
||||
}
|
||||
else if (SCP_SESSION_TYPE_XORG == s->type)
|
||||
{
|
||||
/* type is SCP_SESSION_TYPE_XORG */
|
||||
log_message(LOG_LEVEL_INFO, "starting Xorg session...");
|
||||
LOG(LOG_LEVEL_INFO, "starting Xorg session...");
|
||||
display = session_start(data, SESMAN_SESSION_TYPE_XORG, c, s);
|
||||
}
|
||||
/* if the session started up ok, auth_end will be called on
|
||||
|
@ -55,14 +55,14 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
retries = g_cfg->sec.login_retry;
|
||||
current_try = retries;
|
||||
|
||||
data = auth_userpass(s->username, s->password,NULL);
|
||||
data = auth_userpass(s->username, s->password, NULL);
|
||||
/*LOG_DEVEL(LOG_LEVEL_DEBUG, "user: %s\npass: %s", s->username, s->password);*/
|
||||
|
||||
while ((!data) && ((retries == 0) || (current_try > 0)))
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "data %ld - retry %d - currenttry %d - expr %d",
|
||||
data, retries, current_try,
|
||||
((!data) && ((retries == 0) || (current_try > 0))));
|
||||
data, retries, current_try,
|
||||
((!data) && ((retries == 0) || (current_try > 0))));
|
||||
|
||||
e = scp_v1s_request_password(c, s, "Wrong username and/or password");
|
||||
|
||||
@ -70,7 +70,7 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
{
|
||||
case SCP_SERVER_STATE_OK:
|
||||
/* all ok, we got new username and password */
|
||||
data = auth_userpass(s->username, s->password,NULL);
|
||||
data = auth_userpass(s->username, s->password, NULL);
|
||||
|
||||
/* one try less */
|
||||
if (current_try > 0)
|
||||
@ -90,8 +90,8 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
if (!data)
|
||||
{
|
||||
scp_v1s_deny_connection(c, "Login failed");
|
||||
log_message( LOG_LEVEL_INFO,
|
||||
"Login failed for user %s. Connection terminated", s->username);
|
||||
LOG( LOG_LEVEL_INFO,
|
||||
"Login failed for user %s. Connection terminated", s->username);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -99,8 +99,8 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
if (0 == access_login_allowed(s->username))
|
||||
{
|
||||
scp_v1s_deny_connection(c, "Access to Terminal Server not allowed.");
|
||||
log_message(LOG_LEVEL_INFO,
|
||||
"User %s not allowed on TS. Connection terminated", s->username);
|
||||
LOG(LOG_LEVEL_INFO,
|
||||
"User %s not allowed on TS. Connection terminated", s->username);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -112,31 +112,31 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
if (scount == 0)
|
||||
{
|
||||
/* no disconnected sessions - start a new one */
|
||||
log_message(LOG_LEVEL_DEBUG, "No disconnected sessions for this user "
|
||||
"- we create a new one");
|
||||
LOG(LOG_LEVEL_DEBUG, "No disconnected sessions for this user "
|
||||
"- we create a new one");
|
||||
|
||||
if (0 != s->client_ip)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "++ created session (access granted): username %s, ip %s", s->username, s->client_ip);
|
||||
LOG(LOG_LEVEL_INFO, "++ created session (access granted): username %s, ip %s", s->username, s->client_ip);
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "++ created session (access granted): username %s", s->username);
|
||||
LOG(LOG_LEVEL_INFO, "++ created session (access granted): username %s", s->username);
|
||||
}
|
||||
|
||||
if (SCP_SESSION_TYPE_XVNC == s->type)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "starting Xvnc session...");
|
||||
LOG(LOG_LEVEL_INFO, "starting Xvnc session...");
|
||||
display = session_start(data, SESMAN_SESSION_TYPE_XVNC, c, s);
|
||||
}
|
||||
else if (SCP_SESSION_TYPE_XRDP == s->type)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "starting X11rdp session...");
|
||||
LOG(LOG_LEVEL_INFO, "starting X11rdp session...");
|
||||
display = session_start(data, SESMAN_SESSION_TYPE_XRDP, c, s);
|
||||
}
|
||||
else if (SCP_SESSION_TYPE_XORG == s->type)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "starting Xorg session...");
|
||||
LOG(LOG_LEVEL_INFO, "starting Xorg session...");
|
||||
display = session_start(data, SESMAN_SESSION_TYPE_XORG, c, s);
|
||||
}
|
||||
/* if the session started up ok, auth_end will be called on
|
||||
@ -161,10 +161,10 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
switch (e)
|
||||
{
|
||||
/*case SCP_SERVER_STATE_FORCE_NEW:*/
|
||||
/* we should check for MaxSessions */
|
||||
/*case SCP_SERVER_STATE_FORCE_NEW:*/
|
||||
/* we should check for MaxSessions */
|
||||
case SCP_SERVER_STATE_SELECTION_CANCEL:
|
||||
log_message( LOG_LEVEL_INFO, "Connection cancelled after session listing");
|
||||
LOG( LOG_LEVEL_INFO, "Connection cancelled after session listing");
|
||||
break;
|
||||
case SCP_SERVER_STATE_OK:
|
||||
/* ok, reconnecting... */
|
||||
@ -173,7 +173,7 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
if (0 == sitem)
|
||||
{
|
||||
e = scp_v1s_connection_error(c, "Internal error");
|
||||
log_message(LOG_LEVEL_INFO, "Cannot find session item on the chain");
|
||||
LOG(LOG_LEVEL_INFO, "Cannot find session item on the chain");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -183,11 +183,11 @@ scp_v1_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
|
||||
if (0 != s->client_ip)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "++ reconnected session: username %s, display :%d.0, session_pid %d, ip %s", s->username, display, sitem->pid, s->client_ip);
|
||||
LOG(LOG_LEVEL_INFO, "++ reconnected session: username %s, display :%d.0, session_pid %d, ip %s", s->username, display, sitem->pid, s->client_ip);
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "++ reconnected session: username %s, display :%d.0, session_pid %d", s->username, display, sitem->pid);
|
||||
LOG(LOG_LEVEL_INFO, "++ reconnected session: username %s, display :%d.0, session_pid %d", s->username, display, sitem->pid);
|
||||
}
|
||||
|
||||
g_free(sitem);
|
||||
@ -220,27 +220,27 @@ static void parseCommonStates(enum SCP_SERVER_STATES_E e, const char *f)
|
||||
switch (e)
|
||||
{
|
||||
case SCP_SERVER_STATE_VERSION_ERR:
|
||||
log_message(LOG_LEVEL_WARNING, "version error");
|
||||
LOG(LOG_LEVEL_WARNING, "version error");
|
||||
case SCP_SERVER_STATE_SIZE_ERR:
|
||||
/* an unknown scp version was requested, so we shut down the */
|
||||
/* connection (and log the fact) */
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"protocol violation. connection closed.");
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"protocol violation. connection closed.");
|
||||
break;
|
||||
case SCP_SERVER_STATE_NETWORK_ERR:
|
||||
log_message(LOG_LEVEL_WARNING, "libscp network error.");
|
||||
LOG(LOG_LEVEL_WARNING, "libscp network error.");
|
||||
break;
|
||||
case SCP_SERVER_STATE_SEQUENCE_ERR:
|
||||
log_message(LOG_LEVEL_WARNING, "libscp sequence error.");
|
||||
LOG(LOG_LEVEL_WARNING, "libscp sequence error.");
|
||||
break;
|
||||
case SCP_SERVER_STATE_INTERNAL_ERR:
|
||||
/* internal error occurred (eg. malloc() error, ecc.) */
|
||||
log_message(LOG_LEVEL_ERROR, "libscp internal error occurred.");
|
||||
LOG(LOG_LEVEL_ERROR, "libscp internal error occurred.");
|
||||
break;
|
||||
default:
|
||||
/* dummy: scp_v1s_request_password won't generate any other */
|
||||
/* error other than the ones before */
|
||||
log_message(LOG_LEVEL_ALWAYS, "unknown return from %s", f);
|
||||
LOG(LOG_LEVEL_ALWAYS, "unknown return from %s", f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -46,14 +46,14 @@ scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
int scount;
|
||||
int end = 0;
|
||||
|
||||
data = auth_userpass(s->username, s->password,NULL);
|
||||
data = auth_userpass(s->username, s->password, NULL);
|
||||
/*LOG_DEVEL(LOG_LEVEL_DEBUG, "user: %s\npass: %s", s->username, s->password);*/
|
||||
|
||||
if (!data)
|
||||
{
|
||||
scp_v1s_mng_deny_connection(c, "Login failed");
|
||||
log_message(LOG_LEVEL_INFO,
|
||||
"[MNG] Login failed for user %s. Connection terminated", s->username);
|
||||
LOG(LOG_LEVEL_INFO,
|
||||
"[MNG] Login failed for user %s. Connection terminated", s->username);
|
||||
auth_end(data);
|
||||
return;
|
||||
}
|
||||
@ -62,8 +62,8 @@ scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
if (0 == access_login_mng_allowed(s->username))
|
||||
{
|
||||
scp_v1s_mng_deny_connection(c, "Access to Terminal Server not allowed.");
|
||||
log_message(LOG_LEVEL_INFO,
|
||||
"[MNG] User %s not allowed on TS. Connection terminated", s->username);
|
||||
LOG(LOG_LEVEL_INFO,
|
||||
"[MNG] User %s not allowed on TS. Connection terminated", s->username);
|
||||
auth_end(data);
|
||||
return;
|
||||
}
|
||||
@ -77,7 +77,7 @@ scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
switch (e)
|
||||
{
|
||||
case SCP_SERVER_STATE_MNG_ACTION:
|
||||
log_message(LOG_LEVEL_INFO, "Connection cancelled after session listing");
|
||||
LOG(LOG_LEVEL_INFO, "Connection cancelled after session listing");
|
||||
break;
|
||||
|
||||
case SCP_SERVER_STATE_MNG_LISTREQ:
|
||||
@ -86,7 +86,7 @@ scp_v1_mng_process(struct SCP_CONNECTION *c, struct SCP_SESSION *s)
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "sessions on TS: %d (slist: %p)", scount, slist);
|
||||
if (0 == slist)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "No sessions on Terminal Server");
|
||||
LOG(LOG_LEVEL_INFO, "No sessions on Terminal Server");
|
||||
}
|
||||
|
||||
e = scp_v1s_mng_list_sessions(c, s, scount, slist);
|
||||
@ -109,27 +109,27 @@ static void parseCommonStates(enum SCP_SERVER_STATES_E e, const char *f)
|
||||
switch (e)
|
||||
{
|
||||
case SCP_SERVER_STATE_VERSION_ERR:
|
||||
log_message(LOG_LEVEL_WARNING, "version error");
|
||||
LOG(LOG_LEVEL_WARNING, "version error");
|
||||
case SCP_SERVER_STATE_SIZE_ERR:
|
||||
/* an unknown scp version was requested, so we shut down the */
|
||||
/* connection (and log the fact) */
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"protocol violation. connection closed.");
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"protocol violation. connection closed.");
|
||||
break;
|
||||
case SCP_SERVER_STATE_NETWORK_ERR:
|
||||
log_message(LOG_LEVEL_WARNING, "libscp network error.");
|
||||
LOG(LOG_LEVEL_WARNING, "libscp network error.");
|
||||
break;
|
||||
case SCP_SERVER_STATE_SEQUENCE_ERR:
|
||||
log_message(LOG_LEVEL_WARNING, "libscp sequence error.");
|
||||
LOG(LOG_LEVEL_WARNING, "libscp sequence error.");
|
||||
break;
|
||||
case SCP_SERVER_STATE_INTERNAL_ERR:
|
||||
/* internal error occurred (eg. malloc() error, ecc.) */
|
||||
log_message(LOG_LEVEL_ERROR, "libscp internal error occurred.");
|
||||
LOG(LOG_LEVEL_ERROR, "libscp internal error occurred.");
|
||||
break;
|
||||
default:
|
||||
/* dummy: scp_v1s_request_password won't generate any other */
|
||||
/* error other than the ones before */
|
||||
log_message(LOG_LEVEL_ALWAYS, "unknown return from %s", f);
|
||||
LOG(LOG_LEVEL_ALWAYS, "unknown return from %s", f);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -50,8 +50,8 @@ int sesman_listen_test(struct config_sesman *cfg)
|
||||
return 1;
|
||||
}
|
||||
|
||||
log_message(LOG_LEVEL_DEBUG, "Testing if xrdp-sesman can listen on %s port %s.",
|
||||
cfg->listen_address, cfg->listen_port);
|
||||
LOG(LOG_LEVEL_DEBUG, "Testing if xrdp-sesman can listen on %s port %s.",
|
||||
cfg->listen_address, cfg->listen_port);
|
||||
g_tcp_set_non_blocking(sck);
|
||||
error = scp_tcp_bind(sck, cfg->listen_address, cfg->listen_port);
|
||||
if (error == 0)
|
||||
@ -96,7 +96,7 @@ sesman_main_loop(void)
|
||||
g_sck = g_tcp_socket();
|
||||
if (g_sck < 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "error opening socket, g_tcp_socket() failed...");
|
||||
LOG(LOG_LEVEL_ERROR, "error opening socket, g_tcp_socket() failed...");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -109,8 +109,8 @@ sesman_main_loop(void)
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "listening to port %s on %s",
|
||||
g_cfg->listen_port, g_cfg->listen_address);
|
||||
LOG(LOG_LEVEL_INFO, "listening to port %s on %s",
|
||||
g_cfg->listen_port, g_cfg->listen_address);
|
||||
sck_obj = g_create_wait_obj_from_socket(g_sck, 0);
|
||||
cont = 1;
|
||||
|
||||
@ -151,7 +151,7 @@ sesman_main_loop(void)
|
||||
{
|
||||
/* we've got a connection, so we pass it to scp code */
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "new connection");
|
||||
scp_process_start((void*)(tintptr)in_sck);
|
||||
scp_process_start((void *)(tintptr)in_sck);
|
||||
g_sck_close(in_sck);
|
||||
}
|
||||
}
|
||||
@ -161,16 +161,16 @@ sesman_main_loop(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "listen error %d (%s)",
|
||||
g_get_errno(), g_get_strerror());
|
||||
LOG(LOG_LEVEL_ERROR, "listen error %d (%s)",
|
||||
g_get_errno(), g_get_strerror());
|
||||
rv = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "bind error on "
|
||||
"port '%s': %d (%s)", g_cfg->listen_port,
|
||||
g_get_errno(), g_get_strerror());
|
||||
LOG(LOG_LEVEL_ERROR, "bind error on "
|
||||
"port '%s': %d (%s)", g_cfg->listen_port,
|
||||
g_get_errno(), g_get_strerror());
|
||||
rv = 1;
|
||||
}
|
||||
g_tcp_close(g_sck);
|
||||
@ -342,14 +342,14 @@ main(int argc, char **argv)
|
||||
g_exit(1);
|
||||
}
|
||||
|
||||
log_message(LOG_LEVEL_TRACE, "config loaded in %s at %s:%d", __func__, __FILE__, __LINE__);
|
||||
log_message(LOG_LEVEL_TRACE, " listen_address = %s", g_cfg->listen_address);
|
||||
log_message(LOG_LEVEL_TRACE, " listen_port = %s", g_cfg->listen_port);
|
||||
log_message(LOG_LEVEL_TRACE, " enable_user_wm = %d", g_cfg->enable_user_wm);
|
||||
log_message(LOG_LEVEL_TRACE, " default_wm = %s", g_cfg->default_wm);
|
||||
log_message(LOG_LEVEL_TRACE, " user_wm = %s", g_cfg->user_wm);
|
||||
log_message(LOG_LEVEL_TRACE, " reconnect_sh = %s", g_cfg->reconnect_sh);
|
||||
log_message(LOG_LEVEL_TRACE, " auth_file_path = %s", g_cfg->auth_file_path);
|
||||
LOG(LOG_LEVEL_TRACE, "config loaded in %s at %s:%d", __func__, __FILE__, __LINE__);
|
||||
LOG(LOG_LEVEL_TRACE, " listen_address = %s", g_cfg->listen_address);
|
||||
LOG(LOG_LEVEL_TRACE, " listen_port = %s", g_cfg->listen_port);
|
||||
LOG(LOG_LEVEL_TRACE, " enable_user_wm = %d", g_cfg->enable_user_wm);
|
||||
LOG(LOG_LEVEL_TRACE, " default_wm = %s", g_cfg->default_wm);
|
||||
LOG(LOG_LEVEL_TRACE, " user_wm = %s", g_cfg->user_wm);
|
||||
LOG(LOG_LEVEL_TRACE, " reconnect_sh = %s", g_cfg->reconnect_sh);
|
||||
LOG(LOG_LEVEL_TRACE, " auth_file_path = %s", g_cfg->auth_file_path);
|
||||
|
||||
if (daemon)
|
||||
{
|
||||
@ -381,8 +381,8 @@ main(int argc, char **argv)
|
||||
if (sesman_listen_test(g_cfg) != 0)
|
||||
{
|
||||
|
||||
log_message(LOG_LEVEL_ERROR, "Failed to start xrdp-sesman daemon, "
|
||||
"possibly address already in use.");
|
||||
LOG(LOG_LEVEL_ERROR, "Failed to start xrdp-sesman daemon, "
|
||||
"possibly address already in use.");
|
||||
g_deinit();
|
||||
g_exit(1);
|
||||
}
|
||||
@ -419,9 +419,9 @@ main(int argc, char **argv)
|
||||
|
||||
if (-1 == fd)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR,
|
||||
"error opening pid file[%s]: %s",
|
||||
pid_file, g_get_strerror());
|
||||
LOG(LOG_LEVEL_ERROR,
|
||||
"error opening pid file[%s]: %s",
|
||||
pid_file, g_get_strerror());
|
||||
log_end();
|
||||
g_deinit();
|
||||
g_exit(1);
|
||||
@ -433,8 +433,8 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* start program main loop */
|
||||
log_message(LOG_LEVEL_INFO,
|
||||
"starting xrdp-sesman with pid %d", g_pid);
|
||||
LOG(LOG_LEVEL_INFO,
|
||||
"starting xrdp-sesman with pid %d", g_pid);
|
||||
|
||||
/* make sure the socket directory exists */
|
||||
g_mk_socket_path("xrdp-sesman");
|
||||
@ -444,7 +444,7 @@ main(int argc, char **argv)
|
||||
{
|
||||
if (!g_create_dir("/tmp/.X11-unix"))
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR,
|
||||
LOG(LOG_LEVEL_ERROR,
|
||||
"sesman.c: error creating dir /tmp/.X11-unix");
|
||||
}
|
||||
g_chmod_hex("/tmp/.X11-unix", 0x1777);
|
||||
|
226
sesman/session.c
226
sesman/session.c
@ -70,7 +70,7 @@ dumpItemsToString(struct list *self, char *outstr, int len)
|
||||
g_memset(outstr, 0, len);
|
||||
if (self->count == 0)
|
||||
{
|
||||
g_writeln("List is empty");
|
||||
LOG_DEVEL(LOG_LEVEL_TRACE, "List is empty");
|
||||
}
|
||||
|
||||
for (index = 0; index < self->count; index++)
|
||||
@ -116,15 +116,15 @@ session_get_bydata(const char *name, int width, int height, int bpp, int type,
|
||||
}
|
||||
|
||||
#if 0
|
||||
log_message(LOG_LEVEL_INFO,
|
||||
"session_get_bydata: search policy %d U %s W %d H %d bpp %d T %d IP %s",
|
||||
policy, name, width, height, bpp, type, client_ip);
|
||||
LOG(LOG_LEVEL_INFO,
|
||||
"session_get_bydata: search policy %d U %s W %d H %d bpp %d T %d IP %s",
|
||||
policy, name, width, height, bpp, type, client_ip);
|
||||
#endif
|
||||
|
||||
while (tmp != 0)
|
||||
{
|
||||
#if 0
|
||||
log_message(LOG_LEVEL_INFO,
|
||||
LOG(LOG_LEVEL_INFO,
|
||||
"session_get_bydata: try %p U %s W %d H %d bpp %d T %d IP %s",
|
||||
tmp->item,
|
||||
tmp->item->name,
|
||||
@ -134,14 +134,14 @@ session_get_bydata(const char *name, int width, int height, int bpp, int type,
|
||||
#endif
|
||||
|
||||
if (g_strncmp(name, tmp->item->name, 255) == 0 &&
|
||||
(!(policy & SESMAN_CFG_SESS_POLICY_D) ||
|
||||
(tmp->item->width == width && tmp->item->height == height)) &&
|
||||
(!(policy & SESMAN_CFG_SESS_POLICY_I) ||
|
||||
(g_strncmp_d(client_ip, tmp->item->client_ip, ':', 255) == 0)) &&
|
||||
(!(policy & SESMAN_CFG_SESS_POLICY_C) ||
|
||||
(g_strncmp(client_ip, tmp->item->client_ip, 255) == 0)) &&
|
||||
tmp->item->bpp == bpp &&
|
||||
tmp->item->type == type)
|
||||
(!(policy & SESMAN_CFG_SESS_POLICY_D) ||
|
||||
(tmp->item->width == width && tmp->item->height == height)) &&
|
||||
(!(policy & SESMAN_CFG_SESS_POLICY_I) ||
|
||||
(g_strncmp_d(client_ip, tmp->item->client_ip, ':', 255) == 0)) &&
|
||||
(!(policy & SESMAN_CFG_SESS_POLICY_C) ||
|
||||
(g_strncmp(client_ip, tmp->item->client_ip, 255) == 0)) &&
|
||||
tmp->item->bpp == bpp &&
|
||||
tmp->item->type == type)
|
||||
{
|
||||
return tmp->item;
|
||||
}
|
||||
@ -313,7 +313,7 @@ session_get_avail_display_from_chain(void)
|
||||
display++;
|
||||
}
|
||||
|
||||
log_message(LOG_LEVEL_ERROR, "X server -- no display in range is available");
|
||||
LOG(LOG_LEVEL_ERROR, "X server -- no display in range is available");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -333,9 +333,9 @@ wait_for_xserver(int display)
|
||||
|
||||
if (i > 40)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR,
|
||||
"X server for display %d startup timeout",
|
||||
display);
|
||||
LOG(LOG_LEVEL_ERROR,
|
||||
"X server for display %d startup timeout",
|
||||
display);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -373,8 +373,8 @@ session_start_chansrv(char *username, int display)
|
||||
/* executing chansrv */
|
||||
g_execvp(exe_path, (char **) (chansrv_params->items));
|
||||
/* should not get here */
|
||||
log_message(LOG_LEVEL_ALWAYS, "error starting chansrv "
|
||||
"- user %s - pid %d", username, g_getpid());
|
||||
LOG(LOG_LEVEL_ALWAYS, "error starting chansrv "
|
||||
"- user %s - pid %d", username, g_getpid());
|
||||
list_delete(chansrv_params);
|
||||
g_exit(1);
|
||||
}
|
||||
@ -420,8 +420,8 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
/* check to limit concurrent sessions */
|
||||
if (g_session_count >= g_cfg->sess.max_sessions)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "max concurrent session limit "
|
||||
"exceeded. login for user %s denied", s->username);
|
||||
LOG(LOG_LEVEL_INFO, "max concurrent session limit "
|
||||
"exceeded. login for user %s denied", s->username);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -429,8 +429,8 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
|
||||
if (temp == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "cannot create new chain "
|
||||
"element - user %s", s->username);
|
||||
LOG(LOG_LEVEL_ERROR, "cannot create new chain "
|
||||
"element - user %s", s->username);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -439,8 +439,8 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
if (temp->item == 0)
|
||||
{
|
||||
g_free(temp);
|
||||
log_message(LOG_LEVEL_ERROR, "cannot create new session "
|
||||
"item - user %s", s->username);
|
||||
LOG(LOG_LEVEL_ERROR, "cannot create new session "
|
||||
"item - user %s", s->username);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -461,8 +461,8 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
}
|
||||
else if (pid == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "calling auth_start_session from pid %d",
|
||||
g_getpid());
|
||||
LOG(LOG_LEVEL_INFO, "calling auth_start_session from pid %d",
|
||||
g_getpid());
|
||||
auth_start_session(data, display);
|
||||
g_delete_wait_obj(g_term_event);
|
||||
g_tcp_close(g_sck);
|
||||
@ -493,15 +493,15 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
*/
|
||||
if (g_setsid() < 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR,
|
||||
"setsid failed - pid %d", g_getpid());
|
||||
LOG(LOG_LEVEL_ERROR,
|
||||
"setsid failed - pid %d", g_getpid());
|
||||
}
|
||||
|
||||
if (g_setlogin(s->username) < 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR,
|
||||
"setlogin failed for user %s - pid %d", s->username,
|
||||
g_getpid());
|
||||
LOG(LOG_LEVEL_ERROR,
|
||||
"setlogin failed for user %s - pid %d", s->username,
|
||||
g_getpid());
|
||||
}
|
||||
}
|
||||
|
||||
@ -543,21 +543,21 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
{
|
||||
if (s->program[0] != 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG,
|
||||
"starting program with parameters: %s ",
|
||||
s->program);
|
||||
if(g_strchr(s->program, ' ') != 0 || g_strchr(s->program, '\t') != 0)
|
||||
LOG(LOG_LEVEL_DEBUG,
|
||||
"starting program with parameters: %s ",
|
||||
s->program);
|
||||
if (g_strchr(s->program, ' ') != 0 || g_strchr(s->program, '\t') != 0)
|
||||
{
|
||||
const char *params[] = {"sh", "-c", s->program, NULL};
|
||||
g_execvp("/bin/sh", (char **)params);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_execlp3(s->program, s->program, 0);
|
||||
g_execlp3(s->program, s->program, 0);
|
||||
}
|
||||
log_message(LOG_LEVEL_ALWAYS,
|
||||
"error starting program %s for user %s - pid %d",
|
||||
s->program, s->username, g_getpid());
|
||||
LOG(LOG_LEVEL_ALWAYS,
|
||||
"error starting program %s for user %s - pid %d",
|
||||
s->program, s->username, g_getpid());
|
||||
}
|
||||
}
|
||||
/* try to execute user window manager if enabled */
|
||||
@ -567,51 +567,51 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
if (g_file_exist(text))
|
||||
{
|
||||
g_execlp3(text, g_cfg->user_wm, 0);
|
||||
log_message(LOG_LEVEL_ALWAYS, "error starting user "
|
||||
"wm for user %s - pid %d", s->username, g_getpid());
|
||||
LOG(LOG_LEVEL_ALWAYS, "error starting user "
|
||||
"wm for user %s - pid %d", s->username, g_getpid());
|
||||
/* logging parameters */
|
||||
log_message(LOG_LEVEL_DEBUG, "errno: %d, "
|
||||
"description: %s", g_get_errno(), g_get_strerror());
|
||||
log_message(LOG_LEVEL_DEBUG, "execlp3 parameter "
|
||||
"list:");
|
||||
log_message(LOG_LEVEL_DEBUG, " argv[0] = %s",
|
||||
text);
|
||||
log_message(LOG_LEVEL_DEBUG, " argv[1] = %s",
|
||||
g_cfg->user_wm);
|
||||
LOG(LOG_LEVEL_DEBUG, "errno: %d, "
|
||||
"description: %s", g_get_errno(), g_get_strerror());
|
||||
LOG(LOG_LEVEL_DEBUG, "execlp3 parameter "
|
||||
"list:");
|
||||
LOG(LOG_LEVEL_DEBUG, " argv[0] = %s",
|
||||
text);
|
||||
LOG(LOG_LEVEL_DEBUG, " argv[1] = %s",
|
||||
g_cfg->user_wm);
|
||||
}
|
||||
}
|
||||
/* if we're here something happened to g_execlp3
|
||||
so we try running the default window manager */
|
||||
g_execlp3(g_cfg->default_wm, g_cfg->default_wm, 0);
|
||||
|
||||
log_message(LOG_LEVEL_ALWAYS, "error starting default "
|
||||
"wm for user %s - pid %d", s->username, g_getpid());
|
||||
LOG(LOG_LEVEL_ALWAYS, "error starting default "
|
||||
"wm for user %s - pid %d", s->username, g_getpid());
|
||||
/* logging parameters */
|
||||
log_message(LOG_LEVEL_DEBUG, "errno: %d, description: "
|
||||
"%s", g_get_errno(), g_get_strerror());
|
||||
log_message(LOG_LEVEL_DEBUG, "execlp3 parameter list:");
|
||||
log_message(LOG_LEVEL_DEBUG, " argv[0] = %s",
|
||||
g_cfg->default_wm);
|
||||
log_message(LOG_LEVEL_DEBUG, " argv[1] = %s",
|
||||
g_cfg->default_wm);
|
||||
LOG(LOG_LEVEL_DEBUG, "errno: %d, description: "
|
||||
"%s", g_get_errno(), g_get_strerror());
|
||||
LOG(LOG_LEVEL_DEBUG, "execlp3 parameter list:");
|
||||
LOG(LOG_LEVEL_DEBUG, " argv[0] = %s",
|
||||
g_cfg->default_wm);
|
||||
LOG(LOG_LEVEL_DEBUG, " argv[1] = %s",
|
||||
g_cfg->default_wm);
|
||||
|
||||
/* still a problem starting window manager just start xterm */
|
||||
g_execlp3("xterm", "xterm", 0);
|
||||
|
||||
/* should not get here */
|
||||
log_message(LOG_LEVEL_ALWAYS, "error starting xterm "
|
||||
"for user %s - pid %d", s->username, g_getpid());
|
||||
LOG(LOG_LEVEL_ALWAYS, "error starting xterm "
|
||||
"for user %s - pid %d", s->username, g_getpid());
|
||||
/* logging parameters */
|
||||
log_message(LOG_LEVEL_DEBUG, "errno: %d, description: "
|
||||
"%s", g_get_errno(), g_get_strerror());
|
||||
LOG(LOG_LEVEL_DEBUG, "errno: %d, description: "
|
||||
"%s", g_get_errno(), g_get_strerror());
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "another Xserver might "
|
||||
"already be active on display %d - see log", display);
|
||||
LOG(LOG_LEVEL_ERROR, "another Xserver might "
|
||||
"already be active on display %d - see log", display);
|
||||
}
|
||||
|
||||
log_message(LOG_LEVEL_DEBUG, "aborting connection...");
|
||||
LOG(LOG_LEVEL_DEBUG, "aborting connection...");
|
||||
g_exit(0);
|
||||
}
|
||||
else
|
||||
@ -676,9 +676,9 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
*/
|
||||
if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) < 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_WARNING,
|
||||
"Failed to disable setuid on X server: %s",
|
||||
g_get_strerror());
|
||||
LOG(LOG_LEVEL_WARNING,
|
||||
"Failed to disable setuid on X server: %s",
|
||||
g_get_strerror());
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -702,7 +702,7 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
|
||||
pp1 = (char **) xserver_params->items;
|
||||
|
||||
log_message(LOG_LEVEL_INFO, "%s", dumpItemsToString(xserver_params, execvpparams, 2048));
|
||||
LOG(LOG_LEVEL_INFO, "%s", dumpItemsToString(xserver_params, execvpparams, 2048));
|
||||
|
||||
/* some args are passed via env vars */
|
||||
g_sprintf(geometry, "%d", s->width);
|
||||
@ -747,7 +747,7 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
/* make sure it ends with a zero */
|
||||
list_add_item(xserver_params, 0);
|
||||
pp1 = (char **)xserver_params->items;
|
||||
log_message(LOG_LEVEL_INFO, "%s", dumpItemsToString(xserver_params, execvpparams, 2048));
|
||||
LOG(LOG_LEVEL_INFO, "%s", dumpItemsToString(xserver_params, execvpparams, 2048));
|
||||
g_execvp(xserver, pp1);
|
||||
}
|
||||
else if (type == SESMAN_SESSION_TYPE_XRDP)
|
||||
@ -776,30 +776,30 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
/* make sure it ends with a zero */
|
||||
list_add_item(xserver_params, 0);
|
||||
pp1 = (char **)xserver_params->items;
|
||||
log_message(LOG_LEVEL_INFO, "%s", dumpItemsToString(xserver_params, execvpparams, 2048));
|
||||
LOG(LOG_LEVEL_INFO, "%s", dumpItemsToString(xserver_params, execvpparams, 2048));
|
||||
g_execvp(xserver, pp1);
|
||||
}
|
||||
else
|
||||
{
|
||||
log_message(LOG_LEVEL_ALWAYS, "bad session type - "
|
||||
"user %s - pid %d", s->username, g_getpid());
|
||||
LOG(LOG_LEVEL_ALWAYS, "bad session type - "
|
||||
"user %s - pid %d", s->username, g_getpid());
|
||||
g_exit(1);
|
||||
}
|
||||
|
||||
/* should not get here */
|
||||
log_message(LOG_LEVEL_ALWAYS, "error starting X server "
|
||||
"- user %s - pid %d", s->username, g_getpid());
|
||||
LOG(LOG_LEVEL_ALWAYS, "error starting X server "
|
||||
"- user %s - pid %d", s->username, g_getpid());
|
||||
|
||||
/* logging parameters */
|
||||
log_message(LOG_LEVEL_DEBUG, "errno: %d, description: "
|
||||
"%s", g_get_errno(), g_get_strerror());
|
||||
log_message(LOG_LEVEL_DEBUG, "execve parameter list size: "
|
||||
"%d", (xserver_params)->count);
|
||||
LOG(LOG_LEVEL_DEBUG, "errno: %d, description: "
|
||||
"%s", g_get_errno(), g_get_strerror());
|
||||
LOG(LOG_LEVEL_DEBUG, "execve parameter list size: "
|
||||
"%d", (xserver_params)->count);
|
||||
|
||||
for (i = 0; i < (xserver_params->count); i++)
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG, " argv[%d] = %s",
|
||||
i, (char *)list_get_item(xserver_params, i));
|
||||
LOG(LOG_LEVEL_DEBUG, " argv[%d] = %s",
|
||||
i, (char *)list_get_item(xserver_params, i));
|
||||
}
|
||||
|
||||
list_delete(xserver_params);
|
||||
@ -809,13 +809,13 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c,
|
||||
{
|
||||
wait_for_xserver(display);
|
||||
chansrv_pid = session_start_chansrv(s->username, display);
|
||||
log_message(LOG_LEVEL_ALWAYS, "waiting for window manager "
|
||||
"(pid %d) to exit", window_manager_pid);
|
||||
LOG(LOG_LEVEL_ALWAYS, "waiting for window manager "
|
||||
"(pid %d) to exit", window_manager_pid);
|
||||
g_waitpid(window_manager_pid);
|
||||
log_message(LOG_LEVEL_ALWAYS, "window manager (pid %d) did "
|
||||
"exit, cleaning up session", window_manager_pid);
|
||||
log_message(LOG_LEVEL_INFO, "calling auth_stop_session and "
|
||||
"auth_end from pid %d", g_getpid());
|
||||
LOG(LOG_LEVEL_ALWAYS, "window manager (pid %d) did "
|
||||
"exit, cleaning up session", window_manager_pid);
|
||||
LOG(LOG_LEVEL_INFO, "calling auth_stop_session and "
|
||||
"auth_end from pid %d", g_getpid());
|
||||
auth_stop_session(data);
|
||||
auth_end(data);
|
||||
g_sigterm(display_pid);
|
||||
@ -928,8 +928,8 @@ session_kill(int pid)
|
||||
{
|
||||
if (tmp->item == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "session descriptor for "
|
||||
"pid %d is null!", pid);
|
||||
LOG(LOG_LEVEL_ERROR, "session descriptor for "
|
||||
"pid %d is null!", pid);
|
||||
|
||||
if (prev == 0)
|
||||
{
|
||||
@ -948,7 +948,7 @@ session_kill(int pid)
|
||||
if (tmp->item->pid == pid)
|
||||
{
|
||||
/* deleting the session */
|
||||
log_message(LOG_LEVEL_INFO, "++ terminated session: username %s, display :%d.0, session_pid %d, ip %s", tmp->item->name, tmp->item->display, tmp->item->pid, tmp->item->client_ip);
|
||||
LOG(LOG_LEVEL_INFO, "++ terminated session: username %s, display :%d.0, session_pid %d, ip %s", tmp->item->name, tmp->item->display, tmp->item->pid, tmp->item->client_ip);
|
||||
g_free(tmp->item);
|
||||
|
||||
if (prev == 0)
|
||||
@ -987,8 +987,8 @@ session_sigkill_all(void)
|
||||
{
|
||||
if (tmp->item == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "found null session "
|
||||
"descriptor!");
|
||||
LOG(LOG_LEVEL_ERROR, "found null session "
|
||||
"descriptor!");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1011,7 +1011,7 @@ session_get_bypid(int pid)
|
||||
|
||||
if (0 == dummy)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "session_get_bypid: out of memory");
|
||||
LOG(LOG_LEVEL_ERROR, "session_get_bypid: out of memory");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1021,8 +1021,8 @@ session_get_bypid(int pid)
|
||||
{
|
||||
if (tmp->item == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "session descriptor for "
|
||||
"pid %d is null!", pid);
|
||||
LOG(LOG_LEVEL_ERROR, "session descriptor for "
|
||||
"pid %d is null!", pid);
|
||||
g_free(dummy);
|
||||
return 0;
|
||||
}
|
||||
@ -1061,8 +1061,8 @@ session_get_byuser(const char *user, int *cnt, unsigned char flags)
|
||||
if ((NULL == user) || (!g_strncasecmp(user, tmp->item->name, 256)))
|
||||
{
|
||||
LOG_DEVEL(LOG_LEVEL_DEBUG, "session_get_byuser: status=%d, flags=%d, "
|
||||
"result=%d", (tmp->item->status), flags,
|
||||
((tmp->item->status) & flags));
|
||||
"result=%d", (tmp->item->status), flags,
|
||||
((tmp->item->status) & flags));
|
||||
|
||||
if ((tmp->item->status) & flags)
|
||||
{
|
||||
@ -1094,7 +1094,7 @@ session_get_byuser(const char *user, int *cnt, unsigned char flags)
|
||||
|
||||
while (tmp != 0)
|
||||
{
|
||||
/* #warning FIXME: we should get only disconnected sessions! */
|
||||
/* #warning FIXME: we should get only disconnected sessions! */
|
||||
if ((NULL == user) || (!g_strncasecmp(user, tmp->item->name, 256)))
|
||||
{
|
||||
if ((tmp->item->status) & flags)
|
||||
@ -1104,7 +1104,7 @@ session_get_byuser(const char *user, int *cnt, unsigned char flags)
|
||||
(sess[index]).height = tmp->item->height;
|
||||
(sess[index]).width = tmp->item->width;
|
||||
(sess[index]).bpp = tmp->item->bpp;
|
||||
/* #warning FIXME: setting idle times and such */
|
||||
/* #warning FIXME: setting idle times and such */
|
||||
/*(sess[index]).connect_time.year = tmp->item->connect_time.year;
|
||||
(sess[index]).connect_time.month = tmp->item->connect_time.month;
|
||||
(sess[index]).connect_time.day = tmp->item->connect_time.day;
|
||||
@ -1145,7 +1145,7 @@ session_get_byuser(const char *user, int *cnt, unsigned char flags)
|
||||
int
|
||||
cleanup_sockets(int display)
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG, "cleanup_sockets:");
|
||||
LOG(LOG_LEVEL_DEBUG, "cleanup_sockets:");
|
||||
char file[256];
|
||||
int error;
|
||||
|
||||
@ -1154,11 +1154,11 @@ cleanup_sockets(int display)
|
||||
g_snprintf(file, 255, CHANSRV_PORT_OUT_STR, display);
|
||||
if (g_file_exist(file))
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file);
|
||||
LOG(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file);
|
||||
if (g_file_delete(file) == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG,
|
||||
"cleanup_sockets: failed to delete %s", file);
|
||||
LOG(LOG_LEVEL_DEBUG,
|
||||
"cleanup_sockets: failed to delete %s", file);
|
||||
error++;
|
||||
}
|
||||
}
|
||||
@ -1166,11 +1166,11 @@ cleanup_sockets(int display)
|
||||
g_snprintf(file, 255, CHANSRV_PORT_IN_STR, display);
|
||||
if (g_file_exist(file))
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file);
|
||||
LOG(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file);
|
||||
if (g_file_delete(file) == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG,
|
||||
"cleanup_sockets: failed to delete %s", file);
|
||||
LOG(LOG_LEVEL_DEBUG,
|
||||
"cleanup_sockets: failed to delete %s", file);
|
||||
error++;
|
||||
}
|
||||
}
|
||||
@ -1178,11 +1178,11 @@ cleanup_sockets(int display)
|
||||
g_snprintf(file, 255, XRDP_CHANSRV_STR, display);
|
||||
if (g_file_exist(file))
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file);
|
||||
LOG(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file);
|
||||
if (g_file_delete(file) == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG,
|
||||
"cleanup_sockets: failed to delete %s", file);
|
||||
LOG(LOG_LEVEL_DEBUG,
|
||||
"cleanup_sockets: failed to delete %s", file);
|
||||
error++;
|
||||
}
|
||||
}
|
||||
@ -1190,11 +1190,11 @@ cleanup_sockets(int display)
|
||||
g_snprintf(file, 255, CHANSRV_API_STR, display);
|
||||
if (g_file_exist(file))
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file);
|
||||
LOG(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file);
|
||||
if (g_file_delete(file) == 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_DEBUG,
|
||||
"cleanup_sockets: failed to delete %s", file);
|
||||
LOG(LOG_LEVEL_DEBUG,
|
||||
"cleanup_sockets: failed to delete %s", file);
|
||||
error++;
|
||||
}
|
||||
}
|
||||
|
10
sesman/sig.c
10
sesman/sig.c
@ -43,7 +43,7 @@ sig_sesman_shutdown(int sig)
|
||||
{
|
||||
char pid_file[256];
|
||||
|
||||
log_message(LOG_LEVEL_INFO, "shutting down sesman %d", 1);
|
||||
LOG(LOG_LEVEL_INFO, "shutting down sesman %d", 1);
|
||||
|
||||
if (g_getpid() != g_pid)
|
||||
{
|
||||
@ -69,7 +69,7 @@ sig_sesman_reload_cfg(int sig)
|
||||
struct config_sesman *cfg;
|
||||
char cfg_file[256];
|
||||
|
||||
log_message(LOG_LEVEL_WARNING, "receiving SIGHUP %d", 1);
|
||||
LOG(LOG_LEVEL_WARNING, "receiving SIGHUP %d", 1);
|
||||
|
||||
if (g_getpid() != g_pid)
|
||||
{
|
||||
@ -81,13 +81,13 @@ sig_sesman_reload_cfg(int sig)
|
||||
|
||||
if (0 == cfg)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "error creating new config: - keeping old cfg");
|
||||
LOG(LOG_LEVEL_ERROR, "error creating new config: - keeping old cfg");
|
||||
return;
|
||||
}
|
||||
|
||||
if (config_read(cfg) != 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "error reading config - keeping old cfg");
|
||||
LOG(LOG_LEVEL_ERROR, "error reading config - keeping old cfg");
|
||||
g_free(cfg);
|
||||
return;
|
||||
}
|
||||
@ -121,7 +121,7 @@ sig_sesman_reload_cfg(int sig)
|
||||
}
|
||||
}
|
||||
|
||||
log_message(LOG_LEVEL_INFO, "configuration reloaded, log subsystem restarted");
|
||||
LOG(LOG_LEVEL_INFO, "configuration reloaded, log subsystem restarted");
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -85,7 +85,9 @@ main(int argc, char **argv)
|
||||
|
||||
sck = g_tcp_socket();
|
||||
if (sck < 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (g_tcp_connect(sck, argv[1], g_cfg.listen_port) == 0)
|
||||
{
|
||||
|
@ -56,7 +56,9 @@ int main(int argc, char **argv)
|
||||
|
||||
sock = g_tcp_socket();
|
||||
if (sock < 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
s = scp_session_create();
|
||||
c = scp_connection_create(sock);
|
||||
|
@ -78,7 +78,7 @@ auth_userpass(const char *user, const char *pass, int *errorcode)
|
||||
|
||||
if (1 == auth_account_disabled(stp))
|
||||
{
|
||||
log_message(LOG_LEVEL_INFO, "account %s is disabled", user);
|
||||
LOG(LOG_LEVEL_INFO, "account %s is disabled", user);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -326,9 +326,9 @@ auth_account_disabled(struct spwd *stp)
|
||||
}
|
||||
|
||||
if ((stp->sp_max >= 0) &&
|
||||
(stp->sp_inact >= 0) &&
|
||||
(stp->sp_lstchg > 0) &&
|
||||
(today >= (stp->sp_lstchg + stp->sp_max + stp->sp_inact)))
|
||||
(stp->sp_inact >= 0) &&
|
||||
(stp->sp_lstchg > 0) &&
|
||||
(today >= (stp->sp_lstchg + stp->sp_max + stp->sp_inact)))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
@ -43,7 +43,7 @@
|
||||
#define SECS_PER_DAY (24L*3600L)
|
||||
#endif
|
||||
|
||||
extern struct config_sesman* g_cfg; /* in sesman.c */
|
||||
extern struct config_sesman *g_cfg; /* in sesman.c */
|
||||
|
||||
/******************************************************************************/
|
||||
/* returns boolean */
|
||||
@ -116,7 +116,7 @@ auth_crypt_pwd(const char *pwd, const char *pln, char *crp)
|
||||
*
|
||||
*/
|
||||
static int
|
||||
auth_account_disabled(struct spwd* stp)
|
||||
auth_account_disabled(struct spwd *stp)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@ -95,7 +95,7 @@ get_service_name(char *service_name)
|
||||
service_name[0] = 0;
|
||||
|
||||
if (g_file_exist("/etc/pam.d/xrdp-sesman") ||
|
||||
g_file_exist(XRDP_SYSCONF_PATH "/pam.d/xrdp-sesman"))
|
||||
g_file_exist(XRDP_SYSCONF_PATH "/pam.d/xrdp-sesman"))
|
||||
{
|
||||
g_strncpy(service_name, "xrdp-sesman", 255);
|
||||
}
|
||||
|
@ -46,19 +46,19 @@ add_xauth_cookie(int display, const char *file)
|
||||
g_bytes_to_hexstr(cookie_bin, 16, cookie_str, 33);
|
||||
|
||||
g_sprintf(xauth_str, "xauth -q -f %s add :%d . %s",
|
||||
file, display, cookie_str);
|
||||
file, display, cookie_str);
|
||||
|
||||
dp = popen(xauth_str, "r");
|
||||
if (dp == NULL)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "Unable to launch xauth");
|
||||
LOG(LOG_LEVEL_ERROR, "Unable to launch xauth");
|
||||
return 1;
|
||||
}
|
||||
|
||||
ret = pclose(dp);
|
||||
if (ret < 0)
|
||||
{
|
||||
log_message(LOG_LEVEL_ERROR, "An error occurred while running xauth");
|
||||
LOG(LOG_LEVEL_ERROR, "An error occurred while running xauth");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user