をサポートしていないシステムでopen
安全にシミュレートできるようにしたいと考えO_CREAT | O_WRONLY | O_TRUNC | O_NOFOLLOW
ています。私が求めていることをある程度達成することができます:O_CREAT | O_WRONLY | O_APPEND | O_NOFOLLOW
O_NOFOLLOW
struct stat lst;
if (lstat(filename, &lst) != -1 && S_ISLNK(lst.st_mode)) {
errno = ELOOP;
return -1;
}
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
int fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC | O_NOFOLLOW, mode);
しかし、競合状態が発生し、セキュリティ上の問題が発生する可能性があります。
touch
ユーザーだけが書き込むことができるダミーファイルを作成することを考えましたingのようなものでfilename
、lstat
チェックを行い、chmod
書き込みが終了した後に使用します(ファイルモードビットを修正するため)が、何か大きなものを見落とす可能性があります(たとえば、ファイルがfilename
存在する場合、通常のファイルではない場合、または既にシンボリック リンクである場合)。
どう思いますか?