Trick or Treat!

Lilith タスクリスト

HDL-GTRX化のための調査 その3

2008年10月13日 23時49分43秒 | HDL-GT
/usr/local/www/gate/service_set.cgi の中にこのような部分がある。

ここで、GTRとGTの差異をWeb画面上に出しているように思える。
なので、GTR側に $serv->set ( 'dlna' => $servhash{"dlna"} ); を追加すれば
 Web上で設定できるのではないかと思う。
&HDLcgi::table_header ( __('サービス設定') );

$str_en  = __('有効');
$str_dis = __('無効');


if( $modelname eq 'HDL-GTR' ) {
        $p = &HDLcgi::table_row ( $p, 40, __('Microsoftネットワーク共有')               , ($servhash{"samba"} == 1)?    $str_en: $str_dis );
        $p = &HDLcgi::table_row ( $p, 40, __('Microsoftネットワーク共有アクセスログ')     , ($sambalog == 1)?             $str_en: $str_dis );
        $p = &HDLcgi::table_row ( $p, 40, __('AppleShareネットワーク共有')              , ($servhash{"netatalk"} == 1)? $str_en: $str_dis );
        $p = &HDLcgi::table_row ( $p, 40, __('FTP')                                     , ($servhash{"vsftpd"} == 1)?   $str_en: $str_dis );
}else{
        $p = &HDLcgi::table_row ( $p, 40, __('Microsoftネットワーク共有')               , ($servhash{"samba"} == 1)?    $str_en: $str_dis );
        $p = &HDLcgi::table_row ( $p, 40, __('AppleShareネットワーク共有')              , ($servhash{"netatalk"} == 1)? $str_en: $str_dis );
        $p = &HDLcgi::table_row ( $p, 40, __('FTP')                                     , ($servhash{"vsftpd"} == 1)?   $str_en: $str_dis );
        $p = &HDLcgi::table_row ( $p, 40, __('DLNA Server')                             , ($servhash{"dlna"} == 1)?     $str_en: $str_dis );
}

ついでに、 /usr/local/www/gate/service.cgi にも同じように条件分けされてる部分があるので編集の必要がありそうだ。 &HDLcgi::table_header( __('共有サービスの設定') );


if( $modelname eq 'HDL-GTR' ) {

&HDLcgi::table_row( $p, 40, "<center>" . __('有効にするサービスの選択') . "</center>"
        , &HDLcgi::popup_help( qq||
        . qq|<input type="checkbox" name="samba"  value="1" $samba_on > |
        .  __('Microsoftネットワーク ファイル共有') . qq|    |
        . qq|<input type="checkbox" name="sambalog"  value="1" $sambalog_on >|. __('アクセスログを記録') . "<p>", "svc_sambalog" )
        . &HDLcgi::popup_help( qq|<input type="checkbox" name="atalk"  value="1" $atalk_on > |
        . __('AppleShareネットワーク ファイル共有') . "<p>", "svc_netatalk" )
        . &HDLcgi::popup_help( qq|<input type="checkbox" name="vsftpd" value="1" $vsftpd_on> |
        . __('FTP') . "<p>", "svc_ftp" )
        , ( $modelname eq 'HDL-GTR' )?  "select_gtr" : "select"
        );

}else{

&HDLcgi::table_row( $p, 40, "<center>" . __('有効にするサービスの選択') . "</center>"
        , &HDLcgi::popup_help( qq|<input type="checkbox" name="samba"  value="1" $samba_on > |
        .  __('Microsoftネットワーク ファイル共有') . "<p>", "svc_samba" )
        . &HDLcgi::popup_help( qq|<input type="checkbox" name="atalk"  value="1" $atalk_on > |
        . __('AppleShareネットワーク ファイル共有') . "<p>", "svc_netatalk" )
        . &HDLcgi::popup_help( qq|<input type="checkbox" name="vsftpd" value="1" $vsftpd_on> |
        . __('FTP') . "<p>", "svc_ftp" )
        . &HDLcgi::popup_help( qq|<input type="checkbox" name="dlnasv" value="1" $dlnasv_on> |
        . __('DLNA Server') . qq|  <a href="/gate/dlnafilter.cgi">| . __('アクセス制限') . qq|</a></div><DIV><IMG Src="/img/dixim_logo.gif" Style="height: 38px; width: 50px;">|, "svc_dlna" )

        , "select"
        );
}

