$Id$ 與 $FreeBSD$ 的差別
因為 CVE-2007-2926: Predictable query ids in named(8) 的關係,前幾天就一直在跑 cvsup,卻一直更新不到修正過的版本,直到剛剛才發現,原來是烏龍一場。
因為 cvsup server 不一定有即時同步的關係,跑完之後還是要檢查一下檔案版本,看有沒有真的更新到修正後的版本。確認有更新對之後,再來 make world 等。
我用的是 RELENG_6,依據 FreeBSD-SA-07:07.bind,src/contrib/bind9/bin/named/client.c 要 1.1.1.2.2.3 以後才有修正到,可是不管我怎麼跑 cvsup,src/contrib/bind9/bin/named/client.c 都是 1.176.2.13.4.31.6.1 版。
檢查 FreeBSD 的 cvsweb,上面顯示該檔的 RELENG_6 最新版確實是 1.1.1.2.2.3 版沒錯。可是不管我向 cvsup9.tw.freebsd.org 還是 cvsup.tw.freebsd.org,甚至是 cvsup.freebsd.org 跑 cvsup,更新完後的檔案,一樣都是 1.176.2.13.4.31.6.1 版。在 #bsdchat 上請教,其他人也說,抓下來的是 1.176.* 版,不管是 RELENG_6 亦或是 RELENG_6_2 皆然。
所以這到底是怎麼一回事呢?
最後,在我從 cvsweb 上把 view text 點下去後,終於發現問題之所在。cvsweb 上面是 1.176.2.13.4.31.6.1 版,但點下去看原始 source code 卻是:
... /* $Id: client.c,v 1.176.2.13.4.31.6.1 2007/06/26 04:14:55 marka Exp $ */ #include <config.h>...
至此,真相大白,問題在於 $Id$ 是 ISC 的 cvs 在用的,而 FreeBSD 用的則是 $FreeBSD$。所以說,$Id: client.c,v 1.176.2... 這個是 ISC 那邊的 cvs 的版本號。大概因為是 contrib/ 的程式碼,所以不會把 $FreeBSD$ 放進去[1]。
所以從頭到尾,cvsup 都有成功更新到最新版,只是因為程式碼裡的 $Id$ 顯示的是原始來源的 CVS 版號,而不是進 FreeBSD 後的 CVS 版號。所以造成誤解了。把程式碼比對一下 cvsweb 上的 diff,就可以確定,補洞成功的版本已經正確抓下來了。
- 大概是這個原因吧?爽大說
14:10 <@cls_bsd> 那就爛下去好了 XD,所以到底該不該有$FreeBSD$我也不清楚。 ↩
Post a Comment