about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2022-01-02 22:36:18 -0800
committerKartik K. Agaram <vc@akkartik.com>2022-01-02 22:36:33 -0800
commitb97291602b767e0846462700fe4d87245feb8684 (patch)
tree5f2569a7c18def043af1d068d4e89a4689611703
parent49a03587ef8be861d6dd7d6233b5040ae13f3c8a (diff)
downloadteliva-b97291602b767e0846462700fe4d87245feb8684.tar.gz
instrument some obvious syscalls
-rw-r--r--src/liolib.c6
-rw-r--r--src/luasocket/inet.c13
-rw-r--r--src/luasocket/tcp.c13
3 files changed, 31 insertions, 1 deletions
diff --git a/src/liolib.c b/src/liolib.c
index 6c03421..a22be20 100644
--- a/src/liolib.c
+++ b/src/liolib.c
@@ -132,7 +132,7 @@ static char iolib_errbuf[1024] = {0};
 static int io_open (lua_State *L) {
   const char *filename = luaL_checkstring(L, 1);
   const char *mode = luaL_optstring(L, 2, "r");
-  static buffer[1024] = {0};
+  static char buffer[1024] = {0};
   memset(buffer, '\0', 1024);
   snprintf(buffer, 1020, "io.open(\"%s\", \"%s\")", filename, mode);
   append_to_audit_log(L, buffer);
@@ -174,6 +174,10 @@ static int f_lines (lua_State *L) {
 static int io_lines (lua_State *L) {
   const char *filename = luaL_checkstring(L, 1);
   FILE **pf = newfile(L);
+  static char buffer[1024] = {0};
+  memset(buffer, '\0', 1024);
+  snprintf(buffer, 1020, "io.lines(\"%s\", \"r\")", filename);
+  append_to_audit_log(L, buffer);
   if (file_operation_permitted(filename, "r"))
     *pf = fopen(filename, "r");
   else {
diff --git a/src/luasocket/inet.c b/src/luasocket/inet.c
index fabbffc..d726c89 100644
--- a/src/luasocket/inet.c
+++ b/src/luasocket/inet.c
@@ -4,6 +4,7 @@
 \*=========================================================================*/
 #include "luasocket.h"
 #include "inet.h"
+#include "../teliva.h"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -62,6 +63,10 @@ static int inet_gethost(const char *address, struct hostent **hp) {
 \*-------------------------------------------------------------------------*/
 static int inet_global_tohostname(lua_State *L) {
     const char *address = luaL_checkstring(L, 1);
+    static char buffer[1024] = {0};
+    memset(buffer, '\0', 1024);
+    snprintf(buffer, 1020, "socket.tohostname(\"%s\")", address);
+    append_to_audit_log(L, buffer);
     struct hostent *hp = NULL;
     int err = inet_gethost(address, &hp);
     if (err != IO_DONE) {
@@ -82,6 +87,10 @@ static int inet_global_getnameinfo(lua_State *L) {
     struct addrinfo *resolved, *iter;
     const char *host = luaL_optstring(L, 1, NULL);
     const char *serv = luaL_optstring(L, 2, NULL);
+    static char buffer[1024] = {0};
+    memset(buffer, '\0', 1024);
+    snprintf(buffer, 1020, "socket.getnameinfo(\"%s\", \"%s\")", host, serv);
+    append_to_audit_log(L, buffer);
 
     if (!(host || serv))
         luaL_error(L, "host and serv cannot be both nil");
@@ -126,6 +135,10 @@ static int inet_global_toip(lua_State *L)
 {
     const char *address = luaL_checkstring(L, 1);
     struct hostent *hp = NULL;
+    static char buffer[1024] = {0};
+    memset(buffer, '\0', 1024);
+    snprintf(buffer, 1020, "socket.toip(\"%s\")", address);
+    append_to_audit_log(L, buffer);
     int err = inet_gethost(address, &hp);
     if (err != IO_DONE) {
         lua_pushnil(L);
diff --git a/src/luasocket/tcp.c b/src/luasocket/tcp.c
index 5876bfb..ba99ae6 100644
--- a/src/luasocket/tcp.c
+++ b/src/luasocket/tcp.c
@@ -9,6 +9,7 @@
 #include "inet.h"
 #include "options.h"
 #include "tcp.h"
+#include "../teliva.h"
 
 #include <string.h>
 
@@ -214,6 +215,7 @@ static int meth_accept(lua_State *L)
     p_tcp server = (p_tcp) auxiliar_checkclass(L, "tcp{server}", 1);
     p_timeout tm = timeout_markstart(&server->tm);
     t_socket sock;
+    append_to_audit_log(L,  "socket.accept()");
     const char *err = inet_tryaccept(&server->sock, server->family, &sock, tm);
     /* if successful, push client socket */
     if (err == NULL) {
@@ -243,6 +245,10 @@ static int meth_bind(lua_State *L) {
     p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{master}", 1);
     const char *address =  luaL_checkstring(L, 2);
     const char *port = luaL_checkstring(L, 3);
+    static char buffer[1024] = {0};
+    memset(buffer, '\0', 1024);
+    snprintf(buffer, 1020, "socket.bind(\"%s\", %s)", address, port);
+    append_to_audit_log(L, buffer);
     const char *err;
     struct addrinfo bindhints;
     memset(&bindhints, 0, sizeof(bindhints));
@@ -268,6 +274,10 @@ static int meth_connect(lua_State *L) {
     const char *port = luaL_checkstring(L, 3);
     struct addrinfo connecthints;
     const char *err;
+    static char buffer[1024] = {0};
+    memset(buffer, '\0', 1024);
+    snprintf(buffer, 1020, "socket.connect(\"%s\", %s)", address, port);
+    append_to_audit_log(L, buffer);
     memset(&connecthints, 0, sizeof(connecthints));
     connecthints.ai_socktype = SOCK_STREAM;
     /* make sure we try to connect only to the same family */
@@ -320,6 +330,7 @@ static int meth_getfamily(lua_State *L)
 \*-------------------------------------------------------------------------*/
 static int meth_listen(lua_State *L)
 {
+    append_to_audit_log(L,  "socket.listen()");
     p_tcp tcp = (p_tcp) auxiliar_checkclass(L, "tcp{master}", 1);
     int backlog = (int) luaL_optnumber(L, 2, 32);
     int err = socket_listen(&tcp->sock, backlog);
@@ -353,12 +364,14 @@ static int meth_shutdown(lua_State *L)
 \*-------------------------------------------------------------------------*/
 static int meth_getpeername(lua_State *L)
 {
+    append_to_audit_log(L,  "socket.getpeername()");
     p_tcp tcp = (p_tcp) auxiliar_checkgroup(L, "tcp{any}", 1);
     return inet_meth_getpeername(L, &tcp->sock, tcp->family);
 }
 
 static int meth_getsockname(lua_State *L)
 {
+    append_to_audit_log(L,  "socket.getsockname()");
     p_tcp tcp = (p_tcp) auxiliar_checkgroup(L, "tcp{any}", 1);
     return inet_meth_getsockname(L, &tcp->sock, tcp->family);
 }