Commit Graph

141 Commits (7803e13adf1f7bab6c1004a659942a55d1ee085c)

Author SHA1 Message Date
Roberto Hueso Gómez 7803e13adf #915 Validate POST /hardware REST API parameters
This patch ensures that all required parameters are sent in the request.
2019-11-06 11:26:33 +01:00
Roberto Hueso Gómez 93028bd055 #915 Validate POST /refresh REST API parameters
This patch ensures that all required parameters are sent in the request.
2019-11-06 11:26:15 +01:00
Roberto Hueso Gómez bc1b958ceb #915 Validate POST /stop REST API parameters
This patch ensures that all required parameters are sent in the request.
2019-11-06 11:26:06 +01:00
Roberto Hueso Gómez 0a41d5d02f #915 Validate POST /reboot REST API parameters
This patch ensures that all required parameters are sent in the request.
2019-11-06 11:25:54 +01:00
Roberto Hueso Gómez acf9cdf8d1 #915 Validate POST /poweroff REST API parameters
This patch ensures that all required parameters are sent in the request.
2019-11-06 11:25:24 +01:00
Roberto Hueso Gómez 8901505bb5 #915 Validate POST /session REST API parameters
This patch ensures that all required parameters are sent in the request.
2019-11-06 11:24:24 +01:00
Roberto Hueso Gómez 61059e1b2e #915 Validate POST /shell/output REST API parameters
This patch ensures that all required parameters are sent in the request.
2019-11-06 11:22:35 +01:00
Roberto Hueso Gómez b403c7ae6c #915 Validate POST /shell/run REST API parameters
This patch ensures that all required parameters are sent in the request.
2019-11-06 11:17:19 +01:00
Roberto Hueso Gómez ec5fe704cc #915 Validate POST /wol REST API parameters
This patch ensures that all required parameters are sent in the request.
2019-11-06 11:16:59 +01:00
Roberto Hueso Gómez 54ecdbbdf1 #915 Validate POST /clients parameters
This patch adds og_msg_params_validate function as well as some flags that can
be used to validate parameters of a REST API request.

This patch ensures that all required parameters are sent in the request.
2019-11-06 11:16:36 +01:00
Javier Sánchez Parra 8082efd6de #924 Always check the result of a command to avoid errors
Irina reports that if you try to restore an image without success
(for example: the disk does not have enough space), the database changes
as if no error would happen. So you see the computer in the WebConsole
with an image/OS that, actually, does not have.

The bug is caused because the function respuestaEstandar only checks
the result of a command if it has a session. So the problem is that the
commands which use respuestaEstandar without a session can return an
error, but the ogAdmServer always works as no error would occur.

This commit changes the behaviour of respuestaEstadar to always check
the result of a command, whether it has a session or not.
2019-11-04 15:09:04 +01:00
Roberto Hueso Gómez 723f110308 #915 Use og_cmd_legacy_send in og_cmd_run_schedule for ogAdmServer
This patch simplifies the og_cmd_run_schedule function by calling
og_cmd_legacy_send.
2019-10-29 14:22:08 +01:00
Roberto Hueso Gómez 2f7e9da5ab #915 Add POST "run/schedule" command to REST API in ogAdmServer
This patch implements the command "run/schedule" that kicks in pending commands
execution.

Request:

    POST /run/schedule
    {
        "clients": ["192.168.56.11"]
    }

Reply:
    200 OK

This patch also adds a simple test to cover correction of the command.
2019-10-25 14:12:09 +02:00
Javier Sánchez Parra 61bbcd9251 #915 Fix POST "software" cmd in ogAdmServer and web
This patch adds the parameters "disk" and "partition" to
POST "software" command. This way the client can create a software
profile without failure.

New request:
	POST /software
	{
	   "clients":[
	      "192.168.56.12"
	   ],
	   "disk":"1",
	   "partition":"1"
	}
Reply:
	200 OK
2019-10-11 13:45:15 +02:00
Javier Sánchez Parra d52c6d085a #915 Add POST "image/restore/incremental" command to REST API in ogAdmServer
This patch implements the command "image/restore/incremental" that provides
partitioning and formatting functionality.

Request:
	POST /image/restore/incremental
	{
	   "clients":[
	      "192.168.56.11",
	      "192.168.56.12"
	   ],
	   "disk":"1",
	   "partition":"1",
	   "id":"8",
	   "name":"test",
	   "repository":"192.168.56.10",
	   "profile":"25",
	   "type":"MULTICAST_9000:full-duplex:239.194.2.11:70M:4:60",
	   "sync_params":{
	      "diff_id":"10",
	      "diff_name":"testdiff",
	      "path":"",
	      "method":"1",
	      "sync":"2",
	      "diff":"0",
	      "remove":"1",
	      "compress":"0",
	      "cleanup":"0",
	      "cache":"0",
	      "cleanup_cache":"0",
	      "remove_dst":"0"
	   }
	}
