Modo de chamada do sistema 'aberto' não funciona

2

Estou escrevendo um código simples sobre como abrir um arquivo com O_CREAT | O_WDONLY | O_EXCL flags. O código é assim:

int fd = open(fileName, O_WRONLY | O_CREAT | O_EXCL, 0777);

Funciona bem, exceto pela parte modo (permissão). O que eu colocar na parte dos outros, sempre cria um arquivo com r-x .

Por exemplo, a permissão do arquivo criado a partir do código acima se parece com isso.

rwxrwxr-x.

Isso não é 777 , não é? O que estou perdendo?

    
por March3April4 16.08.2015 / 11:47

1 resposta

5

Os bits no umask do processo atual são apagados quando o arquivo é criado. Neste caso, parece que o umask é 0002 (no world write). Ligue para umask() antes de chamar open() para alterar isso.

Soapbox: por favor, não crie arquivos graváveis do mundo, a menos que você esteja realmente certo de que é isso que você quer. O umask existe para salvar você e seus usuários de exatamente esse tipo de vulnerabilidade.

    
por 16.08.2015 / 11:50