Ah, super ....
Super Danke Andreas... das hilft mir schon mal weiter...
hmmm php oder perl gute frage, hmmm ok vielleicht erkläre ich mal was ich als ganzen wollte und nicht nur den code block, vielleicht kannst du / ihr mir noch einmal einen rat geben:
Ich habe vor ein Webradio per Icecast zu realisieren. Als solches ja nicht schwer, solange man nicht z.b. das Passwort laufend ändern möchte. Realisiert wird es hier ja in der icecast.xml, wie ich oben schon bruchstücke draus gepostet habe:
Code:
<icecast>
<limits>
<clients>100</clients>
<sources>2</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>
<!-- Sources log in with username 'source' -->
<source-password>hackme</source-password>
<!-- Relays log in username 'relay' -->
<relay-password>hackme</relay-password>
<!-- Admin logs in with the username given below -->
<admin-user>admin</admin-user>
<admin-password>hackme</admin-password>
</authentication>
<!-- Uncomment this if you want directory listings -->
<!--
<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.oddsock.org/cgi-bin/yp-cgi</yp-url>
</directory>
-->
<hostname>Mein.Server.de</hostname>
<!-- You can use these two if you only want a single listener -->
<!--<port>8000</port> -->
<!--<bind-address>127.0.0.1</bind-address>-->
<!-- You may have multiple <listener> elements -->
<listen-socket>
<port>8000</port>
<bind-address>192.168.6.4</bind-address>
</listen-socket>
<!--
<listen-socket>
<port>8001</port>
</listen-socket>
-->
<!--<master-server>127.0.0.1</master-server>-->
<!--<master-server-port>8001</master-server-port>-->
<!--<master-update-interval>120</master-update-interval>-->
<!--<master-password>hackme</master-password>-->
<!--
<relay>
<server>127.0.0.1</server>
<port>8001</port>
<mount>/example.ogg</mount>
<local-mount>/different.ogg</local-mount>
<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>
-->
<!-- Only define a <mount> section if you want to use advanced options,
like alternative usernames or passwords
<mount>
<mount-name>/example-complex.ogg</mount-name>
<username>othersource</username>
<password>hackmemore</password>
<max-listeners>1</max-listeners>
<dump-file>/tmp/dump-example1.ogg</dump-file>
<fallback-mount>/example2.ogg</fallback-mount>
</mount>
-->
<fileserve>1</fileserve>
<paths>
<!-- basedir is only used if chroot is enabled -->
<basedir>/usr/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>/var/log/icecast</logdir>
<webroot>/usr/share/icecast/web</webroot>
<adminroot>/usr/share/icecast/admin</adminroot>
<!-- <pidfile>/usr/share/icecast/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>4</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
</logging>
<security>
<chroot>0</chroot>
<changeowner>
<user>newuser</user>
<group>newgroup</group>
</changeowner>
</security>
</icecast>
wie ihr seht wird das SOURCE Password, das ist das DJ Passwort, hier eingetragen, sprich es wäre immer gleich.
Um einen Wechsel DJ betrieb zu machen, ist das natürlich schlecht, sprich jede Sendung sollte sein eingenes Passwort erhalten. Wie das zu realisieren ist , habe ich mir theoratisch zwei unterschiedliche Wege ausgedacht. Bei icecast weiss ich das der nur beim starten die XML datei einliest, sprich einfach das Passwort ändern reicht nicht, weil er dieses in Cache behält. Ob es ein RELOAD CONFIG gibt, habe ich noch nicht rausgefunden, aber es geht ja sonst ein restart per init.d script.
Ähnlich wie bei anderen Radios sollten die DJ´s ihre sendung per Auswahlboxen der Uhrzeit und des Datumes ( immer max 14 Tage im Voraus ), sowie Freifelder für Thema der sendung eintragen. Diese ganzen angaben sollen in einer Datenbank gespeichert werden und dem DJ ein automatisch kreiertes 6 stelliges Passwort angezeigt werden, welches einmalig ist, in der Datenbank abgelegt wird und nur für eine sendung gilt das ganze sollte per php erfolgen.
Wo wir wieder bei dem Passwort wären.
Dazu muss ein script geschrieben werden selches ein passwort abfragt, sprich sich eine Variable eines Datenbankfeldes in die XML liest. Woher soll das script nun wissen wann welches passwort gültig ist, weil es ja bestimmt mehrere Passwörter in der Datenbank, durch mehrere eingetragenen Sendungen, liegen.
Ich kann mir vorstellen, das durch eine Bedingungsabfrage in dem Bashscript, also z.b. ist $SENDEZEIT == SYSTIME dann lese aus dieser zeile $PASS in schreibe es in der variable $PASS in die XML. Oder die zweite möglichkeit ist, das es in der Datenbank ein zweites fald gibt z.b. $CURRENTPASS welches ein bashscript dann da einträgt, welches es vorher ebenfals durch eine abfrage ermittelt hat, also wieder vergleich der systemzeit. Eigentlich ist die letzte lösung schwachsinnig, weil zwei passwort felder dann wären, das müsste auch anders gehen, nur wie weiss ich noch nicht . ( try and error ). Zuguterletzt müssten die scripte dann den Server ( bzw den Daemon) entweder neustarten, rebooten oder wie sonst auch imma dazu veranlassen, das er die XML, mit dem neuen Passwort, neu einliest.
Wie gesagt das ist hier alles noch theoretisch gedacht...
Hmmm also ok Andreas wie du siehst einen Kopf habe ich mir schon gemacht, nur sieht es halt dann in der umsetzung doch ein bissl Komplizierter aus....
Realisiert wird das ganze auf einem Gentoo Linux Server.
Ich wäre für Tips und/oder Hilfe , diemal aus den jetzt genaueren Infos für euch sehr dankbar
Gruss Chrissi