Icecast-Server issueshttps://gitlab.xiph.org/xiph/icecast-server/-/issues2018-03-06T12:49:49Zhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/785[PATCH] Explicitly casts for (un)signed char* conversions (3/3)2018-03-06T12:49:49Zgtgbr[PATCH] Explicitly casts for (un)signed char* conversions (3/3)Mop up the rest ... after this, lint is happy about it (gcc on recent Linux dists isn't quite happy yet, though.)Mop up the rest ... after this, lint is happy about it (gcc on recent Linux dists isn't quite happy yet, though.)Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/784[PATCH] Explicitly casts for (un)signed char* conversions (2/3)2018-03-06T12:49:49Zgtgbr[PATCH] Explicitly casts for (un)signed char* conversions (2/3)Pass 2/3: Add another macro, CCPSTR(str), for the other way round: casts to (const char *).Pass 2/3: Add another macro, CCPSTR(str), for the other way round: casts to (const char *).Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/783[PATCH] Explicitly casts for (un)signed char* conversions (1/3)2018-03-06T12:49:49Zgtgbr[PATCH] Explicitly casts for (un)signed char* conversions (1/3)Pass 1/3: Add XMLSTR(str) macro to cast to (xmlChar *). Requires a fix to global.h, which needs to #include "avl/avl.h" for its avl_tree usage.Pass 1/3: Add XMLSTR(str) macro to cast to (xmlChar *). Requires a fix to global.h, which needs to #include "avl/avl.h" for its avl_tree usage.Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/782Treat ICECAST_VERSION_STRING as user-settable ...2018-03-06T12:49:49ZgtgbrTreat ICECAST_VERSION_STRING as user-settable ...... and thus protect format strings from it. There's also this feature request that people want to be able to set the version string in the configuration file, so this patch prepares for that feature's implementation.... and thus protect format strings from it. There's also this feature request that people want to be able to set the version string in the configuration file, so this patch prepares for that feature's implementation.Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/781Facilitate auditing by explicitly using "unsigned int" instead of just "unsig...2018-03-06T12:49:49ZgtgbrFacilitate auditing by explicitly using "unsigned int" instead of just "unsigned"Improves readability and makes code more consistent.Improves readability and makes code more consistent.Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/780[PATCH] Make refbufs use size_t for sizes instead of unsigned long2018-03-06T12:49:49Zgtgbr[PATCH] Make refbufs use size_t for sizes instead of unsigned longThis may or may not solve any real issues on 64bit archs at the moment, but it surely is more correct and makes large parts of Icecast code more consistent, where adding casts would be necessary otherwise.
This is the first of a long se...This may or may not solve any real issues on 64bit archs at the moment, but it surely is more correct and makes large parts of Icecast code more consistent, where adding casts would be necessary otherwise.
This is the first of a long series of patches that are supposed to enhance Icecast's maintainability, portability and correctness. They are the result of an ongoing (and by now week-long) audit that shows that there are subtle issues hidden in Icecast that only work by accident at this point -- fixing those will make it much easier on the long run to maintain Icecast's quality.Karl HeyesKarl Heyeshttps://gitlab.xiph.org/xiph/icecast-server/-/issues/775default log level should be lower2018-03-06T12:49:49ZGhost Userdefault log level should be lowerIcecast 2.3.1 shipped with the default loglevel of 4, which generates rather more lines than one would want in a production environment. I suggest that this default be changed to 2 or 3.Icecast 2.3.1 shipped with the default loglevel of 4, which generates rather more lines than one would want in a production environment. I suggest that this default be changed to 2 or 3.Icecast 2.3Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/774YP data submitted even when source cannot connect2018-03-06T12:49:49Zchris.aretiYP data submitted even when source cannot connectHi,
I'm using 2.3.0 but as I didn't see it as a bugfix on the list, I'm presuming it remains the same in 2.3.1..
I have icecast set to not allow people to take over source control if someone's connected already, however due to necessit...Hi,
I'm using 2.3.0 but as I didn't see it as a bugfix on the list, I'm presuming it remains the same in 2.3.1..
I have icecast set to not allow people to take over source control if someone's connected already, however due to necessity when some people kill the connected source and broadcast - the main broadcast server still attempts to connect to the source every 15 seconds. This means that when the DJ has finished their set, then simply disconnect and 24 hour playout comes back online.
However, I've noticed with 2.3.0 that even though the broadcast server gets a disconnected error message, the metadata the broadcast server generates whilst the other source is on air manages to update and overwrite that which the current source connection is providing.
In short, metadata from a connecting client (who cannot connect because the source is in use by another client) still manages to be accepted by icecast and updated on the stream.. meaning that the two clients are constantly fighting to keep metadata with that of the current source.
Any help would be much appreciated!
Thanks,
Chris.Icecast 2.3Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/766a list of the last n songs played should be accessible to visitors through st...2018-03-06T12:49:49Zicecast.aphexa list of the last n songs played should be accessible to visitors through status.xslIcecast 2.5.0Philipp SchafftPhilipp Schaffthttps://gitlab.xiph.org/xiph/icecast-server/-/issues/764[Request] Icecast: Source/DJ authentication system2018-03-06T12:49:49ZGitlab Bot[Request] Icecast: Source/DJ authentication systemHave a choice to authenticate the source, a bit like listener auth.
In my scenario it would be very handy to be able to send over the source auth details to a php script like url authentication for listeners and then only let the DJ con...Have a choice to authenticate the source, a bit like listener auth.
In my scenario it would be very handy to be able to send over the source auth details to a php script like url authentication for listeners and then only let the DJ connecting to stream if its their turn and if for some reason we need to we can tell the script to return that the source isnt allowed to stream as we have disabled them (maybe due to abusive DJ/inactive DJ that wont leave), this will also make it easier to make sure we know which DJ is currently streaming.
Im not sure if this would be suitable solution for everyone, but the choice would be handy and im sure theres more than just me that would like to see this feature.
Thanks for listening,
Daniel @ Y3K-Radio
^^^ above is a copy of my post at the Icecast Forums (as karlH requested I post it here)Karl HeyesKarl Heyeshttps://gitlab.xiph.org/xiph/icecast-server/-/issues/741IceCast 2.3.0 Dies2018-03-06T12:49:49ZbdupreeIceCast 2.3.0 DiesI have ezstream streaming 64 Kb ogg 24x7 to IceCast 2.3.0. ezstream, libvorbis and libogg are at the latest releases. Every so often IceCast dies. No rhyme or reason to it. Sometimes it dies in a matter of hours. Sometimes it runs for we...I have ezstream streaming 64 Kb ogg 24x7 to IceCast 2.3.0. ezstream, libvorbis and libogg are at the latest releases. Every so often IceCast dies. No rhyme or reason to it. Sometimes it dies in a matter of hours. Sometimes it runs for weeks. When it failes there are no errors in the logs to indicate why. After a failure ezstream logs show connection failures (via loopback) over and over and over.
One mode of failure has IceCast consuming 100% CPU, the other has all IceCast processes terminated. The server, itself, for all intents and purposes appears to be running normally with its usual load (< 1.0) and memory consumption. (The server: SlackWare 10.0 Linux colo running 2.4.31, apache 1.3.34, mysql, postgresql, openssl, postfix, etc. on 1.3 GHz Duron, 512MB RAM, 40GB PATA disk, 10/100 NIC) All other aspects of the server are extremely stable, the box only goes down when I take it down.
I'm planning on rebuilding IceCast with debugging symbols and upping the ulimit to see if it'll drop a core for me, but I was wondering if anybody has additional insights?
--Bill DuPree
Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/738Errorcode when client wants to connect to "full" mountpoint should be changed2020-10-15T13:51:17ZrobeErrorcode when client wants to connect to "full" mountpoint should be changedHi,
the errorcode that clients receive when they want to connect to a mountpoint which has reached its maxlisteners limit should be changed from the current "404 File Not Found" to something more meaningful, since this is the same error...Hi,
the errorcode that clients receive when they want to connect to a mountpoint which has reached its maxlisteners limit should be changed from the current "404 File Not Found" to something more meaningful, since this is the same errorcode that gets returned when the requested mountpoint doesn't exist.
A possible solution to this would be returning 403 with a customized reason phrase like "Mountpoint full" (or similar) in the header (since this is the only thing (if any) that gets forwarded to the user with most clients). The HTTP 1.1 RFC (#2616) allows this:
6.1.1:
[..]
The individual values of the numeric status codes defined for
HTTP/1.1, and an example set of corresponding Reason-Phrase's, are
presented below. The reason phrases listed here are only
recommendations -- they MAY be replaced by local equivalents without
affecting the protocol.
[..]Philipp SchafftPhilipp Schaffthttps://gitlab.xiph.org/xiph/icecast-server/-/issues/734stats by mountpoint2018-03-06T12:49:49ZGitlab Botstats by mountpointHi, I guess this has been talked before.. but many of my customers wants to check their stats.. as they have no admin privileges they can not check how many listeners are connected to their mountpoint.
Of course, creating a separate scr...Hi, I guess this has been talked before.. but many of my customers wants to check their stats.. as they have no admin privileges they can not check how many listeners are connected to their mountpoint.
Of course, creating a separate script to capture the output for /admin/ will work... but it would be nice if icecast can doit by itself.
regards and thanks!
epeMichael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/733change the intro file without loosing the connected users2018-03-06T12:49:49ZGitlab Botchange the intro file without loosing the connected userscopy from the forum:
hi all
i think i find a bug
i would like to use two intro file 'randomly' (for example, change it in every 3 minutes)
i started my server, i modified my config, reload the server, in the log i see that the config...copy from the forum:
hi all
i think i find a bug
i would like to use two intro file 'randomly' (for example, change it in every 3 minutes)
i started my server, i modified my config, reload the server, in the log i see that the config is loaded with the new intro file, but i still get the old one if i connect to the server.
if i restart the server i will get the new intro file, but in this case i loose my listeners.
is there any way to do what i want? maybe i try it in a wrong way? i also tried to give more than one intro file in the config but it does not worked.
thx for your help.
my system:
linux 2.4.27
debian 3.1
i made backport from debian unstable:
ii icecast2 2.3.0-2 Ogg Vorbis and MP3 streaming media server
so it's 2.3.0.
init script from debian (in fact it sends a HUP to the server)
...
reload|force-reload)
echo "Reloading $DESC configuration files."
start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON
;;
...
my configs:
...
<relay>
<server>127.0.0.1</server>
<port>18000</port>
<mount>/</mount>
<local-mount>/</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<mount>
<mount-name>/</mount-name>
<intro>2.mp3</intro>
</mount>
...Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/732hi-world cup2018-03-06T12:49:49Zsci-fihi-world cupHi,
Clients can't connect to our system. I compiled icecast 2.3.0 from svn, tried the official 2.3.0 src dist, went back to 2.3.0rc3, to no avail.
We're still running MacOSX 10.3.9 aka Panther due to issues with 10.4.x aka Tiger. I c...Hi,
Clients can't connect to our system. I compiled icecast 2.3.0 from svn, tried the official 2.3.0 src dist, went back to 2.3.0rc3, to no avail.
We're still running MacOSX 10.3.9 aka Panther due to issues with 10.4.x aka Tiger. I can't prove it but the update from 10.3.8 to 10.3.9+securityfixes might have something to do with it, but we're stuck with 10.3.9 for the time being. I do remember when we had 10.3.8, we were successfully using icecast 2.2.0 and 2.3.0rc1 when it came out (both compiled myself with similar gcc/ld settings).
We're listed on the YPs as SciFi.homeip.net on Friday and Saturday nights U.S. time; maybe we can schedule some test time per feedback from this ticket.
We're running icecast by relaying the stream from localhost:32720 which is shoutcast 1.9.6b (a fix for MacOSX users which is the port number going negative when set above 32767). btw We use high port numbers to skirt around ISP possibly blocking the usual ones, and we have net.sysctl settings to make sure other apps don't use those ranges up there.
Listeners to our shoutcast streams are working, as are p2p-radio and Peercast, which I also compiled myself from cvs/svn as appropriate. Every netcast app works *but* icecast for the time being, and I can't figure out why.
There is _no_ firewall (software, hardware, or otherwise) between the Mac and the cable modem.
Here is a snip from our icecast error.log for tonight's netcast:
```
[...]
[2005-11-05 19:15:20] INFO main/main Icecast 2.3.0 server started
[2005-11-05 19:15:20] INFO yp/yp_recheck_config Adding new YP server "http://dir.xiph.org/cgi-bin/yp-cgi" (timeout 15s, default interval 30s)
[2005-11-05 19:15:20] INFO yp/yp_recheck_config Adding new YP server "http://www.steamcast.com/sbin/yp.php" (timeout 15s, default interval 30s)
[2005-11-05 19:15:20] INFO yp/yp_update_thread YP update thread started
[2005-11-05 19:15:20] INFO auth/auth_run_thread Authentication thread started
[2005-11-05 19:15:21] INFO slave/start_relay_stream Starting relayed source at mountpoint "/"
[2005-11-05 19:22:05] WARN client/client_read_bytes source connection has died
[2005-11-05 22:57:26] WARN client/client_read_bytes source connection has died
[2005-11-05 22:57:30] WARN client/client_read_bytes source connection has died
[2005-11-05 23:37:05] WARN client/client_read_bytes source connection has died
[...]
```
The above is a mix of clients "out there" and myself running iTunes on the localhost. Nothing can get hold of the stream.
There is nothing in the access.log for icecast, so these clients didn't even get the very beginning icy-html stuff.
We have relays-on-demand turned off; I don't think turning it on made any difference.
The shoutcast server did see the initial connection; here is that snip from its log:
```
<11/05/05@19:15:21> [dest: 127.0.0.1] starting stream (UID: 4)[L: 3]{A: Icecast 2.3.0}(P: 1)
```
This initial connection didn't use to work either. I had to patch the icecast230 src in the following manner to get this much working:
```
---cut-here---
--- src/slave.c_orig 2005-09-30 14:39:08 -0500
+++ src/slave.c 2005-09-30 14:39:26 -0500
@@ -174,7 +174,7 @@
{
char *auth_header;
- streamsock = sock_connect_wto (relay->server, relay->port, 30);
+ streamsock = sock_connect_wto (relay->server, relay->port, 0);
if (streamsock == SOCK_ERROR)
{
WARN3("Failed to relay stream from master server, couldn't connect to http://%s:%d%s",
---cut-here---
```
fwiw I tried this patch to get the client streams working but to no avail:
```
---cut-here---
--- src/net/sock.c_orig 2005-09-30 21:36:15 -0500
+++ src/net/sock.c 2005-10-01 15:37:40 -0500
@@ -433,7 +433,7 @@
if (!buff) return 0;
if (len <= 0) return 0;
- return recv(sock, buff, len, 0);
+ return recv(sock, buff, len, MSG_WAITALL);
}
/* sock_read_line
---cut-here---
```
So there's a clue to get the client streams working, but I'm unable to figure it out further. :(
Here is our full icecast.xml (obfuscating the passwords of course ;) ):
```
--- icecast.xml ---
<icecast>
<limits>
<clients>3</clients>
<sources>1</sources>
<threadpool>25</threadpool>
<queue-size>1048576</queue-size>
<client-timeout>65535</client-timeout>
<header-timeout>65535</header-timeout>
<source-timeout>65535</source-timeout>
<burst-on-connect>1</burst-on-connect>
<burst-size>131072</burst-size>
</limits>
<authentication>
<!-- Sources log in with username 'source' -->
<source-password>(duh!)</source-password>
<!-- Relays log in username 'relay' -->
<relay-password></relay-password>
<!-- Admin logs in with the username given below -->
<admin-user>admin</admin-user>
<admin-password>(duh!)</admin-password>
</authentication>
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://www.steamcast.com/sbin/yp.php</yp-url>
</directory>
<!--
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://www.oddsock.org/cgi-bin/yp-cgi</yp-url>
</directory>
-->
<!-- This is the manufactured mount name for your shoutcast
compatible stream. Since the shoutcast DSP (and NSV encoder)
cannot specify a mountpoint, you must enter it here -->
<shoutcast-mount>/stream</shoutcast-mount>
<!-- This is the hostname other people will use to connect to your server.
It affects mainly the urls generated by Icecast for playlists and yp
listings. -->
<hostname>SciFi.homeip.net</hostname>
<!-- You MUST define 2 ports, port and port +1,
for Shoutcast-compatibility -->
<listen-socket>
<!-- Configure the shoutcast DSP with *this* port
the shoutcast DSP actually will connect the
encoder to this port + 1 -->
<port>32710</port>
</listen-socket>
<listen-socket>
<!-- This port *must* be one larger than the one defined
above and defined as 'shoutcast-compat' -->
<port>32711</port>
<shoutcast-compat>1</shoutcast-compat>
</listen-socket>
<relays-on-demand>0</relays-on-demand>
<relay>
<server>127.0.0.1</server>
<port>32720</port>
<mount>/</mount>
<local-mount>/</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Only define a <mount> section if you want to use advanced options,
like alternative usernames or passwords
-->
<mount>
<mount-name>/</mount-name>
<max-listeners>2</max-listeners>
<no-yp>0</no-yp>
<hidden>0</hidden>
</mount>
<fileserve>1</fileserve>
<paths>
<!-- basedir is only used if chroot is enabled -->
<basedir>/usr/local/share/icecast</basedir>
<!-- Note that if <chroot> is turned on below, these paths must both
be relative to the new root, not the original root -->
<logdir>.</logdir>
<webroot>/usr/local/share/icecast/web</webroot>
<adminroot>/usr/local/share/icecast/admin</adminroot>
<pidfile>/var/run/icecast.pid</pidfile>
<!-- Aliases: treat requests for 'source' path as being for 'dest' path
May be made specific to a port or bound address using the "port"
and "bind-address" attributes.
-->
<!--
<alias source="/foo" dest="/bar"/>
-->
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
</logging>
<!--
<security>
<chroot>0</chroot>
<changeowner>
<user>nobody</user>
<group>nogroup</group>
</changeowner>
</security>
-->
</icecast>
--- end icecast.xml ---
```
Yes the icecast admin can sign-on and look at all the current settings etc. But no clients can get the stream.
Any help, ideas, tests, etc. I would be greatful.
Thank you.
Icecast 2.3Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/709icecast with +- 1100 users eats 1 gig memory and crashes ...2018-03-06T12:49:49ZGitlab Boticecast with +- 1100 users eats 1 gig memory and crashes ...Icecast 2.2.0 on Linux Fedora Core 1 (running on a dell 2650) uses about 1 giga of memory when 1100 users are connected and eventually crashes (icecast process stops) without meaningfull info in log or coredump files ...
The icecast fro...Icecast 2.2.0 on Linux Fedora Core 1 (running on a dell 2650) uses about 1 giga of memory when 1100 users are connected and eventually crashes (icecast process stops) without meaningfull info in log or coredump files ...
The icecast front-end servers (to which users can connect) get their 44 mp3 sources from an icecast relay server (to which encoders or other servers can connect) using the master relay function. Additionally the front-ends use also the icecast fileserving. I will paste both the front-end and relay configuration files :
*Front-end configuration file :*
```
<icecast>
<limits>
<clients>5000</clients>
<sources>75</sources>
<threadpool>5</threadpool>
<queue-size>102400</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
</limits>
<authentication>
<source-password>foo</source-password>
<relay-password>foo</relay-password>
<admin-user>joe</admin-user>
<admin-password>foo</admin-password>
</authentication>
<hostname>fe1.foo.bar</hostname>
<listen-socket>
<port>8000</port>
<bind-address>A.B.29.12</bind-address>
</listen-socket>
<listen-socket>
<port>8000</port>
<bind-address>C.D.1.12</bind-address>
</listen-socket>
<master-server>A.B.29.51</master-server>
<master-server-port>8000</master-server-port>
<master-update-interval>120</master-update-interval>
<master-password>foo</master-password>
<fileserve>1</fileserve>
<paths>
<basedir>/usr/share/icecast</basedir>
<logdir>/var/log/icecast</logdir>
<webroot>/streampower/customers</webroot>
<adminroot>/usr/share/icecast/admin</adminroot>
<alias source="/radio1-mid" dest="/radio1-mid.mp3"/>
<alias source="/radio1-low" dest="/radio1-low.mp3"/>
<alias source="/radio1-high" dest="/radio1-high.mp3"/>
<alias source="/ra2vlb-mid" dest="/ra2vlb-mid.mp3"/>
<alias source="/ra2vlb-low" dest="/ra2vlb-low.mp3"/>
<alias source="/ra2vlb-high" dest="/ra2vlb-high.mp3"/>
<alias source="/ra2ant-mid" dest="/ra2ant-mid.mp3"/>
<alias source="/ra2ant-low" dest="/ra2ant-low.mp3"/>
<alias source="/ra2ant-high" dest="/ra2ant-high.mp3"/>
<alias source="/ra2lim-mid" dest="/ra2lim-mid.mp3"/>
<alias source="/ra2lim-low" dest="/ra2lim-low.mp3"/>
<alias source="/ra2lim-high" dest="/ra2lim-high.mp3"/>
<alias source="/ra2ovl-mid" dest="/ra2ovl-mid.mp3"/>
<alias source="/ra2ovl-low" dest="/ra2ovl-low.mp3"/>
<alias source="/ra2ovl-high" dest="/ra2ovl-high.mp3"/>
<alias source="/ra2wvl-mid" dest="/ra2wvl-mid.mp3"/>
<alias source="/ra2wvl-low" dest="/ra2wvl-low.mp3"/>
<alias source="/ra2wvl-high" dest="/ra2wvl-high.mp3"/>
<alias source="/klara-mid" dest="/klara-mid.mp3"/>
<alias source="/klara-low" dest="/klara-low.mp3"/>
<alias source="/klara-high" dest="/klara-high.mp3"/>
<alias source="/klaracontinuo-mid" dest="/klaracontinuo-mid.mp3"/>
<alias source="/klaracontinuo-low" dest="/klaracontinuo-low.mp3"/>
<alias source="/klaracontinuo-high" dest="/klaracontinuo-high.mp3"/>
<alias source="/stubru-mid" dest="/stubru-mid.mp3"/>
<alias source="/stubru-low" dest="/stubru-low.mp3"/>
<alias source="/stubru-high" dest="/stubru-high.mp3"/>
<alias source="/donna-mid" dest="/donna-mid.mp3"/>
<alias source="/donna-low" dest="/donna-low.mp3"/>
<alias source="/donna-high" dest="/donna-high.mp3"/>
<alias source="/donnahitbits-mid" dest="/donnahitbits-mid.mp3"/>
<alias source="/donnahitbits-low" dest="/donnahitbits-low.mp3"/>
<alias source="/donnahitbits-high" dest="/donnahitbits-high.mp3"/>
<alias source="/sporza-mid" dest="/sporza-mid.mp3"/>
<alias source="/sporza-low" dest="/sporza-low.mp3"/>
<alias source="/sporza-high" dest="/sporza-high.mp3"/>
<alias source="/rvi-mid" dest="/rvi-mid.mp3"/>
<alias source="/rvi-low" dest="/rvi-low.mp3"/>
<alias source="/rvi-high" dest="/rvi-high.mp3"/>
<alias source="/reserve-mid" dest="/reserve-mid.mp3"/>
<alias source="/reserve-low" dest="/reserve-low.mp3"/>
<alias source="/reserve-high" dest="/reserve-high.mp3"/>
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>1</loglevel>
</logging>
<security>
<chroot>0</chroot>
</security>
</icecast>
```
*Relay configuration file :*
```
<icecast>
<limits>
<clients>1000</clients>
<sources>100</sources>
<threadpool>5</threadpool>
<queue-size>102400</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
</limits>
<authentication>
<source-password>foo</source-password>
<relay-password>foo</relay-password>
<admin-user>joe</admin-user>
<admin-password>foo</admin-password>
</authentication>
<hostname>relay.foo.bar</hostname>
<listen-socket>
<port>8000</port>
<bind-address>A.B.29.51</bind-address>
</listen-socket>
<listen-socket>
<port>8000</port>
<bind-address>W.X.14.223</bind-address>
</listen-socket>
<listen-socket>
<port>8000</port>
<bind-address>Y.Z.112.16</bind-address>
</listen-socket>
<!-- Radio 1 -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/radio1-mid.mp3</mount>
<local-mount>/radio1-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/radio1-low.mp3</mount>
<local-mount>/radio1-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/radio1-high.mp3</mount>
<local-mount>/radio1-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Radio 2 Vlaams Brabant -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2vlb-mid.mp3</mount>
<local-mount>/ra2vlb-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2vlb-low.mp3</mount>
<local-mount>/ra2vlb-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2vlb-high.mp3</mount>
<local-mount>/ra2vlb-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Radio 2 Antwerpen -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2ant-mid.mp3</mount>
<local-mount>/ra2ant-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2ant-low.mp3</mount>
<local-mount>/ra2ant-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2ant-high.mp3</mount>
<local-mount>/ra2ant-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Radio 2 Limburg -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2lim-mid.mp3</mount>
<local-mount>/ra2lim-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2lim-low.mp3</mount>
<local-mount>/ra2lim-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2lim-high.mp3</mount>
<local-mount>/ra2lim-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Radio 2 Oost Vlaanderen -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2ovl-mid.mp3</mount>
<local-mount>/ra2ovl-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2ovl-low.mp3</mount>
<local-mount>/ra2ovl-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2ovl-high.mp3</mount>
<local-mount>/ra2ovl-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Radio 2 West Vlaanderen -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2wvl-mid.mp3</mount>
<local-mount>/ra2wvl-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2wvl-low.mp3</mount>
<local-mount>/ra2wvl-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/ra2wvl-high.mp3</mount>
<local-mount>/ra2wvl-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Klara -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/klara-mid.mp3</mount>
<local-mount>/klara-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/klara-low.mp3</mount>
<local-mount>/klara-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/klara-high.mp3</mount>
<local-mount>/klara-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Klara Continuo -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/klaracontinuo-mid.mp3</mount>
<local-mount>/klaracontinuo-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/klaracontinuo-low.mp3</mount>
<local-mount>/klaracontinuo-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/klaracontinuo-high.mp3</mount>
<local-mount>/klaracontinuo-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Studio Brussel -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/stubru-mid.mp3</mount>
<local-mount>/stubru-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/stubru-low.mp3</mount>
<local-mount>/stubru-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/stubru-high.mp3</mount>
<local-mount>/stubru-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Donna -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/donna-mid.mp3</mount>
<local-mount>/donna-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/donna-low.mp3</mount>
<local-mount>/donna-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/donna-high.mp3</mount>
<local-mount>/donna-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Donna Hit Bits -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/donnahitbits-mid.mp3</mount>
<local-mount>/donnahitbits-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/donnahitbits-low.mp3</mount>
<local-mount>/donnahitbits-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/donnahitbits-high.mp3</mount>
<local-mount>/donnahitbits-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Sporza -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/sporza-mid.mp3</mount>
<local-mount>/sporza-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/sporza-low.mp3</mount>
<local-mount>/sporza-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/sporza-high.mp3</mount>
<local-mount>/sporza-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Radio Vlaanderen Internationaal -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/rvi-mid.mp3</mount>
<local-mount>/rvi-mid.mp3</local-mount>
<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/rvi-low.mp3</mount>
<local-mount>/rvi-low.mp3</local-mount>
<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/rvi-high.mp3</mount>
<local-mount>/rvi-high.mp3</local-mount>
<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>
<!-- Reserve -->
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/reserve-mid.mp3</mount>
<local-mount>/reserve-mid.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/reserve-low.mp3</mount>
<local-mount>/reserve-low.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>E.F.10.110</server>
<port>8000</port>
<mount>/reserve-high.mp3</mount>
<local-mount>/reserve-high.mp3</local-mount>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<!-- Extra -->
<relay>
<server>G.H.88.79</server>
<port>80</port>
<mount>/high.ogg</mount>
<local-mount>/urgent-high.ogg</local-mount>
<hidden>1</hidden>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<relay>
<server>G.H.88.79</server>
<port>80</port>
<mount>/low.ogg</mount>
<local-mount>/urgent-low.ogg</local-mount>
<hidden>1</hidden>
<relay-shoutcast-metadata>1</relay-shoutcast-metadata>
</relay>
<fileserve>0</fileserve>
<paths>
<basedir>/usr/share/icecast</basedir>
<logdir>/var/log/icecast</logdir>
<webroot>/usr/share/icecast/web</webroot>
<adminroot>/usr/share/icecast/admin</adminroot>
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>1</loglevel>
</logging>
<security>
<chroot>0</chroot>
</security>
</icecast>
```
Could the crash be caused by a memory leak ?Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/708Source / mountpoint from SQL / LDAP / flat file (?)2018-03-06T12:49:49ZkiwiSource / mountpoint from SQL / LDAP / flat file (?)Hi there,
I'd really like to have source authentication (eg mount point and password) from a DB / LDAP source instead of using static entries in XML files.
Even the simple way to have include files to add multiples mount point password...Hi there,
I'd really like to have source authentication (eg mount point and password) from a DB / LDAP source instead of using static entries in XML files.
Even the simple way to have include files to add multiples mount point password should be very appreciated.
Can it donc in next icecast version ?
Thanks !
/XavierIcecast 2.3Karl HeyesKarl Heyeshttps://gitlab.xiph.org/xiph/icecast-server/-/issues/707[PATCH] Segfault in src/admin.c2018-03-06T12:49:49Zmartin[PATCH] Segfault in src/admin.cMy Icecast 2.3.0.rc2 was segfaulting, when listmounts.xsl was requested, and there were mounts with fallback configured, so I have done little debugging. The "source->client" object must exist before we can check "source->client->con", s...My Icecast 2.3.0.rc2 was segfaulting, when listmounts.xsl was requested, and there were mounts with fallback configured, so I have done little debugging. The "source->client" object must exist before we can check "source->client->con", see patch. Please take a look at my http-auth-logging patch, too (Ticket #706). Thanks.
```
--- admin.c.orig Sun Sep 11 22:57:35 2005
+++ admin.c Sun Sep 11 23:18:09 2005
@@ -252,7 +252,7 @@
if (source->running)
{
- if (source->client->con)
+ if (source->client && source->client->con)
{
snprintf (buf, sizeof(buf), "%lu",
(unsigned long)(now - source->con->con_time));
```
Icecast 2.3Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/705Bug in auth.c (version 2.3.0.rc2)2018-03-06T12:49:49ZmartinBug in auth.c (version 2.3.0.rc2)The function check_duplicate_logins in auth.c (2.3.0.rc2, lines 225-266 ) contains a
bug. The "client" object passed to the function gets overwritten inside
it, and a the comparsion "strcmp (client->username, client->username) ==
0" alwa...The function check_duplicate_logins in auth.c (2.3.0.rc2, lines 225-266 ) contains a
bug. The "client" object passed to the function gets overwritten inside
it, and a the comparsion "strcmp (client->username, client->username) ==
0" always returns zero, so any username is always considered duplicate.
Patch suggestion:
```
--- src/auth.c.orig Sat Sep 10 16:44:43 2005
+++ src/auth.c Sat Sep 10 17:19:28 2005
@@ -238,8 +238,8 @@
node = avl_get_first (source->client_tree);
while (node)
{
- client_t *client = (client_t *)node->key;
- if (client->username && strcmp (client->username, client->username) == 0)
+ client_t *existing_client = (client_t *)node->key;
+ if (existing_client->username && strcmp (existing_client->username, client->username) == 0)
{
avl_tree_unlock (source->client_tree);
return 0;
@@ -252,8 +252,8 @@
node = avl_get_first (source->pending_tree);
while (node)
{
- client_t *client = (client_t *)node->key;
- if (client->username && strcmp (client->username, client->username) == 0)
+ client_t *existing_client = (client_t *)node->key;
+ if (existing_client->username && strcmp (existing_client->username, client->username) == 0)
{
avl_tree_unlock (source->pending_tree);
return 0;
```Icecast 2.3Michael SmithMichael Smithhttps://gitlab.xiph.org/xiph/icecast-server/-/issues/704Request: Add server name to config file2018-03-06T12:50:21ZGitlab BotRequest: Add server name to config fileCurrently Icecast reports to clients that it is "Icecast 2.2.0" or whichever version. It would be nice to override this in the config file for security reasons.Currently Icecast reports to clients that it is "Icecast 2.2.0" or whichever version. It would be nice to override this in the config file for security reasons.Michael SmithMichael Smith