HDL-GTRX化のための調査 その2

2008年10月13日 23時17分21秒 | HDL-GT
/usr/local/www/gate/ にDLNAに関する設定ページが格納されている
管理web画面にログインし、直接URLをたたくと表示がされる。
http://landisk/gate/dlnafilter.cgi

このページでやってることは
/mnt/hda5/dmsf_data/conf/access/default に
アクセス定義を書く処理等のようです。

sh-2.05b# cat /usr/local/www/gate/dlnafilter.cgi

#!/usr/bin/perl
# -*- mode: landisk-perl; coding: utf-8; -*-
#
# dlnafilter.cgi: DLNA アクセス制限の設定
# Copyright (C) 2004-2007 I-O DATA DEVICE,INC. ALL RIGHTS RESERVED.
#

# for debug
#use warnings;
#use strict;

sub BEGIN {
push(@INC, '/usr/local/bin');
push(@INC, '/usr/local/www/gate');
}

require "cgi-lib.pl";&ReadParse;

use POSIX;
use Locale::gettext;

use HDLdefines;
use HDLcgi;

sub __ {
dcgettext('dlnafilter', shift, LC_MESSAGES);
}


###############################################################################
# メインルーチン
###############################################################################
setlocale(LC_MESSAGES, &$HDLdefines::lang());
bindtextdomain('dlnafilter', '/usr/local/share/locale/www/gate');

## loginチェック
&HDLcgi::check_login( %in );

$| = 1;#バッファリング禁止。

##################################################################
#親プロセス
if ($pid = fork){

$res = waitpid $pid, 0; #子プロセス終了を待つ

exit(0);
}

