[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bsd-nomads:16061] Re: about pccardd strict matching



いわさきです

> pccardd のソースを眺めてみました
> 
> ---8<------8<--- src/usr.sbin/pccard/pccardd/cardd.c ---8<------8<------8<---
> static int
> cis_strcmp(char *db, char *cis)
> {
> 	....
> 	n = strlen(db);
> 	if (n > 2 && db[0] == '/' && db[n-1] == '/') {
> 	....
> 	} else {
> 		/* otherwise, matching by strncmp() */
> 		return strncmp(db, cis, n);
> 	}
> 	....
> }
> ---8<------8<------8<------8<------8<------8<------8<------8<------8<---

# 見覚えのあるコードです (^^;

> strncmp(db, cis, n) ここを strncmp(db, cis, ++n) とすれば記載順序に
> 関係なく認識できるものと思います。

いや、まず文字列長が一致するか検査し、その上でstrncmp()で比較するのが
いいと思います。
当時の変更履歴を見てみると、
        n = strlen(db);
-       return strncmp(db, cis, n);
-       /* XXX Add code for regex CIS string comparison here */
+       if (n > 2 && db[0] == '/' && db[n-1] == '/') {
+               /* matching by regex */
となっているので、これはかなり昔から潜在していた虫さんなんですね。

> 今の比較は pccard.conf に記述されてるとこまで一致していれば、それ
> 以降がどうでも一致となってしまうために、LPC2-TX が LPC2-T と
> 誤認されてしまうような事が起こりえるでしょう。

その通りですね。後で直しておきます。

では