/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);
}
管理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>
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|
$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|
$index++;
}
&HDLcgi::table_footer();
print $modify_btn;
print "";
if ($dlnaaccess eq "allow") {
print qq|
} else {
print qq|
}
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);
}
※コメント投稿者のブログIDはブログ作成者のみに通知されます