gpt4 book ai didi

lisp - Common Lisp 确定目录是子目录还是另一个目录

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:05 25 4
gpt4 key购买 nike

我正在使用 hunchentoot 构建一个简单的 Web 应用程序以向 Web 公开目录树。我遇到的问题是找到一种可靠且安全的方法来确定请求的目录是否实际上是 *share-root* 的子目录,即 /srv/share .

我已经花时间使用 cl-fad,但它并不是我所需要的(或者我没有以解决我的问题的方式使用它)。

我的目标是能够接收像这样的路径:/srv/share/media/../../../ 并意识到请求应该被忽略,因为它要求共享之外的东西。

最佳答案

我建议 enough-namestring结合 truename : 如果

(enough-namestring foo bar)

是相对路径名,则foobar下。换句话说:

(defun pathname-under-p (under top)
(case (car (pathname-directory (enough-namestring (truename under)
(truename top))))
((nil :relative) t)
(t nil)))

或者只是

(defun pathname-under-p (under top)
(not (eq :absolute (car (pathname-directory (enough-namestring (truename under)
(truename top)))))))

如果您的实现不支持目录上的 truename,您将不得不使用特定于实现的函数或 directory .

非常感谢@Svante 的调试。

关于lisp - Common Lisp 确定目录是子目录还是另一个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25559746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com