1
0
mirror of https://gitlab.xiph.org/xiph/icecast-server.git synced 2024-09-22 04:15:54 -04:00
Commit Graph

1076 Commits

Author SHA1 Message Date
Joseph Wallace
a218055158 Move tag-parsing bail conditions to top for clarity. 2016-03-27 12:29:23 -04:00
Joseph Wallace
78293f0485 Delete some debugging comments. 2016-03-27 12:29:06 -04:00
Joseph Wallace
dcbba0c600 Cleanup some signed-type issues in format-ebml.c 2016-03-27 12:29:06 -04:00
Philipp Schafft
9cae2ef646 Updated submodules 2016-03-27 13:16:23 +00:00
Joseph Wallace
788bd94eeb BUGFIX: Use a signed type for capturing the return value of client_read_bytes()
Signed-off-by: Marvin Scholz <epirat07@gmail.com>
2016-02-13 21:12:34 +01:00
Marvin Scholz
3a73f9c146 More hardening of XML output against invalid entities
This replaces the add node function with the one intended for text nodes
to prevent that invalid entities are not encoded and therefore could
break the XML output.

(See d739c65e54 and #2255)
2016-02-10 20:56:56 +01:00
Thomas B. Ruecker
4c57532e7b Added missing space to fix output 2016-02-10 08:15:48 +00:00
Marvin Scholz
37150fe020 Fix STATS legacy authentication
This fixes the issue that auth for STATS method always fails, by
adding stats method to legacy admin auth in cfgfile.c
2016-02-09 20:27:10 +01:00
Marvin Scholz
d739c65e54 Fix invalid entities in listclient xml
This fixes a bug where listener Referer or User-Agent strings containing
a sequence like `&T;` was not escaped properly and therefore made the
whole XML document invalid.
Injecting new XML nodes (<foo></foo>) was not possible, it seems in the
worse case all it could cause was that the XML failed to parse.

Fix #2255
2016-02-08 23:02:02 +01:00
Philipp Schafft
235527192c Merge branch 'webmKeyFrames' 2016-02-06 17:44:56 +00:00
Marvin Scholz
eecbc647b4 Fix handling of URIs in custom XSL loader
There was an error how URIs were handled in our custom XSL loader
that rewrites include URIs to point to admin dir if the include
is not found in the current dir.

The check for the file would not work if the path contains chars
that are usually escaped in URIs, like a space (%20), as we get
a already encoded version of that URI in the loader and did not
decode it before checking the existence of the file.

(Fix #2249)
2016-01-26 10:13:07 +01:00
Philipp Schafft
471cbaa60b Fix: remove tailing dots in URI.
This works around the problem that windows ignores tailing dots.
This way you could trick Icecast2 to send a XSLT file as plain text.

Please test.

Closes: #2247
2015-12-24 00:38:11 +00:00
Joseph Wallace
d196e75416 Convert ints used as boolean values into actual bools. 2015-12-19 15:32:37 -05:00
Joseph Wallace
1f6a0a497f Replace "long long"s with an appropriate type from <stdint.h> 2015-12-19 15:02:33 -05:00
Philipp Schafft
255af9e610 Fix: Moved <mime-types> into <paths>.
This moved the <mime-types> setting into <paths>. The code still
supports reading it from the root element but will warn the user
about this.

Also there seems to be no documentation about this setting.

Closes: #2164
2015-12-12 08:17:58 +00:00
Joseph Wallace
de004670c3 Be clearer about ebml_parse_sized_int's sign & endian behavior. 2015-12-01 02:21:24 -05:00
Philipp Schafft
d3370f3d1c Cleanup: unify util.c a bit with libshout. 2015-11-28 17:58:18 +00:00
Joseph Wallace
e6cb7e26ee Move ebml-private structure definitions out of header file. 2015-11-28 12:49:54 -05:00
Joseph Wallace
0d7448efc7 Change buffer-related sizes & indices to size_t or ssize_t, as applicable. 2015-11-28 12:49:45 -05:00
Joseph Wallace
8a09627d05 Fix type of copy_state in EBML parser to an enum variable. 2015-11-28 12:41:46 -05:00
Joseph Wallace
dc263858a4 Additional format_ebml.c comments. 2015-11-28 12:41:46 -05:00
Joseph Wallace
af238d9129 Move MKV element magic values into proper #define constants. 2015-11-28 12:41:46 -05:00
Joseph Wallace
d394a244f0 Bugfix: Cluster test could have read past the end of the input buffer.
Move the cluster test inside the space-to-read check with the other tests.
2015-11-28 12:41:46 -05:00
Joseph Wallace
9de8fe483d Remove spare whitespace on blank lines. 2015-11-28 12:41:46 -05:00
Joseph Wallace
e4258bfad3 Don't wait for video keyframes on audio-only streams. 2015-11-28 12:41:46 -05:00
Joseph Wallace
9cf4ed560c Probe SimpleBlocks to determine which clusters start with a keyframe. 2015-11-28 12:41:45 -05:00
Joseph Wallace
6e11db5de2 Probe Tracks section of header to identify the video track.
We'll sync keyframes on that track next commit.
2015-11-28 12:41:45 -05:00
Joseph Wallace
9899413839 Add parser for bodies of Integer elements. 2015-11-28 12:41:45 -05:00
Joseph Wallace
f461ff6763 Buffer clusters to have time to probe them for metadata, like keyframes. 2015-11-28 12:41:45 -05:00
Joseph Wallace
def5a4cf6c Implement EBML-aware parser.
* Loop over elements in input buffer.
* Most are literally copied with their contents without
  inspection into the header or data buffers as appropriate.
* Some only copy the element header, to allow inspecting
  children elements.
* Cluster elements are identified and used as sync points.

No probing is done for keyframes *yet*
2015-11-28 12:41:45 -05:00
Joseph Wallace
50c4984c78 Add functions to comprehend EBML tags. 2015-11-28 12:41:45 -05:00
Joseph Wallace
531d060d16 Adjust EBML parser writing protocol.
This will allow leaving unparsed data in the input buffer to wait for completion.
2015-11-28 12:41:45 -05:00
Joseph Wallace
13dc880d29 Yield sync point status from ebml_read directly.
This simplifies some fragile "was the last chunk a sync point?" logic.
2015-11-28 12:41:45 -05:00
Joseph Wallace
744b66c40e Make the state-machine nature of the EBML parser more evident. 2015-11-28 12:41:45 -05:00
Joseph Wallace
15e7fc6e4a Add comments & braces to format_ebml.c.
This should help make future changes to the code clearer.
2015-11-28 12:41:45 -05:00
Marvin Scholz
2ff8c50d3b Makefile: Fix commons include path 2015-11-28 17:15:42 +01:00
Marvin Scholz
d16e091e25 Update submodule for more deprecated Makefile INCLUDES fixes 2015-11-28 17:15:42 +01:00
Marvin Scholz
d3c1dafa7e Change deprecated INCLUDES variable in Makefile 2015-11-28 17:15:42 +01:00
Philipp Schafft
24bc25ec38 Cleanup: fixed some compiler warnings 2015-11-28 11:30:34 +00:00
Philipp Schafft
d51b9afc49 Cleanup: unify util.h a bit with libshout. 2015-11-28 10:51:50 +00:00
Philipp Schafft
32216013b2 Cleanup: unify util.c a bit with libshout. 2015-11-28 10:44:05 +00:00
Philipp Schafft
85b709da04 Merge branch 'matchfile' 2015-11-23 13:01:23 +00:00
Philipp Schafft
752b2f90fe Cleanup: mark constant loopup tables read only 2015-11-23 12:47:56 +00:00
Philipp Schafft
a650965cfd Cleanup: make util_base64_encode() useful for binary data. 2015-11-23 12:47:47 +00:00
Philipp Schafft
de48bdd13f Cleanup: Removed unused member host vom connection struct 2015-11-23 11:44:14 +00:00
Philipp Schafft
69cf9ad6c2 added <errno.h> as we use errno 2015-11-23 11:41:25 +00:00
Philipp Schafft
b7d0188e1d Update: updated submodules 2015-11-22 18:52:15 +00:00
Philipp Schafft
c0e895404e Cleanup: mark key as const (why wasn't it const already?) 2015-11-22 18:47:11 +00:00
Philipp Schafft
b55bae035d Update: Improved matchfile API
This adds support for allow-deny kind of rules with the matchfile API.

See: #2119
2015-11-22 18:47:06 +00:00
Philipp Schafft
d24dda61d0 Cleanup: moved ban and allow file support into generic implementation
ban and allow file support has been moved into a generic implementation
that can be re-used by later code such as proxy matching or other
blacklisting.
See: #1959
2015-11-22 18:47:00 +00:00
Philipp Schafft
3653a1f812 updated submodules 2015-11-19 10:47:08 +00:00
Philipp Schafft
8e2fe8a3f7 Fix: Handle mount=NULL in config_find_mount() correctly. 2015-11-11 12:18:15 +00:00
Philipp Schafft
f5d728d730 Fix: Include required headers 2015-08-10 08:54:21 +00:00
Marvin Scholz
16dac2505e Fix that global listener count could be negative under certain circumstances
This fixes a bug that could cause the global listener count of Icecast to
be negative. This was caused due to wrong handling of errors in the
format_prepare_headers function.

Fixes: #2199

Thanks a lot to Simeon Völkel (0xBD4E031CDB4043C9) for reporting
and investigating the bug.
2015-06-06 14:09:44 +02:00
Marvin Scholz
c35760cd50 Fix possible segfaults when header allocation fails
This fixes some possible segfaults that could happen if the header
(re)allocation fails.
2015-06-06 14:09:44 +02:00
Philipp Schafft
3d2ab9aec2 Fix: Handle case realloc() is used as free().
This (hopefully) corrects the usage of realloc() as free().
This patch is part of the series based on Denis Denisov's input.
2015-04-08 13:05:10 +00:00
Philipp Schafft
6605f4ddaa Fix: Let util_url_escape() handle NULL parameter.
This let util_url_escape() handle NULL passed as parameter.
In case the parameter is NULL it will also return NULL.

This patch also does some cleanup of the code such as migration
away from int and thus avoiding future failtures.

This is a re-apply of 3baa4e46aa
as git refuses to cherry-pick.
2015-04-08 10:25:25 +00:00
Philipp Schafft
c1f0eaff8a Fix: Fixed some smaller bugs such as leaks and performance improvements.
This is a first commit to correct minor problmes reported by
Denis Denisov. There is likely another commit to correct some more
such problems.

Thank you Denis Denisov.
2015-04-08 09:36:59 +00:00
Philipp Schafft
7402383448 Cleanup: move libcurl specifc code into curl.c
This cleans the libcurl usage up a bit. It moves common code used
to interact with libcurl into a single new file curl.[ch].

Notes:
* It does not alter any features nor fixes any bugs.
* Thew REVIEW about strdup(self->url) in event_url.c as been processed.
  According to the manpage for curl_easy_setopt()/CURLOPT_URL
  there is no need for us to copy.
* URL Auth as well as URL triggers have sent ICECAST_VERSION_STRING
  as User-Agent:, this has be corrected to what is set in the config
  file.
* As curl.c is now a single point for setting parameters all the TLS
  parameters should be reviewed and set (based on config).

Please test!
2015-04-08 07:44:36 +00:00
Philipp Schafft
a1f204c184 Cleanup: Renamed <kartoffelsalat> to <event-bindings>
The parent element for <event> was renamed from <kartoffelsalat>
to <event-bindings> as discussed on the mailinglist and on IRC.
2015-03-31 08:20:37 +00:00
Philipp Schafft
2661d4360e Cleanup: More space corrections 2015-03-31 08:14:42 +00:00
Philipp Schafft
8455dbde57 Cleanup: corrected a space 2015-03-31 08:03:28 +00:00
Philipp Schafft
bfbb8f207c Feature: playlist history for ICY based streams.
This patch adds support for history for ICY based streams.
Of cause this has the same limits for metedata as ICY has.

See: #766
2015-03-28 18:14:41 +00:00
Philipp Schafft
961453b0de Added config option for history size.
This adds a <max-history> config option to the <mount> section.
Default is a history size of 4.

See: #766
2015-03-28 17:34:35 +00:00
Philipp Schafft
06fe442c2d Fixed off-by-one error in playlist truncation.
The playlist truncation (may_tracks) was off by one.
This fixes the problem.
2015-03-28 17:33:09 +00:00
Philipp Schafft
5f77b35d14 Initial patch for playlist history support.
This allows to store a history of played songs along the source
object and report it as part of the status XML.

Additional work needs to be done to make this configurable.
Also format_mp3.c needs work to support this.

A generic song changed handler should be implemented to handle this
in a nice way.
That one should also be the point to call logging_playlist().

See: #766
2015-03-28 16:15:49 +00:00
Philipp Schafft
8d513db405 Added operation mode (omode) "strict".
This adds the operation mode "strict". It does not yet have
any specific features and alias the "normal" mode.
This change is mostly to make the setting of "strict" valid
so it can be used already.
2015-03-27 11:15:22 +00:00
Philipp Schafft
5dac23adda Renamed config file SSL references to TLS.
As we do not support any SSL version but TLS this renames
all TLS related config options. Docs still need to be updated.
Close still uses 'ssl' internally e.g. for variable names.
This should be changed on a later patch.
2015-03-27 11:08:50 +00:00
Thomas B. Ruecker
99e11adac3 Remove stray space that managed to sneak in 2015-03-01 17:11:31 +00:00
Thomas B. Ruecker
671c2366cf Fixed log messages and comments
* Reworded many log messages for better understanding.
 * Adjusted some version targets as we won't have a 2.4.2 release.
 * Added some FIXME comments
2015-03-01 16:55:27 +00:00
Thomas B. Ruecker
314aa9660d remove some spurious tabs and replace with spaces
Fix variable alignment if necessary.
2015-03-01 16:55:27 +00:00
Philipp Schafft
c1034058f6 Fix: do not close(-1) on Keep-Alive clients 2015-03-01 16:53:17 +00:00
Philipp Schafft
5e8b24785e Fix: Use correct malloc function 2015-03-01 15:53:57 +00:00
Philipp Schafft
e870c21384 Cleanup: some style corrections. 2015-03-01 15:52:37 +00:00
Marvin Scholz
e0c05ef8a9 Fix another memory leak in xslt loader
This fixes another memory leak, which was caused by not freeing
the admin_path when a subsequent xslt file was loaded.
2015-03-01 15:35:14 +01:00
Marvin Scholz
06545b25c0 Fixed memory leaks in custom xslt loader
This fixes some memory leaks in the xslt loader,
additionally it now makes no copy of the URI if not needed.
2015-03-01 14:30:19 +01:00
Marvin Scholz
0709b4e66d Only look for admin include if no local found
This switches the behaviour introduced with the last commit
so that now the admin folder is only checked for includes if
in the specified path none is found.
2015-02-25 16:11:42 +01:00
Marvin Scholz
5b416b311c Add support for 'admin' includes from web XSLT files
This adds support for including xslt files that are in the admin
directory in an xslt file which is in the webroot, without having to
specify the full path.

For example:

    <xsl:include href="includes/head.xsl"/>

will look inside the admin directory (foo/bar/admin/includes/header.xsl)
and include it, if it's found. If not it will as usual look for it in
the directory where the xslt file is located. This enables us to have
common files like the header, footer, json stuff, etc. in the admin
directory, so we don't need to have an extra copy in the web folder.

Note:
The configuration value for the admin directory is requested
every time an xslt is requested (if not in the cache).
Additonally it should be noted that the includes are not cached.
2015-02-25 15:49:01 +01:00
Philipp Schafft
225c6f240a Fix: do not FTBFS in case OpenSSL support is not compiled in 2015-02-23 21:43:07 +00:00
Philipp Schafft
1e80611d1c Sync submodules 2015-02-10 21:26:33 +00:00
Philipp Schafft
a1e5d2ab8a Cleanup: connection.c:776: warning: unused variable expectcontinue 2015-02-10 21:20:58 +00:00
Philipp Schafft
36d10121cf Feature: Support PUT with chunked transfer encoding.
This adds the Transfer-Encoding chunked to PUT support.

Please test carefully. Will add PUT to Allow: header after testing.

Have fun.

Closes: #2088
2015-02-10 21:18:52 +00:00
Philipp Schafft
79cb147c4a Cleanup: unbreak 100-continue a bit.
This tries to unbreak the 100-continue thing a bit.
Proper headers are send in case of 100-continue. Also the 200 OK
was moved to the end of the stream.
The client may even be reused. But I'm not sure we only do
'End of stream' in cases we are not on an undefined state of the
client. Do we as of now support anything that give us EOS without
a fatal socket state (error or shutdown)?

At least this unbreaks 100-continue with active TLS that was broken
as hell as we sent the header in clear over the socket. Not checking
if it was transmitted completly or something. Using lowlevel socket
calls (in contrast to the connection level calls that would have
handled the TLS just fine).

While this seem sto be a huge improvement to the situation I kindly
ask you to do a lot testing on this. Both with SOURCE as well as
PUT clients.
2015-02-10 09:44:11 +00:00
Philipp Schafft
d6908eb024 Fix/Cleanup: Answer SOURCE/PUT requests with a real 200-OK.
We have answered SOURCE/PUT requests with a simple
"HTTP/1.0 200 OK\r\n\r\n" while we should answer with complet
headers. This commit corrects this.

Interoperability:
This will work for two classes of clients:
 * Super dumb ones not checking the response and will just send
   data and hope the socket is still open.
 * Those with a real parser.
 * Shoutcast clients (indepnded code path).
 * All libshout, curl, wget, ... based clients.

This *could* break:
 * Clients that check for the exact returned message. However
   as we start with the same string this should work.
   Only client that check for the string including the End-of-header
   CRLF sequense may break.

Please test careful before release.
2015-02-10 09:12:33 +00:00
Philipp Schafft
9cf6d9313c Sync common/ 2015-02-10 08:46:44 +00:00
Philipp Schafft
91eb78fc3a Feature: Expose TLS status in <listener> tags.
This exposes the TLS status as <tls> tag in the <listener> tag.
The tag contains a bool ("true" or "false"). TLS mode, version and
other parameters are out of the scope of this tag and may be added
as independed tags in later commits.
2015-02-09 12:14:16 +00:00
Philipp Schafft
927ccf5213 Cleanup: corrected comment TAGs 2015-02-09 12:06:29 +00:00
Philipp Schafft
c89a5714fb Cleanup: Converted tag <Listeners> to lowercase.
This converts the <Listeners> tag to lowercase on listclients admin
command. This is to align with stats.xml which already uses lowercase.
See: #2097
2015-02-09 12:03:00 +00:00
Philipp Schafft
765ceabe81 Fix: Detect socket errors on TLS based source connections 2015-02-07 12:21:31 +00:00
Philipp Schafft
7bc7472972 Fix: do keep SSL state when reusing a TLS connection. 2015-02-06 10:25:40 +00:00
Philipp Schafft
a18e2540fb Fix: Allow client=NULL in util_http_build_header()
This fixes a bug in 8941de3273:
When passing NULL as client parameter to util_http_build_header()
there was a segfault before this change.
2015-02-02 01:08:37 +00:00
Philipp Schafft
19162018f4 Fix: Announce RFC 2817 TLS Support if TLS support is enabled.
This announces TLS support if enabled via Upgrade:-header.
Closes: #2159
2015-02-02 01:05:05 +00:00
Philipp Schafft
dbbd22f792 Cleanup: Set Connection:-Header via client->reuse 2015-02-02 00:50:56 +00:00
Philipp Schafft
68248d15b1 Fix: Also check for Connection:-Header 2015-02-02 00:38:14 +00:00
Philipp Schafft
71408e6291 Feature: Allow RFC 2817 style Upgrade command.
This allows the usage of RFC 2817 style upgrade commands.
This is not correctly announced yet.
Can hardly be tested as most clients do not support this.
Will be helpful with TLS support in libshout.
See: #2159, #2152
2015-02-02 00:34:45 +00:00
Philipp Schafft
c806e47a4a Fix: allow Keep-Alive connections on normal error pages 2015-02-01 23:04:54 +00:00
Philipp Schafft
78213fe30a Cleanup: Move client queue node creation into function.
This adds the function create_client_node() taking care of
client queue node creation.
2015-02-01 21:01:01 +00:00
Philipp Schafft
8941de3273 Fix: Added some more HTTP/1.1 headers
This adds to all responses:
 * "Accept-Encoding: identity"
 * "Connection: close"
 * "Allow: GET, SOURCE" or "Allow: GET" (on admin pages)

This is to generate some infrastructure for Icecast to tell futur
source clients what is supported.

"Upgrade: TLS/1.0" should be added later when upgrade support is present.

See: #2152
2015-02-01 11:56:03 +00:00
Marvin Scholz
0dfc7c5b6a Cleanup codestyle
This commit cleanups codestyle a bit, yet there is still some work to be done
2015-01-25 19:57:27 +01:00
Philipp Schafft
9d84ba2036 Feature: Sending <admin> field to yp server
This sends the <admin> field to yp servers. It is thought be useful
to allow reaching the admins more easily in case of any yp problem.

Closes: #2146
2015-01-18 18:47:24 +00:00