##################################################################
#子プロセス
elsif(defined $pid){

require 'HDLsystem.pm';

# LEDの設定
$sys = HDLsystem->new( exclusive => 1 );
if (!defined $sys){
&HDLcgi::hdl_err_message("HDLsystem");
goto end_exit;
}
$sys->after_led( status => 'status_on' ),
$sys->set_led ( status => 'status_fastblink' );

# 引数取得
my $accesslist_in = $in{"accesslist"};
my $modifylist_in = $in{"modifylist"};
my $btn = $in{"btn"};
my $btn_allow = $in{"btn_allow"};
my $btn_deny = $in{"btn_deny"};
my $btn_del = $in{"btn_del"};
my @mac_list = ();
my $index;
my @access_tmp = ();
my @access_ip = ();
my @modify_tmp = ();
my @modify_ip = ();
my $access_btn = "";
my $modify_btn = "";

# DLNA アクセス制限モード取得
my $dlnaaccess = `sudo cat /mnt/hda5/dmsf_data/conf/access/default`;
chomp $dlnaaccess;

# ボタン処理
if ( $btn eq __('デフォルトを許可→禁止に変更') ) {
`sudo rm -f /mnt/hda5/dmsf_data/conf/access/default > /dev/null`;
`sudo sh -c 'echo deny > /mnt/hda5/dmsf_data/conf/access/default'`;
$dlnaaccess = "deny";
`sudo /etc/rc2.d/S98dlna restart > /dev/null`;
} elsif ( $btn eq __('デフォルトを禁止→許可に変更') ) {
`sudo rm -f /mnt/hda5/dmsf_data/conf/access/default > /dev/null`;
`sudo sh -c 'echo allow >> /mnt/hda5/dmsf_data/conf/access/default'`;
$dlnaaccess = "allow";
`sudo /etc/rc2.d/S98dlna restart > /dev/null`;
} elsif ( $btn_allow eq __('許可') ) {
if ( $dlnaaccess eq "allow" ) {
@maclist = split(/�/,$modifylist_in);
foreach (@maclist) {
`sudo cp -pf /mnt/hda5/dmsf_data/conf/access/deny/$_ /mnt/hda5/dmsf_data/conf/access/allow/ > /dev/null`;
`sudo rm -f /mnt/hda5/dmsf_data/conf/access/deny/$_ > /dev/null`;
}
} else {
@maclist = split(/�/,$accesslist_in);
foreach (@maclist) {
`sudo cp -pf /mnt/hda5/dmsf_data/conf/access/deny/$_ /mnt/hda5/dmsf_data/conf/access/allow/ > /dev/null`;
`sudo rm -f /mnt/hda5/dmsf_data/conf/access/deny/$_ > /dev/null`;
}
}
`sudo /etc/rc2.d/S98dlna restart > /dev/null`;
} elsif ( $btn_deny eq __('禁止') ) {
if ( $dlnaaccess eq "allow" ) {
@maclist = split(/�/,$accesslist_in);
foreach (@maclist) {
`sudo cp -pf /mnt/hda5/dmsf_data/conf/access/allow/$_ /mnt/hda5/dmsf_data/conf/access/deny/ > /dev/null`;
`sudo rm -f /mnt/hda5/dmsf_data/conf/access/allow/$_ > /dev/null`;
}
} else {
@maclist = split(/�/,$modifylist_in);
foreach (@maclist) {
`sudo cp -pf /mnt/hda5/dmsf_data/conf/access/allow/$_ /mnt/hda5/dmsf_data/conf/access/deny/ > /dev/null`;
`sudo rm -f /mnt/hda5/dmsf_data/conf/access/allow/$_ > /dev/null`;
}
}
`sudo /etc/rc2.d/S98dlna restart > /dev/null`;
} elsif ( $btn_del eq __('削除') ) {
@maclist = split(/�/,$accesslist_in);
foreach (@maclist) {
`sudo rm -f /mnt/hda5/dmsf_data/conf/access/$dlnaaccess/$_ > /dev/null`;
}
`sudo /etc/rc2.d/S98dlna restart > /dev/null`;
}


my $allow = `sudo ls -1 /mnt/hda5/dmsf_data/conf/access/allow`;
my $deny = `sudo ls -1 /mnt/hda5/dmsf_data/conf/access/deny`;

if ($dlnaaccess eq "allow") {
@access_tmp = split( /n/ , $allow );
@modify_tmp = split( /n/ , $deny );
} else {
@access_tmp = split( /n/ , $deny );
@modify_tmp = split( /n/ , $allow );
}
$index = 0;
foreach (@access_tmp) {
$access_ip[$index] = `sudo cat /mnt/hda5/dmsf_data/conf/access/$dlnaaccess/$_`;
$index++
}
# accessボタン
if ( $index > 0 ) {
if ($dlnaaccess eq "allow") {
$access_btn = qq|<input type="submit" value="| . __('禁止') . qq|" name="btn_deny">'."n".'<input type="submit" value="| . __('削除') . qq|" name="btn_del">|;
} else {
$access_btn = qq|<input type="submit" value="| . __('許可') . qq|" name="btn_allow">'."n".'<input type="submit" value="| . __('削除') . qq|" name="btn_del">|;
}
} else {
$access_btn = "";
}

$index = 0;
foreach (@modify_tmp) {
if ($dlnaaccess eq "allow") {
$modify_ip[$index] = `sudo cat /mnt/hda5/dmsf_data/conf/access/deny/$_`;
} else {
$modify_ip[$index] = `sudo cat /mnt/hda5/dmsf_data/conf/access/allow/$_`;
}
$index++
}

# modifyボタン
if ( $index > 0 ) {
if ($dlnaaccess eq "allow") {
$modify_btn = qq|<input type="submit" value="| . __('許可') . qq|" name="btn_allow">|."n";
} else {
$modify_btn = qq|<input type="submit" value="| . __('禁止') . qq|" name="btn_deny">|."n";
}
} else {
$modify_btn = "";
}


#
# HTML出力
#
if ($dlnaaccess eq "allow") {
&HDLcgi::page_header(
__('アクセス制限(デフォルト許可)'),
'',
'',
'',
'',
''
);
} else {
&HDLcgi::page_header(
__('アクセス制限(デフォルト禁止)'),
'',
'',
'',
'',
''
);
}

print < <SCRIPT LANGUAGE="JavaScript">

</SCRIPT>
EOM

print qq|<form name="thispage" method="get" action="/gate/wait_page.cgi" onSubmit="return disable()">n|;

#
# 新規ユーザの操作メニュー
#

&HDLcgi::table_header ( __('アクセスがあったDLNAクライアント') );
&HDLcgi::sub_header( __('選択'), __('MACアドレス'), __('IPアドレス') );
$p = 0;
$index = 0;
foreach ( @access_tmp ) {
$p = &HDLcgi::table_row3 ($p, 10, qq|
n<input type="checkbox" name="accesslist" value="$_">n
|, 40, $_, $access_ip[$index]);
$index++;
}
&HDLcgi::table_footer();
print $access_btn;
print "";

if ($dlnaaccess eq "allow") {
&HDLcgi::table_header( __('アクセスを禁止するDLNAクライアント') );
} else {
&HDLcgi::table_header( __('アクセスを許可するDLNAクライアント') );
}
&HDLcgi::sub_header( __('選択'), __('MACアドレス'), __('IPアドレス') );
$p = 0;
$index = 0;
foreach ( @modify_tmp ) {
$p = &HDLcgi::table_row3 ($p, 10, qq|
n<input type="checkbox" name="modifylist" value="$_">n
|, 40, $_, $modify_ip[$index]);
$index++;
}
&HDLcgi::table_footer();
print $modify_btn;
print "";
if ($dlnaaccess eq "allow") {
print qq|
n<input type=submit name=btn value="| . __('デフォルトを許可→禁止に変更') . qq|">n
nn|;
} else {
print qq|
n<input type=submit name=btn value="| . __('デフォルトを禁止→許可に変更') . qq|">n
n|;
}
print qq|<input type=hidden name=next value="/gate/dlnafilter.cgi">n|;

print "</form>n";
&HDLcgi::page_footer();
goto end_exit;


end_exit:
undef $sys;
exit (0);

}

