[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 メーリングリストの案内