portaudit と DISABLE_VULNERABILITIES2006年10月30日 10時04分18秒

portautit は脆弱性のある port のデータベースだ。これをインストールすると、脆弱性の見つかっている port を調べたり、ports の更新時に、脆弱性があることを教えてくれる。

ただ、ports を更新時に portaudit が自動的に呼び出されるために、脆弱性があるのが見つかると更新を止めてしまうのが、時によっては頭痛の種だ。

そこで、DISABLE_VULNERABILITIES=yes とすることにより、ports 更新時の自動点検を無効にすることが出来る。ports/Mk/bsd.ports.mk によると、


check-vulnerable:
.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING)
    @if [ -f "${AUDITFILE}" ]; then \
        audit_created=`${_EXTRACT_AUDITFILE} | \
            ${SED} -nEe "1s/^#CREATED: *([0-9]{4})-?([0-9]{2})-?([0-9]{2}).*$$/\
1\2\3/p"`; \
        audit_expiry=`/bin/date -u -v-14d "+%Y%m%d"`; \
        if [ "$$audit_created" -lt "$$audit_expiry" ]; then \
            ${ECHO_MSG} "===>  WARNING: Vulnerability database out of date, chec
king anyway"; \
        fi; \
        vlist=`${_EXTRACT_AUDITFILE} | ${GREP} "${PORTNAME}" | \
            ${AWK} -F\| ' /^[^#]/ { \
                if (!system("${PKG_VERSION} -T \"${PKGNAME}\" \"" $$1 "\"")) \  
                    print "=> " $$3 ".\n   Reference: <" $$2 ">" \
            } \
        '`; \
        if [ -n "$$vlist" ]; then \
            ${ECHO_MSG} "===>  ${PKGNAME} has known vulnerabilities:"; \
            ${ECHO_MSG} "$$vlist"; \
            ${ECHO_MSG} "=> Please update your ports tree and try again."; \
            exit 1; \
        fi; \
    else \
        ${ECHO_MSG} "===>  Vulnerability check disabled, database not found"; \
    fi
.endif

いきなり、.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING) があるので、DISABLE_VULNERABILITIES 有効、つまり portautio を使うのが無効になっていると、portaudit が入っていないのと同じように動作する。

基本的には ports 更新時に portaudit が起動されるのに不満はないのだが、選べないのには困ったことがある。事情があって更新できない場合に、止まってしまうのだ。出来れば、ユーザの入力を待って、脆弱性があるのを黙認しつつ更新してくれたら嬉しいのだが。

今は、portautit は入っているが、ports 更新時には無効になるようにしている。ports 更新後に、手動で portaudit を起動すればいいだけなので、ソースに手をいれる程、欲しい機能ではない。