HDL-GTRX化のための調査

2008年10月13日 23時04分07秒 | HDL-GT
コメントをいただいたようなので、DLNAについて再度調べてみる。
DLNAを有効化する際にキックする起動シェルは
/etc/init.d/dlna であり
# /etc/init.d/dlna start とすれば起動する。
ちなみに、起動シェルを眺めてみれば、configファイルがどこにあるかは一目瞭然。
/mnt/hda5/dmsf/config です。


sh-2.05b# cat /etc/init.d/dlna
#!/bin/sh
#
# chkconfig: 2345 95 5
# description: DiXiM Media Server
#
# $Id: dmsfactrl,v 1.5 2003/08/13 11:13:06 cvs Exp $

# configuration
config=/mnt/hda5/dmsf/config
. "$config"
program_path="$program_home/$program_name"
pid="/var/run/$program_name".pid

ulimit -n 1100
export CHARACTER_ENCODING="UTF8"

[ -x $program_path ] || exit 1

start() {

echo -n "Starting DLNAServer : "
host_name=$(hostname)
echo -n $host_name > $data_home/conf/friendly_name
# Start daemon.
if [ -e $pid ]; then
if [ -e "/proc/"`cat $pid` ]; then
echo "Already Started"
return 1
else
rm -f $pid
fi
fi
$program_path $account $data_home $pid &
echo "[ OK ]"
}

stop() {
# Stop daemon.
echo -n "Shutting down DLNAServer : "
if [ -e $pid ]; then
kill `cat $pid`
sleep 1
killall dmsf >& /dev/null
sleep 1
killall dmsf >& /dev/null
sleep 1
killall dmsf >& /dev/null
sleep 1
killall dmsf >& /dev/null
sleep 1
killall dmsf >& /dev/null
sleep 1
killall dmsf >& /dev/null
sleep 1
killall dmsf >& /dev/null
sleep 1
kill -KILL `cat $pid`
rm -f $pid
echo "[ OK ]"
return 0
else
killall dmsf >& /dev/null
echo "[ OK ]"
return 0
fi
}

restart() {
stop
sleep 1
start
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: "$program" {start|stop|restart}"
exit 1
esac

exit $?

--------------------------------------------
--------------------------------------------

sh-2.05b# cat /mnt/hda5/dmsf/config
program_name="dmsf"
ctrl_name="dmsfctrl"
program_home="/mnt/hda5/$program_name"
data_home="/mnt/hda5/dmsf_data"
init_home="/etc/init.d"
account="root"