【发布时间】:2011-06-12 18:04:46
【问题描述】:
我正在创建一个用户可以使用 kerberos 服务登录的网站。不过,这与我的问题无关。
由于我使用的是 kerberos,我想使用系统调用来调用 kinit,但我不知道最好的方法。
到目前为止,我得到了:
module Kerberos where
system :: String -> IO ExitCode
-- system is loaded through imports
type Username = String
type Password = String
kerberosValidate :: Username -> Password -> IO Bool
kerberosValidate username password = fmap (== ExitSuccess) $
system $ "echo " ++ password ++ " | kinit " ++ username
类似的东西,应该可以正常工作。不过我有三个问题。
-
username和password字符串没有转义。这很重要,因为有一个网站将收到的任何输入传递给此函数。 - 理想情况下,
password不应通过echo password |传递给kinit进程。是否有一些函数将标准作为参数? - 与
username类似,username应作为参数传递。我认为rawSystem解决了这个问题。
有什么系统功能可以帮助我吗?
【问题讨论】:
-
您可能想要使用
createProcess并将您的输入传送到孩子的stdin。 -
@n.m.:你可能应该把它作为一个答案——据我所知,它可以巧妙地处理后两个问题。如果有用的话,简短的答案很好,而 cmets 经常被忽视。
标签: haskell kerberos system-calls