Skip to content

Releases: rognlien/srv

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 15:52
30f09d5

Breaking change: srv now listens on 127.0.0.1 only, so other machines on the network can no longer connect by default. To open the pages from a phone or another computer, choose the address with the new -b, --bind option:

srv -b 0.0.0.0    # every IPv4 address
srv -b ::         # every IPv4 and IPv6 address, as before

This release also hardens the server:

  • Named pipes and devices are no longer served. Opening a named pipe used to hang a connection, and with it the idle timeout.
  • Requests with control characters or a NUL byte in the path are rejected. This closes a response-header injection and an escape-sequence injection into the log.
  • Clients get 10 seconds to send a request, and are dropped if they stop reading for 30 seconds.
  • At most 128 connections are handled at once; further connections get 503.
  • A file that grows while being sent no longer produces a body longer than its Content-Length.
  • Requests such as //docs no longer redirect to another host.

Release archives now come with a build provenance attestation. Check one with:

gh attestation verify srv-v0.7.0-<platform>.tar.gz --repo rognlien/srv

What's Changed

  • Serve only regular files by @rognlien in #1
  • Close the connection when its thread cannot start by @rognlien in #2
  • Reject request lines with control characters by @rognlien in #3
  • Reject NUL bytes in request paths by @rognlien in #4
  • Collapse leading slashes in directory redirects by @rognlien in #5
  • Format log timestamps with localtime_r by @rognlien in #6
  • Send no more of a file than its Content-Length by @rognlien in #7
  • Give clients 10 seconds in total to send the request head by @rognlien in #8
  • Drop clients that stop reading for 30 seconds by @rognlien in #9
  • Limit the server to 128 connections at a time by @rognlien in #10
  • Pin GitHub Actions to commit SHAs by @rognlien in #11
  • Add unit tests by @rognlien in #12
  • Add end-to-end tests by @rognlien in #13
  • Keep the pinned actions up to date with Dependabot by @rognlien in #15
  • Attest the build provenance of release archives by @rognlien in #16
  • Document the connection limits, timeouts and served files by @rognlien in #17
  • Run the tests in CI by @rognlien in #14
  • Listen on localhost by default and add -b to choose the address by @rognlien in #22
  • Bump actions/checkout from 5.1.0 to 7.0.1 by @dependabot[bot] in #18
  • Bump actions/setup-java from 5.7.0 to 6.0.1 by @dependabot[bot] in #19
  • Bump actions/cache from 4.3.0 to 6.1.0 by @dependabot[bot] in #20
  • Bump gradle/actions/setup-gradle from 5.0.2 to 6.4.0 by @dependabot[bot] in #21
  • Use setup-gradle 6.4.0 in the tests too by @rognlien in #23

New Contributors

Full Changelog: v0.6.0...v0.7.0

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 29 Sep 19:18

Breaking change: -c now sets the content type of a command's output, such as -c application/json. Commands are run with -x, --exec instead:

srv -x tail -f app.log
srv -c application/json -x ./report.sh

srv -c with a value that is not a content type, as in the old srv -c date, is rejected with an error.

Full Changelog: v0.5.1...v0.6.0

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 28 Sep 23:15

Full Changelog: v0.5.0...v0.5.1

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 23:05

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 28 Sep 14:10

Full Changelog: v0.3.3...v0.4.0

v0.3.3

Choose a tag to compare

@github-actions github-actions released this 28 Sep 13:48

Full Changelog: v0.3.2...v0.3.3

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 27 Sep 21:42

Full Changelog: v0.3.1...v0.3.2

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 27 Sep 18:34

First public release. Install with brew install rognlien/tap/srv.