Trick or Treat!

Lilith タスクリスト

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);

}


最新の画像もっと見る

コメントを投稿