secgateway/Platform/user/ulog/log-sched/log_pty.c

97 lines
2.9 KiB
C
Executable File

#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
#include "log_pty.h"
#include "log_types.h"
#include "log_common.h"
#define LOG_DEV_PTY_DIR LOG_DEV_DIR"pts/"
#define LOG_CONF_PTY_FILE_NAME "log-pty.conf"
static int write_pty_content(FILE *fp, const u8 level, const char *filter_mod, void *arg)
{
DIR *dir;
if ((dir = opendir(LOG_DEV_PTY_DIR)) == NULL) {
ULOG_ERR(g_log, "Open dir:[%s] is failure:%d\n", LOG_DEV_PTY_DIR, strerror(errno));
return -1;
}
struct dirent *ptr;
char path[MAX_PATH_SZ];
while ((ptr = readdir(dir)) != NULL) {
if ((strcmp(ptr->d_name, ".") == 0)
|| (strcmp(ptr->d_name, "..") == 0)
|| (ptr->d_type == DT_DIR)) { ///current dir OR parrent dir
ULOG_DEBUG(g_log,"The file:[%s] or directory jump over\n", ptr->d_name);
continue;
}
if (strstr(ptr->d_name, "ptmx") != NULL) {
ULOG_DEBUG(g_log,"The file:[%s] isn't redirected\n", ptr->d_name);
continue;
}
ULOG_DEBUG(g_log, "pty name:%s", ptr->d_name);
if (snprintf(path, sizeof(path), "%s%s", LOG_DEV_PTY_DIR, ptr->d_name) < 0) {
ULOG_ERR(g_log, "Setting pty of log[%s] is failure", ptr->d_name);
return -1;
}
if (write_conf_content_authorizing(fp, level, filter_mod, path) != 0) {
ULOG_ERR(g_log, "Writing pty[module:%s] of log is failure", filter_mod);
return -1;
}
}
return 0;
}
static int config_log_pty(const log_pty_t *conf)
{
int ret = -1;
switch (conf->on)
{
case LOG_OFF:
ret = log_off_with_file(LOG_CONF_PATH, LOG_CONF_PTY_FILE_NAME);
break;
case LOG_ON:
if (log_conf(conf->level, LOG_CONF_PATH, LOG_CONF_PTY_FILE_NAME, conf->module,
write_pty_content, NULL) != 0) {
ULOG_ERR(g_log, "Log's pty configure which is written is failure");
ret = -1;
} else {
ret = 0;
}
break;
default:
ULOG_WARNING(g_log, "Unknown on value:%u", conf->on);
break;
}
return ret;
}
void rpc_conf_log_pty(rpc_conn *conn, pointer input, int input_len, pointer data)
{
u32 need_len = sizeof(log_pty_t);
if (input_len < need_len) {
ULOG_WARNING(g_log,
"The input paramter of rpc log pty is needed length of %u, but the actual length is %u",
need_len, input_len);
return;
}
if (config_log_pty((const log_pty_t *)input) != 0) {
ULOG_ERR(g_log, "Configuring pty of log is faiure");
rpc_return_error(conn, RET_ERR, "Configuring pty of log is faiure");
return;
}
rpc_return_null(conn);
}