Как определить, находится ли путь внутри каталога? (POSIX)

В C, используя вызовы POSIX, как я могу определить, находится ли путь внутри целевого каталога?

Например, веб-сервер имеет свой корневой каталог в / srv , это getcwd () для демона. При разборе запроса для /index.html он возвращает содержимое /srv/index.html .

Как мне отфильтровать запросы для путей за пределами /srv?

/../etc/passwd, / действительный /../../ etc / passwd , и т.д.

Разделение пути на / и отклонение любого массива, содержащего .. нарушит действительный доступ / srv / valid /../ index.html .

Есть ли канонический способ сделать это с помощью системных вызовов? Или мне нужно вручную пройти путь и подсчитать глубину каталога?

6
задан Joby Taffey 20 August 2011 в 21:03
поделиться