2019年08月07日

S-nail v14.9.14 がビルドできない

メールクライアント S-nailv14.9.14 が 7/27(土) 付でリリースされたのですが、CONFIG=NULLI でビルドできないので、以下のパッチを当てて対応。これで本当に良いのかは不明なので、使用にあたっては自己責任でお願いします。
diff -ru ../s-nail-14.9.14.ORG/include/mx/cred-auth.h ./include/mx/cred-auth.h
--- ../s-nail-14.9.14.ORG/include/mx/cred-auth.h 2019-07-28 06:16:38.000000000 +0900
+++ ./include/mx/cred-auth.h 2019-08-05 10:18:45.708201373 +0900
@@ -20,8 +20,6 @@
#define mx_CRED_AUTH_H

#include <mx/nail.h>
-#ifdef mx_HAVE_NET
-
#include <mx/url.h>

#define mx_HEADER
@@ -56,6 +54,5 @@
enum cproto cproto, char const *addr);

#include <su/code-ou.h>
-#endif /* mx_HAVE_NET */
#endif /* mx_CRED_AUTH_H */
/* s-it-mode */
diff -ru ../s-nail-14.9.14.ORG/include/mx/termcap.h ./include/mx/termcap.h
--- ../s-nail-14.9.14.ORG/include/mx/termcap.h 2019-07-28 06:16:38.000000000 +0900
+++ ./include/mx/termcap.h 2019-08-05 10:38:45.258437684 +0900
@@ -221,6 +221,6 @@
# define mx_TERMCAP_SUSPEND(CPL) do{;}while(0);
#endif

-#include <su/code-ou.h>
+#include <su/code.h>
#endif /* mx_TERMCAP_H */
/* s-it-mode */
diff -ru ../s-nail-14.9.14.ORG/include/mx/url.h ./include/mx/url.h
--- ../s-nail-14.9.14.ORG/include/mx/url.h 2019-07-28 06:16:38.000000000 +0900
+++ ./include/mx/url.h 2019-08-05 10:17:37.118187860 +0900
@@ -24,7 +24,7 @@
#define mx_HEADER
#include <su/code-in.h>

-#ifdef mx_HAVE_NET /* XXX only for now */
+/* XXX only for now */
enum mx_url_flags{
mx_URL_TLS_REQUIRED = 1u<<0, /* Whether protocol always uses SSL/TLS.. */
mx_URL_TLS_OPTIONAL = 1u<<1, /* ..may later upgrade to SSL/TLS */
@@ -62,7 +62,6 @@
char const *url_p_eu_h_p; /* .url_proto://.url_eu_h_p */
char const *url_p_eu_h_p_p; /* .url_proto://.url_eu_h_p[/.url_path] */
};
-#endif /* mx_HAVE_NET */

/* URL en- and decoding according to (enough of) RFC 3986 (RFC 1738).
* These return a newly autorec_alloc()ated result, or NIL on length excess */
posted by yamaga at 08:35| Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2008年12月23日

Team Cymru の Malware Hash Registry を使うための Perl スクリプト

ファイルの HASH値を whois (43/tcp) または dns (53/udp) で問い合わせると、それがマルウェアのデータベースに登録されているか否かを答えてくれるサービスを Team Cymru が提供しています。

Team Cymru - Malware Hash Registry
http://www.team-cymru.org/Services/MHR/

そこで、ファイルを指定するだけで HASH値を調べて、このサービスに問い合わせ、結果を表示してくれる Perl スクリプトを作ってみました(ちょっと見難いですが…)。
#!/usr/bin/perl

$#ARGV == 0 || die "$0 needs one argument!\n";

$file = "$ARGV[0]";
-e "$file" || die "$file: no such file!\n";

$sha1 = "openssl sha1";
$qfmt = "dig +short %s.malware.hash.cymru.com TXT";

open(SHA1, "$sha1 \"$file\" |") || die "Can't open \"$sha1\"!\n";
$_ = join "", <SHA1>;
close(SHA1);

( $digest ) = /([0-9a-f]{40})/;
( $digest eq "" ) && die "Can't find SHA1!\n";

$qcmd = sprintf("$qfmt", $digest);
open(QUEUE, "$qcmd |") || die "Can't open \"$qcmd\"!\n";
$_ = join "", <QUEUE>;
close(QUEUE);

( $t, $p ) = /\"([0-9]+) ([0-9]{1,3})\"/;
if ( $t ne "" && $p ne "" ) {
print "$p% (";
print scalar localtime($t);
print ")\n";
exit(1);
} else {
print "no data in database.\n";
}

exit(0);
これは内部から HASH値の取り出しに openssl、dns問い合わせに dig を使っています。大概の Unix系 OS ならばこのまま使えると思いますが、Windows のように標準でこれらのコマンドを有していない場合は次のように書き換えてください。

(1) HASH値の取り出し
(旧) $sha1 = "openssl sha1";
(新) $sha1 = "fciv -sha1";
fciv は Windows 標準ではありませんが、Microsoft が無償で提供しているツールです。

Microsoft サポート オンライン
可用性と ファイル チェックサム整合性検証 ユーティリティの説明
http://support.microsoft.com/kb/841290/ja

fciv.exe を PATH の通った場所にインストールしてください。

(2) dns問い合わせ
(旧) $qfmt = "dig +short %s.malware.hash.cymru.com TXT";
(新) $qfmt = "nslookup -q=txt %s.malware.hash.cymru.com 2>&1";

また dnsではなく whoisを使う場合は次のように書き換えてください。
(旧) $qfmt = "dig +short %s.malware.hash.cymru.com TXT";
(新) $qfmt = "whois -h hash.cymru.com %s";
(旧) ( $t, $p ) = /\"([0-9]+) ([0-9]{1,3})\"/;
(新) ( $t, $p ) = /^$digest ([0-9]+) ([0-9]{1,3})/;

なお、Windows では ActivePerl 5.10.0 での動作を確認しています。

ActivePerl
http://aspn.activestate.com/ASPN/Downloads/ActivePerl/
posted by yamaga at 10:41| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2008年12月21日

mt-daapd のログに吐き出される曲名を UTF-8 に戻すプログラム

mt-daapd (firefly) のログに吐き出される曲名は非ASCII文字が \M-x とか \M^x に変換されてしまうので、それを元 (UTF-8) に戻すフィルタプログラムをちょいちょいと書いてみました。
#include <stdio.h>
#include <stdlib.h>

int main()
{
unsigned int c, c2, c3, c4;

while( (c=getchar()) != EOF) {
if (c == '\\') {
if ((c2=getchar()) == EOF) { break; }
if ((c3=getchar()) == EOF) { break; }
if ((c4=getchar()) == EOF) { break; }
if (c2 == 'M' && c3 == '-') {
printf("%c", c4+128);
} else if (c2 == 'M' && c3 == '^') {
printf("%c", c4+64);
} else if (c2 == '2' && c3 == '4' && c4 == '0') {
printf("%c", ' '+128);
} else {
printf("%c%c%c%c", c, c2, c3, c4);
}
} else {
putchar(c);
}
}

exit(0);
}
このソースをコンパイルして、
cat ログファイル | このプログラム | UTF-8を表示できるページャ
とすれば OK のはず。

でもイマドキの人はこんなプログラム、Perl かなんかで書くんでしょうね (^^;;;
posted by yamaga at 21:00| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする