2012年12月31日 : してログ

文字列操作系の関数には以下のようなものがあります。

関数名 機能
concat()
contains()
format-number()
normalize-space()
starts-with()
string()
string-length()文字数の取得(バイト数ではない)します。要素が空を判断するのにこの関数を使用して、0 であるか否かで判断できます。
substring()
substring-before()
substring-after()
translate()

関数による式を挿入するには、下記のように記述すればよいでしょう。

<xsl:value-of="関数の表現"/>

Windows 2000 Server の IIS4 を使って、サーバーサイド XSLT 適用を行うサンプルです。適当なWebサイト上に下記ファイルを作り、aspをリクエストしてください。

public_office.xml

<?xml version="1.0" encoding="shift_jis" ?>
<prefecture>
  <city>
    <name>○○さん</name>
    <address>××市□□町</address>
    <url>http://www.example.jp/</url>
  </city>
</prefecture>

public_office.xsl

<?xml version="1.0" encoding="shift_jis" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="shift_jis" omit-xml-declaration="yes"/>

<xsl:template match="/">
  <xsl:apply-templates select="prefecture"/>
</xsl:template>

<xsl:template match="prefecture">
  <xsl:apply-templates select="city"/>
</xsl:template>

<xsl:template match="city">
  <xsl:value-of select="name"/>
</xsl:template>

</xsl:stylesheet>

public_office.asp

<%

Set objXML = Server.CreateObject("Microsoft.XMLDOM")
Set objXSL = Server.CreateObject("Microsoft.XMLDOM")

objXSL.async = false
objXSL.load Server.MapPath("public_office.xsl")

objXML.async = false
objXML.load Server.MapPath("public_office.xml")

Response.Write (objXML.documentElement.transformNode (objXSL.documentElement))

%>

aliases にパイプを追加

default.example.com: |/path/to/auto/mail/catch.sh

/etc/smrsh/ に実行するコマンドを指定

cd /etc/smrsh
ln -s /path/to/auto/mail/catch.sh ./

/path/to/auto/mail/catch.sh はこうなってる

#/bin/sh
sudo -u user /path/to/auto/mail/catch.php

/etc/sudoers に実行許可するコマンドを入れる

mail ALL = (user) NOPASSWD: /path/to/auto/mail/catch.php

/etc/sudoers の以下の行をコメントアウト

#Defaults    requiretty
  • パイプ時は、mailユーザー権限で実行されるので、他のユーザーで実行するときはsudoを使う
  • sudoはsudoersに追加したコマンドしか実行できない
  • sudoersは440になっているので、一時的に660などにして編集する
  • パスなしのユーザーは、NOPASSWD:を入れないと実行できない