[samba-jp:21623] Re: コンピュータアカウントの追加について

h-yamasaki @ pd.jp.nec.com h-yamasaki @ pd.jp.nec.com
2011年 10月 28日 (金) 19:27:51 JST


山崎と申します。

>問題だと思われる、cpu1$ではなくcpu1_になっている部分の前後です。

以下に登録されているバグのような気がします。
https://bugzilla.samba.org/show_bug.cgi?id=5722

2011-10-26に「3.6.xでもまだ発生する?」みたいなことが書いてあります。

で、手元にある3.5.8のソースを見たのですが、以下のような関数呼び出しがあります。

=======================================================================================
smb_set_primary_group() 
 → talloc_string_sub() 
  → talloc_string_sub2()  
=======================================================================================


ソースを引用すると以下。
=======================================================================================

int smb_set_primary_group(const char *unix_group, const char* unix_user)
{
 (中略)
		add_script = talloc_string_sub(ctx,
				add_script, "%u", unix_user);

  (後略)
=======================================================================================


=======================================================================================
char *talloc_string_sub(TALLOC_CTX *mem_ctx,
			const char *src,
			const char *pattern,
			const char *insert)
{
	return talloc_string_sub2(mem_ctx, src, pattern, insert,
			true, false, false);
}                                    ^^^^^★ここが偽
=======================================================================================

=======================================================================================

char *talloc_string_sub2(TALLOC_CTX *mem_ctx, const char *src,
			const char *pattern,
			const char *insert,
			bool remove_unsafe_characters,
			bool replace_once,
			bool allow_trailing_dollar) //★ここが偽
{

(中略)


	for (i=0;i<li;i++) {
		switch (in[i]) {
			case '`':
			case '"':
			case '\'':
			case ';':
			case '$':        //★★
				/* allow a trailing $
				 * (as in machine accounts) */
				if (allow_trailing_dollar && (i == li - 1 )) { 
					break; 
				}
			case '%':
			case '\r':
			case '\n':
				if (remove_unsafe_characters) {
					in[i] = '_';
					break;
				}
			default:
				/* ok */
				break;
		}
	}
(後略)

=======================================================================================

上記★★部分で、$がマッチしたときに、if文でallow_trailing_dollarが偽なので、$を見つけてもbreakしない。
よって、下に突き抜けて、remove_unsafe_charactersの方は真なので、'_'に置換する。

・・・という風になっているような気がするのですが、どうでしょう?

最新の3.6.xや、元質問メールの3.3.12のソースは見てないので違うのかもしれませんけども。




samba-jp メーリングリストの案内