Reply:
	200 OK
2019-10-11 11:57:08 +02:00
Roberto Hueso Gómez 43c7da8a72 #915 Add POST "image/create/incremental" command to REST API in ogAdmServer
This patch implements the command "image/create/incremental".

Request:
    {"clients":["192.168.56.11"],
     "disk":"1",
     "partition":"1",
     "id":"3",
     "name":"basica1",
     "repository":"192.168.56.10",
     "sync_params":{"sync":"1",
                    "path":"",
                    "diff":"0",
                    "diff_id":"4",
                    "diff_name":"p2",
                    "remove":"1",
                    "compress":"0",
                    "cleanup":"0",
                    "cache":"0",
                    "cleanup_cache":"0",
                    "remove_dst":"0"
                    }
    }

Reply:
    200 OK
2019-10-11 11:57:08 +02:00
Javier Sánchez Parra f61fd9a488 #915 Add POST "image/restore/basic" command to REST API in ogAdmServer
This patch implements the command "image/restore/basic" that provides
partitioning and formatting functionality.

Request:
	POST /image/restore/basic
	{
	   "clients":[
	      "192.168.56.11"
	   ],
	   "disk":"1",
	   "partition":"1",
	   "id":"9",
	   "name":"test",
	   "repository":"192.168.56.10",
	   "profile":"17",
	   "type":"UNICAST",
	   "sync_params":{
	      "path":"",
	      "method":"1",
	      "sync":"1",
	      "diff":"0",
	      "remove":"1",
	      "compress":"0",
	      "cleanup":"0",
	      "cache":"0",
	      "cleanup_cache":"0",
	      "remove_dst":"0"
	   }
	}
Reply:
	200 OK
2019-10-09 15:27:59 +02:00
Javier Sánchez Parra 01e77f4cb2 #915 Add POST "image/create/basic" command to REST API in ogAdmServer
This patch implements the command "image/create/basic" that provides
partitioning and formatting functionality.

Request:
	POST /image/create/basic
	{
	   "clients":[
	      "192.168.56.11"
	   ],
	   "disk":"1",
	   "partition":"1",
	   "code":"131",
	   "id":"8",
	   "name":"debianbasica",
	   "repository":"192.168.56.10",
	   "sync_params":{
	      "sync":"1",
	      "diff":"0",
	      "remove":"1",
	      "compress":"0",
	      "cleanup":"0",
	      "cache":"0",
	      "cleanup_cache":"0",
	      "remove_dst":"0"
	   }
	}
Reply:
	200 OK
2019-10-08 14:00:47 +02:00
Roberto Hueso Gómez e3af7eed4d #915 Improve error management for og_json_parse_partition()
Validate json input and return an error code when parsing is not correct.
2019-10-07 12:54:53 +02:00
Roberto Hueso Gómez dbcc83daa5 #915 Add POST "image/setup" command to REST API in ogAdmServer
This patch implements the command "image/setup" that provides partitioning and
formatting functionality.

Request:
	POST /image/setup
	{ "clients" : [ "192.168.56.11" ], "disk" : "1", "cache" : "1", "cache_size" : "0",
	"partition_setup":
	[{"partition": "1", "code": "LINUX", "filesystem": "EMPTY", "size": "498688", "format": "0"},
	 {"partition": "2", "code": "LINUX-SWAP", "filesystem": "EMPTY", "size": "199987", "format": "0"},
	 {"partition": "3", "code": "LINUX", "filesystem": "EMPTY", "size": "31053824", "format": "0"},
	 {"partition": "4", "code": "EMPTY", "filesystem": "EMPTY", "size": "0", "format": "0"}]}
Reply:
	200 OK
2019-10-07 11:14:41 +02:00
OpenGnSys Support Team e6cfd83323 #915 Remove Apagar, CrearImagen, RestaurarImagen, InventarioHardware, InventarioSoftware
These socketHidra calls have been replaced by the REST API, remove them.
2019-10-03 11:34:02 +02:00
Roberto Hueso Gómez 1dde02e1ab #915: Add POST /image/restore command to REST API in ogAdmServer
This patch implements the command "image/create" that creates an image
in a client.

	Request:
		POST /image/restore
		{ "clients" : [ "192.168.56.11" ], "disk" : "1", "partition" : "1", "name" : "test", "repository" : "192.168.56.10", "type" : "UNICAST", "filesystem": "1", "image_id": "1"}
	Reply:
		200 OK
