McCoyでem:signatureが入らない問題解決
さぁ、McCoyをはじめよう!!とLatest topics > XML署名とハッシュを使って安全な方法でアドオンを更新できるようにする – outsider reflexを参考にupdate.rdfに署名を入れようとするものの、McCoyでsignを押すと黙って処理が完了するもののちっとも署名が入らなくてずっと困っていました。
けっきょく
<?xml version="1.0" encoding="utf-8"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<RDF:Description about="extensionName@ido.nu">
の部分が正しくないのが原因でした。
urn:mozilla:extension:extensionName@ido.nu
と書かないといけません。書き換えたら解決。
いやそれ誰も間違ってないから、というかんじですが。
これでFirefox3でもちゃんと拡張機能をアップデートできるようになったけど、インストールのときに赤文字で表示されてるunsignedっていうのはどうやったらsignedになるんだろう。
ちなみにXSLTプロセッサのxsltprocがべんりで書いたやつをちょっと修正して、いまは
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:em="http://www.mozilla.org/2004/em-rdf#"
xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:template match="/">
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<RDF:Description>
<xsl:attribute name="about"><xsl:value-of select="concat('urn:mozilla:extension:',//RDF:Description[@RDF:about='urn:mozilla:install-manifest']/@em:id)"/></xsl:attribute>
<em:updates>
<RDF:Seq>
<RDF:li>
<RDF:Description>
<em:version><xsl:value-of select="//RDF:Description[@RDF:about='urn:mozilla:install-manifest']/@em:version"/></em:version>
<em:targetApplication>
<RDF:Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion><xsl:value-of select="//RDF:Description/@em:minVersion"/></em:minVersion>
<em:maxVersion><xsl:value-of select="//RDF:Description/@em:maxVersion"/></em:maxVersion>
<em:updateLink><xsl:value-of select="concat( substring-before(//RDF:Description/@em:updateURL,'update.rdf'), '*')"/></em:updateLink>
<em:updateHash>*</em:updateHash>
</RDF:Description>
</em:targetApplication>
</RDF:Description>
</RDF:li>
</RDF:Seq>
</em:updates>
</RDF:Description>
</RDF:RDF>
</xsl:template>
</xsl:stylesheet>
こういうXSLTをperlで書いたスクリプトでxsltprocを通してその結果を置換して作っています。xsltprocにもうひとつXMLファイルを読ませてXSLTだけで完結させられるんだと思うけどわからないのでとりあえず…
#!/usr/bin/perl
use Digest::SHA1;
my $filename = shift;
open F, "<$filename";
my $sha1 = Digest::SHA1->new();
$sha1->addfile(*F);
my $digest = $sha1->hexdigest;
my @result = qx{xsltproc style.xsl install.rdf};
foreach ( @result ) {
/(em:updateHash)/ and s/\*/sha1:$digest/;
/(em:updateLink)/ and s/\*/$filename/;
print;
}
Makefileに
update.rdf:style.xsl install.rdf $(XPIFILE) ./sign $(XPIFILE) > update.rdf
というのを書いといて
make update.rdf
でupdate.rdfがアップデートされるようにしてます。
About this entry
You’re currently reading “McCoyでem:signatureが入らない問題解決,” an entry on ku
- Published:
- 2007.12.27 / 1pm
- Category:
- Firefox

2 Comments
Jump to comment form | comments rss [?] | trackback uri [?]