Elegant системные вызовы в haskell

Я создаю веб-сайт, на котором пользователи могут входить в систему, используя службу 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 

Что-то вроде того, что должно работать так себе. Однако у меня с этим возникают три проблемы:

  • Невозможно экранировать строки имя пользователя и пароль . Это важно, поскольку существует веб-сайт, передающий любой полученный ввод в эту функцию.
  • В идеале пароль не следует передавать процессу kinit с помощью эхо-пароля | . Есть ли какая-то функция, принимающая стандарт в качестве аргумента?
  • Аналогично для имя пользователя , имя пользователя должно быть передано в качестве аргумента. Я думаю, что rawSystem решает эту проблему.

Есть ли какие-нибудь системные функции, которые могут мне помочь?

6
задан Tarrasch 12 June 2011 в 18:10
поделиться