]> prime8.dev >> repos - ttyd.git/commitdiff
Add support for the --readonly option
authorShuanglei Tao <tsl0922@gmail.com>
Mon, 10 Oct 2016 14:08:17 +0000 (22:08 +0800)
committerShuanglei Tao <tsl0922@gmail.com>
Mon, 10 Oct 2016 14:08:17 +0000 (22:08 +0800)
README.md
src/protocol.c
src/server.c
src/server.h

index 117cf00de9cd29848b08b33c0a5cb2ff3899501a..e44aa53736899bcf181153a1e7e43a04b6c82ed6 100644 (file)
--- a/README.md
+++ b/README.md
@@ -65,6 +65,7 @@ OPTIONS:
     --gid, -g               Group id to run with
     --signal, -s            Signal to send to the command when exit it (default: SIGHUP)
     --reconnect, -r         Time to reconnect for the client in seconds (default: 10)
+    --readonly, -R          Do not allow clients to write to the TTY
     --once, -o              Accept only one client and exit on disconnection
     --ssl, -S               Enable ssl
     --ssl-cert, -C          Ssl certificate file path
index 7218c86102239e63337a91dd393eb8d4da963c7f..5e68dcc517561e280ff724e9d08c8e7bfb41ed5f 100644 (file)
@@ -258,6 +258,8 @@ callback_tty(struct lws *wsi, enum lws_callback_reasons reason,
 
             switch (command) {
                 case INPUT:
+                    if (server->readonly)
+                        return 0;
                     if (write(client->pty, client->buffer + 1, client->len - 1) < client->len - 1) {
                         lwsl_err("write INPUT to pty\n");
                         return -1;
index 2f5b41218e6aaec0f93ad742148e3a074f97062f..a401409fe5448204922147f6e44a3db1923f7706 100644 (file)
@@ -33,13 +33,14 @@ static const struct option options[] = {
         {"ssl-cert", required_argument, NULL, 'C'},
         {"ssl-key", required_argument, NULL, 'K'},
         {"ssl-ca", required_argument, NULL, 'A'},
+        {"readonly", no_argument, NULL, 'R'},
         {"once", no_argument, NULL, 'o'},
         {"debug", required_argument, NULL, 'd'},
         {"version", no_argument, NULL, 'v'},
         {"help", no_argument, NULL, 'h'},
         {NULL, 0, 0, 0}
 };
-static const char *opt_string = "p:i:c:u:g:s:r:aSC:K:A:od:vh";
+static const char *opt_string = "p:i:c:u:g:s:r:aSC:K:A:Rod:vh";
 
 void print_help() {
     fprintf(stderr, "ttyd is a tool for sharing terminal over the web\n\n"
@@ -55,6 +56,7 @@ void print_help() {
                     "    --gid, -g               Group id to run with\n"
                     "    --signal, -s            Signal to send to the command when exit it (default: SIGHUP)\n"
                     "    --reconnect, -r         Time to reconnect for the client in seconds (default: 10)\n"
+                    "    --readonly, -R          Do not allow clients to write to the TTY\n"
                     "    --once, -o              Accept only one client and exit on disconnection\n"
                     "    --ssl, -S               Enable ssl\n"
                     "    --ssl-cert, -C          Ssl certificate file path\n"
@@ -202,6 +204,9 @@ main(int argc, char **argv) {
             case 'd':
                 debug_level = atoi(optarg);
                 break;
+            case 'R':
+                server->readonly = true;
+                break;
             case 'o':
                 server->once = true;
                 break;
@@ -322,6 +327,8 @@ main(int argc, char **argv) {
     lwsl_notice("  start command: %s\n", server->command);
     lwsl_notice("  reconnect timeout: %ds\n", server->reconnect);
     lwsl_notice("  close signal: %s (%d)\n", server->sig_name, server->sig_code);
+    if (server->readonly)
+        lwsl_notice("  readonly: true\n");
     if (server->once)
         lwsl_notice("  once: true\n");
 
index 8c197e86c538e0cadfe3edada80c2ec453fe4fe9..c985b07b5d7b9047860b321a59d4f66b37a372d0 100644 (file)
@@ -71,6 +71,7 @@ struct tty_server {
     char **argv;                              // command with arguments
     int sig_code;                             // close signal
     char *sig_name;                           // human readable signal string
+    bool readonly;                            // whether not allow clients to write to the TTY
     bool once;                                // whether accept only one client and exit on disconnection
     pthread_mutex_t lock;
 };