2019-10-01 12:56:10 +02:00
Roberto Hueso Gómez c87a1dbdfb #915: add og_json_parse_string() and use it
This patch avoids repeating similar code by using just one json parser.
2019-10-01 12:56:10 +02:00
Roberto Hueso Gómez 1a8ada191f #915: Add POST /image/create command to REST API in ogAdmServer
This patch implements the command "image/create" that creates an image
in a client.

    Request:
            POST /image/create
	    { "clients" : [ "192.168.2.1" ], "disk" : "1", "partition" : "1", "code" : "1", "id" : "1", "name" : "test", "repository" : "192.168.2.2" }
    Reply:
            200 OK
2019-10-01 12:56:10 +02:00
Roberto Hueso Gómez 7bdc8fdf75 #915: Removes braces for single statement if branch
Just a cleanup.
2019-10-01 12:56:10 +02:00
Roberto Hueso Gómez 8b1beddbe4 #915: Fix file descriptor leak in og_socket_server_init() from exit path
Call close() to release the socket in the event of an error.

infer says:

sources/ogAdmServer.cpp:1244: error: RESOURCE_LEAK
  resource acquired by call to `socket()` at line 1236, column 6 is not released after line 1244, column 3.
  1242.   			 sizeof(on));
  1243.   	if (res < 0) {
  1244. > 		syslog(LOG_ERR, "cannot set broadcast socket\n");
  1245.   		return false;
  1246.   	}

Not a real problem since OS releases process resources if the server
cannot bind to the port, but just to be correct here.
2019-09-19 16:06:07 +02:00
Roberto Hueso Gómez c1c89e196c #915: Return 400 status code in POST methods when no payload is attached
If no payload is attached to method that requires a payload, then the API
returns a 400 status code (following RFC 7231) instead of the previous 404.

test_0001_get_clients.py is also modified to fit the new status code.
2019-09-19 16:06:03 +02:00
Javier Sánchez Parra 36ad0061d7 #915 check HTTP Content-Length size
If Content-Length is too large ogAdmServer, close the connection..
2019-09-10 11:10:34 +02:00
Javier Sánchez Parra 64e653773e #915 fix missing null-terminated string
This patch changes the number of characters stored in cli->auth_token
from 64 to 63. This way the array has the last position available to
store the null character.
2019-09-05 13:14:33 +02:00
OpenGnSys Support Team 3e8fcf0b40 #915 do not bail out when failing to send message to stale clients
Clients might enter power saving mode, hence, closing the connection
with the server. When the server sends a request to refresh its state,
if they are gone, do not break the iteration over the list of clients.
2019-09-02 13:36:50 +02:00
Javier Sánchez Parra 3de93a9503 #559 fix out of bound array access
This patch change the size of the array ptrPar from 6 to 7.

cppcheck says:

[sources/ogAdmServer.cpp:598]: (error) Array 'ptrCfg[6]' accessed at index 6, which is out of bounds.
2019-08-28 18:39:33 +02:00
OpenGnSys Support Team 7c67487ab3 #915 trim unknown command syslog error to the initial 32 bytes
Aug 28 17:12:33 server ogAdmServer[10110]: 127.0.0.1:54640 POST /nonexistent HTTP/1.1^M Host ...
Aug 28 17:12:33 server ogAdmServer[10110]: unknown command: nonexistent HTTP/1.1^M Host: loca ...
2019-08-28 17:31:48 +02:00
OpenGnSys Support Team a12af6a6e1 #915 add syslog error when HTTP request processing fails 2019-08-28 17:22:19 +02:00
OpenGnSys Support Team 15685e618f #915 add og_server_internal_error()
This function sends a 500 HTTP error to client.
2019-08-28 17:22:12 +02:00
OpenGnSys Support Team 84a25639b3 #915 add syslog debugging for HTTP request
Display initial 32 bytes of the HTTP request.
2019-08-28 17:22:05 +02:00
OpenGnSys Support Team 20dcb0a906 #915 close connection to REST API if request is too long
If REST API request length is >= 4096 bytes, close the connection.
2019-08-28 17:16:01 +02:00
OpenGnSys Support Team 881f532ee1 #915 add OG_CLIENTS_MAX definition
This definition specifies the maximum number of clients, that is set up
to 4096.
2019-08-28 17:15:49 +02:00
OpenGnSys Support Team e80c85fbff #915 set maximum REST API response to 64 Kbytes
The existing 4 Kbytes might not be enough to store the results of the
GET /clients request, extend it up to 64 Kbytes.
2019-08-28 17:15:35 +02:00
OpenGnSys Support Team 7e6ba45f95 #915 json_dump_callback() takes flags as a parameter
Not as the buffer size, this leads to incorrectly printing the json
output since this might set on the JSON_EMBED flag on libjansson >= 2.10
2019-08-28 17:15:14 +02:00
OpenGnSys Support Team ba2e868019 #915 allow up to 4096 clients from REST API
Raise maximum number of clients to 4096.
2019-08-28 11:50:11 +02:00
Javier Sánchez Parra 7dc8fdbaff #915 reply with HTTP 405 when the method is incorrect
When a command/request exists but the method is not correct returns 405
error code.
2019-08-27 14:32:13 +02:00
OpenGnSys Support Team fbc30b2669 #915 internal error response if reply is too long
In case reply is too long, return 501 internal server error.
2019-08-27 12:02:57 +02:00
OpenGnSys Support Team 429bd3665c #891 fix crash in wol command
Irina reports a crash in the wol command on Ubuntu 18.04 and gcc 7.4.0:

==9542== Process terminating with default action of signal 6 (SIGABRT)
==9542==    at 0x6C37E97: raise (raise.c:51)
==9542==    by 0x6C39800: abort (abort.c:79)
==9542==    by 0x6C82896: __libc_message (libc_fatal.c:181)
==9542==    by 0x6D2DCD0: __fortify_fail_abort (fortify_fail.c:33)
==9542==    by 0x6D2DC91: __stack_chk_fail (stack_chk_fail.c:29)
==9542==    by 0x111DB1: WakeUp(int, char*, char*, char*) (ogAdmServer.cpp:1390)
==9542==    by 0x11199F: Levanta(char**, char**, int, char*) (ogAdmServer.cpp:1251)
==9542==    by 0x118372: og_cmd_wol(json_t*, og_msg_params*) (ogAdmServer.cpp:3580)
==9542==    by 0x119B91: og_client_state_process_payload_rest(og_client*) (ogAdmServer.cpp:4030)
==9542==    by 0x11A4E9: og_client_read_cb(ev_loop*, ev_io*, int) (ogAdmServer.cpp:4212)
==9542==    by 0x5EA1D72: ev_invoke_pending (in /usr/lib/x86_64-linux-gnu/libev.so.4.0.0)
==9542==    by 0x5EA53DD: ev_run (in /usr/lib/x86_64-linux-gnu/libev.so.4.0.0)

sscanf() returns integers (32-bits) instead of array of 8-bits.
2019-07-29 12:37:54 +02:00
Javier Sánchez Parra 66001f0a6c #915 returns 401 when incorrect authentication happens
ogAdmServer REST API now meets the starndar RFC 7235 when incorrect auth
happens.

og_client_not_authorized() now sends "401 Unauthorized" and
"WWW-Authenticate" instead of 404.
2019-07-15 09:51:53 +02:00
Javier Sánchez Parra a927e14133 #559 fixes memory leak in tomaConfiguracion()
Calls fclose() after fopen() to release memory.
2019-07-15 09:44:42 +02:00
OpenGnSys Support Team b4a9fddf30 #915 add POST software command to REST API in ogAdmServer
This patch implements the command "software" that fetches the software
configuration from the clients.

Request:
        POST /software
        {"clients" : [ "192.168.2.1", "192.168.2.2" ]}
Reply:
        200 OK

This allows to refresh the software inventory from clients.
2019-07-03 02:56:07 +02:00
OpenGnSys Support Team 6b30dbc65c #915 add POST hardware command to REST API in ogAdmServer
This patch implements the command "hardware" that fetches the hardware
configuration from the clients.

Request:
	POST /hardware
        {"clients" : [ "192.168.2.1", "192.168.2.2" ]}
Reply:
        200 OK

This allows to refresh the hardware inventory from clients.
2019-07-03 02:56:07 +02:00
OpenGnSys Support Team fd305405b7 #915 add support for HTTP Authorization
Add APITOKEN= field to ogAdmServer.cfg to specify the REST API key.
2019-06-24 13:42:25 +02:00
Javier Sánchez Parra 8322fd6acb #896 Fix memory leak in wake_up_broadcast()
call freeifaddrs() after getifaddrs() to release memory.
2019-06-12 11:01:33 +02:00
OpenGnSys Support Team eb6aa82cd4 #915 validate message length based on announced Content-Length field
Otherwise, TCP segmentation leads to handle an incomplete payload, this
problems manifests with errors when parsing the json body.
2019-05-31 00:20:05 +02:00