]> prime8.dev >> repos - ttyd.git/commitdiff
server: replace --readonly with --writable
authorShuanglei Tao <tsl0922@gmail.com>
Tue, 9 May 2023 10:41:54 +0000 (18:41 +0800)
committerShuanglei Tao <tsl0922@gmail.com>
Tue, 9 May 2023 10:43:26 +0000 (18:43 +0800)
Dockerfile
Dockerfile.alpine
README.md
man/ttyd.1
man/ttyd.man.md
src/protocol.c
src/server.c
src/server.h

index 03603f479d21b15cdb765105f673c23a6d8e4378..649bc327c21dc3c81877cd0d8c252d0e5d97cea2 100644 (file)
@@ -8,4 +8,4 @@ EXPOSE 7681
 WORKDIR /root
 
 ENTRYPOINT ["/usr/bin/tini", "--"]
-CMD ["ttyd", "bash"]
+CMD ["ttyd", "-W", "bash"]
index 844b53c4a2f4569f18a2dc5430efeb59f3c28f83..41378a1dcab2c1b49469d92d6c6a8b08a83c9965 100644 (file)
@@ -8,4 +8,4 @@ EXPOSE 7681
 WORKDIR /root
 
 ENTRYPOINT ["/sbin/tini", "--"]
-CMD ["ttyd", "bash"]
+CMD ["ttyd", "-W", "bash"]
index 1dcd6cb51f84fd4258060512be10e04d8591f3b1..34dad77079ee13142615fed0e96eb3d9368575ce 100644 (file)
--- a/README.md
+++ b/README.md
@@ -70,7 +70,7 @@ OPTIONS:
     -g, --gid               Group id to run with
     -s, --signal            Signal to send to the command when exit it (default: 1, SIGHUP)
     -a, --url-arg           Allow client to send command line arguments in URL (eg: http://localhost:7681?arg=foo&arg=bar)
-    -R, --readonly          Do not allow clients to write to the TTY
+    -W, --writable          Allow clients to write to the TTY (readonly by default)
     -t, --client-option     Send option to client (format: key=value), repeat to add more options
     -T, --terminal-type     Terminal type to report, default: xterm-256color
     -O, --check-origin      Do not allow websocket connection from different origin
index 729b548ad750585ef5ae9bf703c17b8885e9c1f2..11d9dd749e1ac367913eac10d2d15a327313217b 100644 (file)
@@ -78,8 +78,8 @@ Cross platform: macOS, Linux, FreeBSD/OpenBSD, OpenWrt/LEDE, Windows
       Allow client to send command line arguments in URL (eg: http://localhost:7681?arg=foo&arg=bar)
 
 .PP
--R, --readonly
-      Do not allow clients to write to the TTY
+-R, --writable
+      Allow clients to write to the TTY (readonly by default)
 
 .PP
 -t, --client-option 
index 1e59d13b5fc889b9cbb589c5a25a333601fd912b..8ff9c424049d172b6b789d3dd7ab44ebba5b482b 100644 (file)
@@ -50,8 +50,8 @@ ttyd 1 "September 2016" ttyd "User Manual"
   -a, --url-arg
       Allow client to send command line arguments in URL (eg: http://localhost:7681?arg=foo&arg=bar)
 
-  -R, --readonly
-      Do not allow clients to write to the TTY
+  -W, --writable
+      Allow clients to write to the TTY (readonly by default)
 
   -t, --client-option <key=value>
       Send option to client (format: key=value), repeat to add more options, see **CLIENT OPTIONS** for details
index cc0945b62f498eaf5471af3ab1e6cbbcffafa6c5..3a53f96f9edafbe75a205e465ddc37c0f7bafa61 100644 (file)
@@ -306,7 +306,7 @@ int callback_tty(struct lws *wsi, enum lws_callback_reasons reason, void *user,
 
       switch (command) {
         case INPUT:
-          if (server->readonly) break;
+          if (!server->writable) break;
           int err = pty_write(pss->process, pty_buf_init(pss->buffer + 1, pss->len - 1));
           if (err) {
             lwsl_err("uv_write: %s (%s)\n", uv_err_name(err), uv_strerror(err));
index 318932dedf64ac006491f489b2c78192a856ce70..541f8d4499d9acb4484ce9ddffd026323148f885 100644 (file)
@@ -71,7 +71,7 @@ static const struct option options[] = {{"port", required_argument, NULL, 'p'},
                                         {"ssl-key", required_argument, NULL, 'K'},
                                         {"ssl-ca", required_argument, NULL, 'A'},
                                         {"url-arg", no_argument, NULL, 'a'},
-                                        {"readonly", no_argument, NULL, 'R'},
+                                        {"writable", no_argument, NULL, 'W'},
                                         {"terminal-type", required_argument, NULL, 'T'},
                                         {"client-option", required_argument, NULL, 't'},
                                         {"check-origin", no_argument, NULL, 'O'},
@@ -82,7 +82,7 @@ static const struct option options[] = {{"port", required_argument, NULL, 'p'},
                                         {"version", no_argument, NULL, 'v'},
                                         {"help", no_argument, NULL, 'h'},
                                         {NULL, 0, 0, 0}};
-static const char *opt_string = "p:i:U:c:H:u:g:s:w:I:b:P:6aSC:K:A:Rt:T:Om:oBd:vh";
+static const char *opt_string = "p:i:U:c:H:u:g:s:w:I:b:P:6aSC:K:A:Wt:T:Om:oBd:vh";
 
 static void print_help() {
   // clang-format off
@@ -102,7 +102,7 @@ static void print_help() {
           "    -s, --signal            Signal to send to the command when exit it (default: 1, SIGHUP)\n"
           "    -w, --cwd               Working directory to be set for the child program\n"
           "    -a, --url-arg           Allow client to send command line arguments in URL (eg: http://localhost:7681?arg=foo&arg=bar)\n"
-          "    -R, --readonly          Do not allow clients to write to the TTY\n"
+          "    -W, --writable          Allow clients to write to the TTY (readonly by default)\n"
           "    -t, --client-option     Send option to client (format: key=value), repeat to add more options\n"
           "    -T, --terminal-type     Terminal type to report, default: xterm-256color\n"
           "    -O, --check-origin      Do not allow websocket connection from different origin\n"
@@ -148,10 +148,10 @@ static void print_config() {
   if (server->auth_header != NULL) lwsl_notice("  auth header: %s\n", server->auth_header);
   if (server->check_origin) lwsl_notice("  check origin: true\n");
   if (server->url_arg) lwsl_notice("  allow url arg: true\n");
-  if (server->readonly) lwsl_notice("  readonly: true\n");
   if (server->max_clients > 0) lwsl_notice("  max clients: %d\n", server->max_clients);
   if (server->once) lwsl_notice("  once: true\n");
   if (server->index != NULL) lwsl_notice("  custom index.html: %s\n", server->index);
+  if (!server->writable) lwsl_notice("The --writable option is not set, will start in readonly mode");
 }
 
 static struct server *server_new(int argc, char **argv, int start) {
@@ -324,7 +324,7 @@ int main(int argc, char **argv) {
   info.max_http_header_data = 65535;
 
   int debug_level = LLL_ERR | LLL_WARN | LLL_NOTICE;
-  char iface[128] = "127.0.0.1";
+  char iface[128] = "";
   char socket_owner[128] = "";
   bool browser = false;
   bool ssl = false;
@@ -354,8 +354,8 @@ int main(int argc, char **argv) {
       case 'a':
         server->url_arg = true;
         break;
-      case 'R':
-        server->readonly = true;
+      case 'W':
+        server->writable = true;
         break;
       case 'O':
         server->check_origin = true;
index 794965af5402d1c813037e80ad696e777e1494f1..4a659b0ed8cf99cee02c23a66be36ea7b08975ba 100644 (file)
@@ -74,7 +74,7 @@ struct server {
   int sig_code;            // close signal
   char sig_name[20];       // human readable signal string
   bool url_arg;            // allow client to send cli arguments in URL
-  bool readonly;           // whether not allow clients to write to the TTY
+  bool writable;           // whether clients to write to the TTY
   bool check_origin;       // whether allow websocket connection from different origin
   int max_clients;         // maximum clients to support
   bool once;               // whether accept only one client and exit on disconnection