我想安全地在不支持O_NOFOLLOW
的系統上使用O_CREAT | O_WRONLY | O_TRUNC | O_NOFOLLOW
和O_CREAT | O_WRONLY | O_APPEND | O_NOFOLLOW
來模擬open
。我可以在某種程度上實現什麼,我要求有:在沒有此標誌的系統上模擬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
荷蘭國際集團filename
,做lstat
檢查,然後使用chmod
我寫完(更正文件模式位)之後創建一個虛擬文件,但我可以忽略一些重要的東西(例如,如果filename
的文件存在,不是常規文件,或者已經是符號鏈接)。
您認爲如何?