Mar 152012
 

Streaming server Icecast bisa di setting untuk pengguna tertentu yang memasukkan username dan password. Backend pengguna ini bisa macam-macam seperti database server atau LDAP. Settingannya ternyata mudah! Berikut adalah setingan Icecast yang memanfaatkan LDAP sebagai backend pengguna.

Pertama-tama kita tentukan URL untuk stream yang perlu autentikasi dan opsi-opsinya. Setingan ini ada di file /etc/icecast.xml

...
<mount>
  <mount-name>/stream</mount-name>
  <authentication type="url">
    <option name="listener_add" value="http://example.com/auth/connect.php" />
  </authentication>
</mount>
...

Yang perlu diperhatikan adalah tipe autentikasi “url” dan opsi dengan nama “listener_add”, yaitu ketika ada pendengar yang mencoba akses akan diautentikasi menggunakan file connect.php di server example.com. Value disini harus bisa diakses dari luar walau file connect.php dan icecast-nya berada dalam satu mesin. Nah, ini isi dari file connect.php:

<?php
$bind_user = $_REQUEST["user"];
$bind_pass = $_REQUEST["pass"];

$ds = ldap_connect("ldap://example.com");
if($ds) {
  $r = ldap_bind($ds, "uid=$bind_user,ou=people,dc=example,dc=com", $bind_pass);
  if($r) {
    header('icecast-auth-user: 1');
    header('icecast-auth-message: OK');
    ldap_close($ds);
    exit;
  } else {
    header('icecast-auth-user: 0');
    header('icecast-auth-message: Wrong username and/or password!');
    ldap_close($ds);
    exit;
  }
} else {
  header('icecast-auth-user: 0');
  header('icecast-auth-message: fail to connect to LDAP server');
  exit;
}
?>

Segitu saja, sederhana sekali bukan? 😉 Yang perlu diperhatikan adalah parameter kedua dari ldap_bind, ini tergantung dari data di ldap server kita, format diatas cocok untuk openldap server dan 389 directory server.

Untuk autentikasi dan sekaligus menghitung lama koneksi contohnya bisa dilihat di contoh yang disertakan pada paket Icecast dan baca dokumentasi dari Icecast.

Tautan:
Icecast, Icecast Documentation, 389 Directory Server, OpenLDAP

Leave a Reply

%d bloggers like this: