mirror of https://git.48k.eu/ogserver
Log ogClient sessions in ogagent.log
Otherwise, administrators can not read the logging history from WebConsole.master v1.2.1
parent
2213d005ff
commit
25e21f435d
45
src/client.c
45
src/client.c
|
@ -24,14 +24,47 @@
|
||||||
#include <jansson.h>
|
#include <jansson.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
static int og_status_session_start(struct og_client *cli)
|
#define OG_LEGACY_OGAGENT_LOG_FILE "/opt/opengnsys/log/ogagent.log"
|
||||||
|
#define OG_CLIENT_SESSION_EVENT_LOGIN "logged in"
|
||||||
|
#define OG_CLIENT_SESSION_EVENT_LOGOUT "logged out"
|
||||||
|
#define OG_CLIENT_SESSION_OS_LINUX "Linux"
|
||||||
|
#define OG_CLIENT_SESSION_OS_WINDOWS "Windows"
|
||||||
|
#define OG_CLIENT_SESSION_TIMEDATE_LEN 20
|
||||||
|
|
||||||
|
static void og_status_session_log(const struct og_client *cli,
|
||||||
|
const char *type, const char* user,
|
||||||
|
const char *os)
|
||||||
|
{
|
||||||
|
char date[OG_CLIENT_SESSION_TIMEDATE_LEN];
|
||||||
|
char client_ip[INET_ADDRSTRLEN];
|
||||||
|
time_t now;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
time(&now);
|
||||||
|
strftime(date, OG_CLIENT_SESSION_TIMEDATE_LEN, "%FT%T", gmtime(&now));
|
||||||
|
|
||||||
|
inet_ntop(AF_INET, &(cli->addr.sin_addr), client_ip, INET_ADDRSTRLEN);
|
||||||
|
|
||||||
|
fp = fopen(OG_LEGACY_OGAGENT_LOG_FILE, "a");
|
||||||
|
if (fp) {
|
||||||
|
fprintf(fp, "%s: User %s: ip=%s, user=%s, lang=en, os=%s:%s.\n",
|
||||||
|
date, type, client_ip, user, os, os);
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int og_status_session_start(struct og_client *cli, const char *user)
|
||||||
{
|
{
|
||||||
switch (cli->status) {
|
switch (cli->status) {
|
||||||
case OG_CLIENT_STATUS_LINUX:
|
case OG_CLIENT_STATUS_LINUX:
|
||||||
cli->status = OG_CLIENT_STATUS_LINUX_SESSION;
|
cli->status = OG_CLIENT_STATUS_LINUX_SESSION;
|
||||||
|
og_status_session_log(cli, OG_CLIENT_SESSION_EVENT_LOGIN, user,
|
||||||
|
OG_CLIENT_SESSION_OS_LINUX);
|
||||||
break;
|
break;
|
||||||
case OG_CLIENT_STATUS_WIN:
|
case OG_CLIENT_STATUS_WIN:
|
||||||
cli->status = OG_CLIENT_STATUS_WIN_SESSION;
|
cli->status = OG_CLIENT_STATUS_WIN_SESSION;
|
||||||
|
og_status_session_log(cli, OG_CLIENT_SESSION_EVENT_LOGIN, user,
|
||||||
|
OG_CLIENT_SESSION_OS_WINDOWS);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
syslog(LOG_ERR, "%s:%d: invalid session start for status %d\n",
|
syslog(LOG_ERR, "%s:%d: invalid session start for status %d\n",
|
||||||
|
@ -41,14 +74,18 @@ static int og_status_session_start(struct og_client *cli)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int og_status_session_stop(struct og_client *cli)
|
static int og_status_session_stop(struct og_client *cli, const char *user)
|
||||||
{
|
{
|
||||||
switch (cli->status) {
|
switch (cli->status) {
|
||||||
case OG_CLIENT_STATUS_WIN_SESSION:
|
case OG_CLIENT_STATUS_WIN_SESSION:
|
||||||
cli->status = OG_CLIENT_STATUS_WIN;
|
cli->status = OG_CLIENT_STATUS_WIN;
|
||||||
|
og_status_session_log(cli, OG_CLIENT_SESSION_EVENT_LOGOUT, user,
|
||||||
|
OG_CLIENT_SESSION_OS_WINDOWS);
|
||||||
break;
|
break;
|
||||||
case OG_CLIENT_STATUS_LINUX_SESSION:
|
case OG_CLIENT_STATUS_LINUX_SESSION:
|
||||||
cli->status = OG_CLIENT_STATUS_LINUX;
|
cli->status = OG_CLIENT_STATUS_LINUX;
|
||||||
|
og_status_session_log(cli, OG_CLIENT_SESSION_EVENT_LOGOUT, user,
|
||||||
|
OG_CLIENT_SESSION_OS_LINUX);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
syslog(LOG_ERR, "%s:%d: invalid session stop for status %d\n",
|
syslog(LOG_ERR, "%s:%d: invalid session stop for status %d\n",
|
||||||
|
@ -90,9 +127,9 @@ static int og_resp_early_hints(struct og_client *cli, json_t *data)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (!strncmp(action, "start", strlen("start")))
|
if (!strncmp(action, "start", strlen("start")))
|
||||||
return og_status_session_start(cli);
|
return og_status_session_start(cli, user);
|
||||||
if (!strncmp(action, "stop", strlen("stop")))
|
if (!strncmp(action, "stop", strlen("stop")))
|
||||||
return og_status_session_stop(cli);
|
return og_status_session_stop(cli, user);
|
||||||
|
|
||||||
syslog(LOG_ERR, "Invalid action for event %s %s %s\n", event, action, user);
|
syslog(LOG_ERR, "Invalid action for event %s %s %s\n", event, action, user);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue