Skip to content

Commit

Permalink
feat(sysagentd): implement REMOTE EXEC
Browse files Browse the repository at this point in the history
Add interactive shell capabilities by using
UDP port forwarding.
Implement START/STOP methods to register command
specific port forwarders.
  • Loading branch information
dfranusic committed Jan 26, 2022
1 parent e2f7323 commit 9928f86
Show file tree
Hide file tree
Showing 9 changed files with 449 additions and 48 deletions.
81 changes: 43 additions & 38 deletions src/proto/gdt.pb.cc

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions src/proto/gdt.pb.enums_only.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ namespace gdt_grpc {
PT_FU_FSIZE = 9041,
PT_SL_LOGLINE = 9042,
PT_SL_PORT = 9043,
PT_RE_PORT = 9044,
};
static const std::map<int, std::string> SysagentParamMap = {
{UNKNWON_PARAMETER, "UNKNWON_PARAMETER"},
Expand Down Expand Up @@ -120,6 +121,7 @@ namespace gdt_grpc {
{PT_FU_FSIZE, "PT_FU_FSIZE"},
{PT_SL_LOGLINE, "PT_SL_LOGLINE"},
{PT_SL_PORT, "PT_SL_PORT"},
{PT_RE_PORT, "PT_RE_PORT"},
};
enum SysagentCommand : int {
UNKNWON_COMMAND = 0,
Expand All @@ -139,6 +141,8 @@ namespace gdt_grpc {
CMD_FIRMWARE_UPDATE = 14,
CMD_SYSLOG_START = 15,
CMD_SYSLOG_STOP = 16,
CMD_REMOTE_EXEC_START = 17,
CMD_REMOTE_EXEC_STOP = 18,
};
static const std::map<int, std::string> SysagentCommandMap = {
{UNKNWON_COMMAND, "UNKNWON_COMMAND"},
Expand All @@ -158,6 +162,8 @@ namespace gdt_grpc {
{CMD_FIRMWARE_UPDATE, "CMD_FIRMWARE_UPDATE"},
{CMD_SYSLOG_START, "CMD_SYSLOG_START"},
{CMD_SYSLOG_STOP, "CMD_SYSLOG_STOP"},
{CMD_REMOTE_EXEC_START, "CMD_REMOTE_EXEC_START"},
{CMD_REMOTE_EXEC_STOP, "CMD_REMOTE_EXEC_STOP"},
};
}

Expand Down
7 changes: 5 additions & 2 deletions src/proto/gdt.pb.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/proto/gdt.proto
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ enum SysagentCommand {
CMD_FIRMWARE_UPDATE = 14;
CMD_SYSLOG_START = 15;
CMD_SYSLOG_STOP = 16;
CMD_REMOTE_EXEC_START = 17;
CMD_REMOTE_EXEC_STOP = 18;
}

/******************/
Expand Down Expand Up @@ -118,6 +120,8 @@ enum ParameterType {
// syslog
PT_SL_LOGLINE = 9042;
PT_SL_PORT = 9043;
// remote exec
PT_RE_PORT = 9044;
}

/*****************/
Expand Down
5 changes: 2 additions & 3 deletions src/services/json_rpc/ws_server.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ extern UserList USERS;
/*****************/
class WebSocketBase {
public:
WebSocketBase() = default;
WebSocketBase() : usr_info_{"", 0, nullptr, 0} {}

#ifndef ENABLE_WS_SINGLE_SESSION
~WebSocketBase() = default;
Expand All @@ -156,7 +156,7 @@ class WebSocketBase {
virtual void async_buffer_send(const std::string &d) = 0;
virtual void do_close() = 0;

usr_info_t usr_info_ = {"", 0, nullptr, 0};
usr_info_t usr_info_;
};

/**********************************/
Expand Down Expand Up @@ -375,7 +375,6 @@ class WebSocketSession : public WebSocketBase {
if (bi->banned){
// check if ban can be lifted
if(now_msec - bi->ts_msec > bi->ts_banned_until){
std::cout << "Ban lifted" << std::endl;
USERS.lift_ban(bi->username);
bi = nullptr;

Expand Down
2 changes: 1 addition & 1 deletion src/services/sysagent/plugins/syslog/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ pkglib_LTLIBRARIES += plg_sysagent_syslog.la
plg_sysagent_syslog_la_SOURCES = src/services/sysagent/plugins/syslog/plg_sysagent_syslog.cpp
plg_sysagent_syslog_la_CPPFLAGS = ${COMMON_INCLUDES} \
${GRPC_CFLAGS} \
-I src/services/sysagent \
-Isrc/services/sysagent \
-Isrc/proto
plg_sysagent_syslog_la_LDFLAGS = -version-info 1:0:0 -shared -module -export-dynamic
12 changes: 10 additions & 2 deletions src/services/sysagent/plugins/syslog/plg_sysagent_syslog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class EVUserCB: public gdt::GDTCallbackMethod {
};


// syslog thread "running"" flag
// syslog thread "running" flag
std::atomic_bool running;
// gdt log sent cb
GdtLogSentCb gdt_log_sent_cb;
Expand Down Expand Up @@ -152,24 +152,32 @@ static void gdt_push(const std::string data,
// attach to smsg
smsg->params.set_param(3, ev_usr_cb);
//output buffer size
ev_usr_cb->buff.resize(zs.avail_in * 2);
ev_usr_cb->buff.resize(zs.avail_in * 2 + 8);
zs.avail_out = ev_usr_cb->buff.size();
zs.next_out = (Bytef *)ev_usr_cb->buff.data();
// init struct
if(deflateInit(&zs, Z_BEST_COMPRESSION) != Z_OK){
handle_zlib_error(smsgm, smsg, ev_usr_cb);
deflateEnd(&zs);
delete ev_usr_cb;
smsgm->free_smsg(smsg);
return;
}
// compress data
int zres = deflate(&zs, Z_FINISH);
if(zres != Z_STREAM_END){
handle_zlib_error(smsgm, smsg, ev_usr_cb);
deflateEnd(&zs);
delete ev_usr_cb;
smsgm->free_smsg(smsg);
return;
}

// finish
if(deflateEnd(&zs) != Z_OK){
handle_zlib_error(smsgm, smsg, ev_usr_cb);
delete ev_usr_cb;
smsgm->free_smsg(smsg);
return;
}

Expand Down
1 change: 1 addition & 0 deletions src/services/sysagent/plugins/system/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ pkglib_LTLIBRARIES += plg_sysagent_system.la
plg_sysagent_system_la_SOURCES = src/services/sysagent/plugins/system/plg_system.cpp
plg_sysagent_system_la_CPPFLAGS = ${COMMON_INCLUDES} \
${GRPC_CFLAGS} \
-Isrc/services/sysagent \
-Isrc/proto
plg_sysagent_system_la_LDFLAGS = -version-info 1:0:0 \
-shared \
Expand Down
Loading

0 comments on commit 9928f86

Please sign in to comment.