Suponho que o arquivo de credenciais será lido por mount.cifs
, como para outras montagens CIFS. Então eu dei uma olhada em o arquivo de código mount.cifs.c
no código atual do cifs-utils , que deve ser para a versão 6.3. O código para ler a senha não faz escape, exceto que cada vírgula é dobrada no campo password
do parsed_mount_info
struct, como aparentemente é necessário ao montar os parâmetros para a chamada mount(2)
:
/*
* CIFS has to "escape" commas in the password field so that they don't
* end up getting confused for option delimiters. Copy password into pw
* field, turning any commas into double commas.
*/
static int set_password(struct parsed_mount_info *parsed_info, const char *src)
{
char *dst = parsed_info->password;
unsigned int i = 0, j = 0;
while (src[i]) {
if (src[i] == ',')
dst[j++] = ',';
dst[j++] = src[i++];
if (j > sizeof(parsed_info->password)) {
fprintf(stderr, "Converted password too long!\n");
return EX_USAGE;
}
}
dst[j] = '/*
* CIFS has to "escape" commas in the password field so that they don't
* end up getting confused for option delimiters. Copy password into pw
* field, turning any commas into double commas.
*/
static int set_password(struct parsed_mount_info *parsed_info, const char *src)
{
char *dst = parsed_info->password;
unsigned int i = 0, j = 0;
while (src[i]) {
if (src[i] == ',')
dst[j++] = ',';
dst[j++] = src[i++];
if (j > sizeof(parsed_info->password)) {
fprintf(stderr, "Converted password too long!\n");
return EX_USAGE;
}
}
dst[j] = '%pre%';
parsed_info->got_password = 1;
return 0;
}
';
parsed_info->got_password = 1;
return 0;
}
No caso de um arquivo de credenciais, src
aponta para a posição na linha de senha logo atrás do sinal =
. Tudo entre o sinal =
e o final da linha, conforme lido por fgets()
, é copiado no campo de senha. (A nova linha é substituída por um byte nulo antes da cópia.) Mas para qualquer outra maneira de definir uma senha, como variáveis de ambiente, opções ou stdin, a mesma rotina é chamada, portanto, se montar o volume funcionar na linha de comando, que a duplicação de vírgulas não é o culpado.
No entanto, você pode ter problemas se alguma linha contiver espaço em branco ou se o seu arquivo de credenciais tiver terminações de linha não-UNIX. Um CR final seria lido como parte da senha, assim como outros espaços em branco à direita. Da mesma forma, a leitura da senha pode falhar se sua senha contiver caracteres não-ASCII, nos quais a codificação do arquivo seria importante.
TL, DR:
- Nada precisa ser ignorado na senha
- Verifique se a montagem do volume CIFS funciona na linha de comando
- Verifique o espaço em branco à direita na linha de senha
- Verifique se o seu arquivo de credenciais tem formato UNIX e nenhuma linha DOS terminações
- Verifique se há caracteres não ASCII (como umlauts) na senha
- Verifique se funciona com uma senha sem vírgulas (realmente não deve fazer diferença, mas quem sabe)