Я создаю веб-сайт, на котором пользователи могут войти в систему с помощью сервиса 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
не должен передаваться процессу kinit
с echo password |
.Есть ли какая-нибудь функция, принимающая стандарт в качестве аргумента? - Аналогично для
username
, username
следует передавать в качестве аргумента.Я думаю, что rawSystem
решает это все же.
Есть ли какая-нибудь системная функция, которая помогает мне здесь?