Windows XP SP3 (32bit)での話。
事前に「.NET Framework 4」やら「Windowsインストーラ4.5」やら「Windows PowerShell 1.0」のインストールが必要。
管理ツール -> 「ローカルセキュリティポリシー」 -> 「ローカルポリシー」 -> 「ユーザ権利の割り当て」の「プログラムのデバッグ」に「NETWORK SERVICE」やら「LOCAL SERVICE」やらデータベース管理者を追加した。
また同じく「ローカルセキュリティポリシー」の「サービスとしてログオン」から古いバージョンのSQL Serverのユーザを削除した。
インストールが失敗した場合、再インストールの前に「プログラムの追加と削除」でインストールしたインスタンスを削除する必要あり。
厄介なこった。
(参考)
http://awoni.net/fc/sql-server-2008-express/
http://d.hatena.ne.jp/haradago/20100211/p1
金曜日, 5月 11, 2012
金曜日, 4月 13, 2012
木曜日, 4月 12, 2012
IE + SSL + Flash (HTTPレスポンスヘッダーの怪)
Apacheの設定ファイルに
<LocationMatch "/var/www/html/private/.*\.(html|swf|gif|jpg|png)$">
Header set Pragma no-cache
Header set Cache-Control no-cache
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
</LocationMatch>
<LocationMatch "/var/www/html/private/.*\.(html|swf|gif|jpg|png)$">
Header set Pragma no-cache
Header set Cache-Control no-cache
Header set Expires "Thu, 01 Dec 1994 16:00:00 GMT"
</LocationMatch>
とか書いて特定のディレクトリのファイルがキャッシュされないようにしている場合
IEでhttps接続するとFlashが再生されないことがある。
原因は
Header set Pragma no-cache
らしい。要注意。
水曜日, 4月 11, 2012
JavaScript: FlashPlayerバージョン確認
var flashPlayerVer = (function() {
var flashVer = 0,
plugin,
verParts,
flashOCX;
if (navigator.plugins
&& navigator.mimeTypes['application/x-shockwave-flash']) {
plugin = navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;
if (plugin) {
verParts = plugin.description.split(" ");
flashVer = verParts[2].replace('.', ',') + ',' + verParts[3].substring(1);
}
}
else {
flashOCX = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7").GetVariable("$version");
if (flashOCX) {
flashVer = (flashOCX.split(" "))[1];
}
}
return flashVer;
})();
var flashVer = 0,
plugin,
verParts,
flashOCX;
if (navigator.plugins
&& navigator.mimeTypes['application/x-shockwave-flash']) {
plugin = navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;
if (plugin) {
verParts = plugin.description.split(" ");
flashVer = verParts[2].replace('.', ',') + ',' + verParts[3].substring(1);
}
}
else {
flashOCX = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7").GetVariable("$version");
if (flashOCX) {
flashVer = (flashOCX.split(" "))[1];
}
}
return flashVer;
})();
木曜日, 2月 23, 2012
Perl: Linux -> SQLServer 画像ファイル格納
LinuxマシンからWindowsマシンのSQL ServerにはFreeTDSとunixODBCで接続できるようになっている前提。
データベース接続にはDBIとDBD::ODBCを使う。
DBD::Sybaseではプレースホルダーが使えない(?)のでDBD::ODBCしかないが、動きが怪しい。
レコードが存在する場合にupdateしようとしたがうまくいかない。
そこで、レコードが存在する場合deleteしてinsertすることにしたが、これも同一接続内ではうまくいかない。
仕方ないので、select、deleteで一旦切断し、insert用に再度接続するようにした。
以下サンプル。
#!/usr/bin/perl --
use MIME::Parser;
use DBI;
use warnings;
use strict;
my $dbname = 'hoge';
my $user_id = "";
my $item_id = '10';
my $parser = new MIME::Parser;
$parser->output_to_core(1);
my $entity;
eval {
local $SIG{ALRM} = sub { die "timeout" };
alarm 10;
$entity = $parser->parse(\*STDIN) or die;
alarm 0;
};
alarm 0;
if ($@) { exit; }
my $from = $entity->head->get('from');
if ($from =~ /<(.+?\@.+?)>/) {
$from = $1;
}
$user_id = _check_from($dbname, $from);
if ($user_id ne "" and $entity->is_multipart) {
_save_attached_file($entity, $dbname, $user_id, $item_id);
}
exit;
sub _connect_db($$$$) {
my $db_host = shift;
my $db_name = shift;
my $db_user = shift;
my $db_passwd = shift;
my $data_source = "dbi:ODBC:"
. "server=" . $db_host . ";"
. "database=" . $db_name;
my $dbh = DBI->connect($data_source, $db_user, $db_passwd)
or die $DBI::errstr;
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
return $dbh;
}
sub _check_from($$) {
my $dbname = shift;
my $from = shift;
my $user_id = "";
my $db_server = 'windows-db';
my $db_name = $dbname;
my $db_user = 'foo';
my $db_passwd = 'bar';
my $dbh
= _connect_db($db_server, $db_name, $db_user, $db_passwd);
my $stmt = "SELECT user_id"
. " FROM users WITH (NOLOCK)"
. " WHERE email = '$from'";
my $sth = $dbh->prepare($stmt)
or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
while (my $row = $sth->fetchrow_arrayref) {
($user_id) = @$row;
}
$sth->finish;
$dbh->disconnect;
return $user_id;
}
sub _save_attached_file($$$$) {
my $entity = shift;
my $dbname = shift;
my $user_id = shift;
my $item_id = shift;
my $parts_count = $entity->parts;
for (my $i = 1; $i < $parts_count; $i++) {
my $part_entity = $entity->parts($i) ?
$entity->parts($i) :
$entity->parts($i)->parts($i);
my $content_type = $part_entity->head->mime_type;
if ($content_type =~ /\/(html|plain|alternative)/) {
next;
}
my $attachment = $part_entity->bodyhandle->as_string;
my $filename = $part_entity->head->recommended_filename;
my $db_server = 'earth-db';
my $db_name = $dbname;
my $db_user = 'foo';
my $db_passwd = 'bar';
my $dbh
= _connect_db($db_server, $db_name, $db_user, $db_passwd);
my $stmt = "SELECT user_id FROM files WITH(NOLOCK)"
. " WHERE user_id = '$user_id'"
. " AND item_id = '$item_id'";
my $sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
my $result_user_id = "";
while (my $row = $sth->fetchrow_arrayref) {
($result_user_id) = @$row;
}
$sth->finish;
if ($result_user_id) {
$stmt = "DELETE FROM files"
. " WHERE user_id = '$user_id'"
. " AND item_id = '$item_id'";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
eval {
$sth->execute;
$dbh->commit;
};
if ($@) {
$dbh->rollback or die $dbh->errstr;
}
}
$dbh->disconnect;
$dbh = _connect_db($db_server, $db_name, $db_user, $db_passwd);
$stmt = "INSERT INTO files ("
. "user_id,"
. "item_id,"
. "content_type,"
. "content,"
. "filename,"
. "date"
. ") VALUES ("
. "'$user_id',"
. "'$item_id',"
. "'$content_type',"
. "?,"
. "'$filename',"
. "GETDATE()"
. ")";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->bind_param( 1, $attachment, DBI::SQL_LONGVARBINARY );
eval {
$sth->execute;
$dbh->commit;
};
if ($@) {
$dbh->rollback or die $dbh->errstr;
}
$dbh->disconnect;
last;
}
}
__END__
データベース接続にはDBIとDBD::ODBCを使う。
DBD::Sybaseではプレースホルダーが使えない(?)のでDBD::ODBCしかないが、動きが怪しい。
レコードが存在する場合にupdateしようとしたがうまくいかない。
そこで、レコードが存在する場合deleteしてinsertすることにしたが、これも同一接続内ではうまくいかない。
仕方ないので、select、deleteで一旦切断し、insert用に再度接続するようにした。
以下サンプル。
#!/usr/bin/perl --
use MIME::Parser;
use DBI;
use warnings;
use strict;
my $dbname = 'hoge';
my $user_id = "";
my $item_id = '10';
my $parser = new MIME::Parser;
$parser->output_to_core(1);
my $entity;
eval {
local $SIG{ALRM} = sub { die "timeout" };
alarm 10;
$entity = $parser->parse(\*STDIN) or die;
alarm 0;
};
alarm 0;
if ($@) { exit; }
my $from = $entity->head->get('from');
if ($from =~ /<(.+?\@.+?)>/) {
$from = $1;
}
$user_id = _check_from($dbname, $from);
if ($user_id ne "" and $entity->is_multipart) {
_save_attached_file($entity, $dbname, $user_id, $item_id);
}
exit;
sub _connect_db($$$$) {
my $db_host = shift;
my $db_name = shift;
my $db_user = shift;
my $db_passwd = shift;
my $data_source = "dbi:ODBC:"
. "server=" . $db_host . ";"
. "database=" . $db_name;
my $dbh = DBI->connect($data_source, $db_user, $db_passwd)
or die $DBI::errstr;
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
return $dbh;
}
sub _check_from($$) {
my $dbname = shift;
my $from = shift;
my $user_id = "";
my $db_server = 'windows-db';
my $db_name = $dbname;
my $db_user = 'foo';
my $db_passwd = 'bar';
my $dbh
= _connect_db($db_server, $db_name, $db_user, $db_passwd);
my $stmt = "SELECT user_id"
. " FROM users WITH (NOLOCK)"
. " WHERE email = '$from'";
my $sth = $dbh->prepare($stmt)
or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
while (my $row = $sth->fetchrow_arrayref) {
($user_id) = @$row;
}
$sth->finish;
$dbh->disconnect;
return $user_id;
}
sub _save_attached_file($$$$) {
my $entity = shift;
my $dbname = shift;
my $user_id = shift;
my $item_id = shift;
my $parts_count = $entity->parts;
for (my $i = 1; $i < $parts_count; $i++) {
my $part_entity = $entity->parts($i) ?
$entity->parts($i) :
$entity->parts($i)->parts($i);
my $content_type = $part_entity->head->mime_type;
if ($content_type =~ /\/(html|plain|alternative)/) {
next;
}
my $attachment = $part_entity->bodyhandle->as_string;
my $filename = $part_entity->head->recommended_filename;
my $db_server = 'earth-db';
my $db_name = $dbname;
my $db_user = 'foo';
my $db_passwd = 'bar';
my $dbh
= _connect_db($db_server, $db_name, $db_user, $db_passwd);
my $stmt = "SELECT user_id FROM files WITH(NOLOCK)"
. " WHERE user_id = '$user_id'"
. " AND item_id = '$item_id'";
my $sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->execute or die $dbh->errstr;
my $result_user_id = "";
while (my $row = $sth->fetchrow_arrayref) {
($result_user_id) = @$row;
}
$sth->finish;
if ($result_user_id) {
$stmt = "DELETE FROM files"
. " WHERE user_id = '$user_id'"
. " AND item_id = '$item_id'";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
eval {
$sth->execute;
$dbh->commit;
};
if ($@) {
$dbh->rollback or die $dbh->errstr;
}
}
$dbh->disconnect;
$dbh = _connect_db($db_server, $db_name, $db_user, $db_passwd);
$stmt = "INSERT INTO files ("
. "user_id,"
. "item_id,"
. "content_type,"
. "content,"
. "filename,"
. "date"
. ") VALUES ("
. "'$user_id',"
. "'$item_id',"
. "'$content_type',"
. "?,"
. "'$filename',"
. "GETDATE()"
. ")";
$sth = $dbh->prepare($stmt) or die $dbh->errstr;
$sth->bind_param( 1, $attachment, DBI::SQL_LONGVARBINARY );
eval {
$sth->execute;
$dbh->commit;
};
if ($@) {
$dbh->rollback or die $dbh->errstr;
}
$dbh->disconnect;
last;
}
}
__END__
水曜日, 1月 04, 2012
月曜日, 9月 26, 2011
火曜日, 8月 16, 2011
金曜日, 3月 25, 2011
金曜日, 2月 25, 2011
木曜日, 11月 18, 2010
木曜日, 9月 09, 2010
RootKit Hunterのインストール(CentOS)
CentOS 5.5にRootKit Hunterをインストールする。
rpmbuildコマンドがなければ、はじめにインストールする。
$ su
Password:
# yum install rpm-build
rkhunterのソースコードをダウンロードし、RPMパッケージを作成する。
# wget http://sourceforge.net/projects/rkhunter/files/rkhunter/1.3.6/rkhunter-1.3.6.tar.gz/download
# rpmbuild -ta rkhunter-1.3.6.tar.gz
作成されたRPMパッケージをインストールする。
# cd /usr/src/redhat/RPMS/noarch
# rpm -ivh rkhunter-1.3.6-1.noarch.rpm
rkhunterの使いかたは
# rkhunter -c
以上
rpmbuildコマンドがなければ、はじめにインストールする。
$ su
Password:
# yum install rpm-build
rkhunterのソースコードをダウンロードし、RPMパッケージを作成する。
# wget http://sourceforge.net/projects/rkhunter/files/rkhunter/1.3.6/rkhunter-1.3.6.tar.gz/download
# rpmbuild -ta rkhunter-1.3.6.tar.gz
作成されたRPMパッケージをインストールする。
# cd /usr/src/redhat/RPMS/noarch
# rpm -ivh rkhunter-1.3.6-1.noarch.rpm
rkhunterの使いかたは
# rkhunter -c
以上
月曜日, 9月 06, 2010
Perlワンライナー:.batファイルでドラッグ&ドロップ
(2010/04/30perlfreak.vox.comより転載)
例えばPerlがインストールされているWindowsでつぎの行を hoge.bat というファイル名で保存する。
for %%a in (%*) do perl -i.bak -ne "if (/^hoge_/) {print;}" %%a
hoge.bat に処理対象のテキストファイルをドラッグ&ドロップすると、処理前の内容は元ファイルに「.bak」がついたファイルにバックアップされ、元のファイルは行の先頭が「hoge_」の行のみ出力されたものになる。
便利。
登録:
投稿 (Atom)