packages feed

plegg 0.2.1.3 → 0.2.2.1

raw patch · 2 files changed

+76/−134 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

plegg.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: plegg-version: 0.2.1.3+version: 0.2.2.1 synopsis: A semi-cross-platform interface for pledge(2) and unveil(2) description: plegg offers a simple Haskell interface for OpenBSD's              pledge(2) and unveil(2).  A useless but non-crashing
src/System/OpenBSD/Plegg.hs view
@@ -3,7 +3,7 @@  -- | Module    : System.OpenBSD.Plegg -- Description : High-level interface for pledge(2)--- Copyright   : (c) Varik Valefor, 2021+-- Copyright   : (c) Varik Valefor, 2026 -- License     : Unlicense -- Maintainer  : varikvalefor@aol.com -- Stability   : experimental@@ -21,9 +21,8 @@ -- This module contains high-level interfaces for OpenBSD's @pledge(2)@ -- and @unveil(2)@. module System.OpenBSD.Plegg where-import Data.Char;-import Control.Monad;-+import Data.Char (toLower);+import Control.Monad (liftM2, (<=<)); #ifdef openbsd_HOST_OS   import Foreign.Ptr (nullPtr);   import Foreign.C.Error (throwErrnoIfMinus1_);@@ -31,35 +30,74 @@    foreign import capi "unistd.h pledge" pledge :: CString -> CString -> IO Int;   foreign import capi "unistd.h unveil" unveil :: CString -> CString -> IO Int;+#endif +-- | = la .lojban.+--+-- ni'o la'o zoi. @plegg k@ .zoi. panra la'o zoi.+-- @pledge(k, null)@ .zoi. pe la'oi .C.  .i ku'i drata ki'u zo'e joi+-- tu'a le se ctaipe be lo me'oi .'Promise'. pe la'oi .@plegg@.+--+-- .i lo me'oi .'Promise'. poi ke'a selru'e la'oi .@plegg@. cu binxo+-- pe'a lo se tcidu poi ke'a selru'e la'o gy. @pledge(2)@ .gy.+--+-- = English+--+-- @plegg k@ is roughly equivalent to C's "@pledge(k, null)@".+-- However, unlike the standard @pledge(2)@, @plegg@'s 'Promise's are+-- typed.+--+-- 'Promise's which are passed to @plegg@ are converted into text+-- which is passed to @pledge(2)@.+plegg :: [Promise]+      -- ^ = la .lojban.+      --+      -- zo'e poi cadga fa lo nu me'oi .enforce. tu'a ke'a+      --+      -- = English+      --+      -- The pledges which should be used+      -> IO (); -  -- | = la .lojban.-  ---  -- ni'o la'o zoi. @plegg k@ .zoi. na ru'e dunli la'o zoi.-  -- @pledge(k, null)@ pe la'oi .C.  .i ku'i drata ki'u le nu le me'oi-  -- .'Promise'. pe la'oi .@plegg@. cu se me'oi .type.-  ---  -- .i lo me'oi .'Promise'. poi selru'e la'oi .@plegg@. cu binxo lo-  -- selci'a poi selru'e la'o gy. @pledge(2)@ .gy.-  ---  -- = English-  ---  -- @plegg k@ is roughly equivalent to C's "@pledge(k, nulll)@".-  -- However, unlike the standard @pledge(2)@, @plegg@'s 'Promise's are-  -- typed.-  ---  -- 'Promise's which are passed to @plegg@ are converted into text-  -- which is passed to @pledge(2)@.-  plegg :: [Promise]-        -- ^ = la .lojban.-        ---        -- zo'e poi ke'a goi ko'a zo'u cadga fa lo nu me'oi .enforce.-        -- tu'a ko'a-        ---        -- = English-        ---        -- The pledges which should be used-        -> IO ();+-- | = la .lojban.+--+-- ni'o la'oi .@univac@. korbipe la'oi .Haskell. ce ko'a goi la'o gy.+-- @unveil(2)@ .gy.+--+-- .i ro da poi ke'a .orsi li re je cu selvau pe'a la'oi .@g@. zo'u+-- la'o zoi. @univac g@ .zoi. jai rinka tu'a lo me ko'a+-- be lo te .orsi be da be'o bei lo ve .orsi be da+--+-- .i la'o zoi. @univac [("", "")]@ .zoi. mapti la'o zoi.+-- @unveil(NULL, NULL)@ .zoi. pe la'oi .C.+--+-- .i la .varik. cu jinvi le du'u le velcki be+-- la'o zoi. @unveil(2)@ .gy. cu jai filri'a lo nu jimpe+--+-- = English+--+-- @univac@ is a high-level interface for @unveil(2)@.+--+-- For all @(a,b)@ in @g@, @univac g@ runs C's @unveil(a, b)@.+--+-- @univac [("", "")]@ is equivalent to C's @unveil(NULL, NULL)@.+--+-- @unveil(2)@'s manual page documents the specifics of this thing+-- pretty well.+univac :: [(FilePath, String)]+       -- ^ = la .lojban.+       --+       -- [(le me'oi .filepath. poi ke'a goi ko'a zo'u cadga fa lo nu+       -- me'oi .expose. ko'a, lo torveki be lo jai se curmi... be'o+       -- noi ke'a mapti lo me'oi .@permissions@. co'e pe la'o gy.+       -- @unveil(2)@ .gy.)]+       --+       -- = English+       --+       -- [(PATH WHICH SHOULD BE EXPOSED, PERMISSIONS)]+       -> IO ();++#ifdef openbsd_HOST_OS   plegg k = throwErrnoIfMinus1_ "pledge" $             withCString (promises k) $ \premises ->             withCString "" $ \execpremises ->@@ -78,122 +116,26 @@   promises :: [Promise] -> String;   promises = map toLower . unwords . map show; -  -- | = la .lojban.-  ---  -- ni'o la'oi .@univac@. korbipe la'oi .Haskell. je ko'a goi la'o gy.-  -- @unveil(2)@ .gy.-  ---  -- .i ro da poi .orsi re je poi se vasru la'oi .@g@. zo'u la'o zoi.-  -- @univac g@ .zoi. pilno lo te .orsi fa'u lo ve .orsi lo pamoi sumti-  -- be ko'a be'o fa'u lo remoi sumti be ko'a je cu co'e ko'a-  ---  -- .i la'o zoi. @univac [("", "")]@ .zoi. dunli la'o zoi.-  -- @unveil(NULL, NULL)@ .zoi. pe la'oi .C.-  ---  -- .i le clinoi be la'o gy. @unveil(2)@ .gy. cu xamgu velski le tcila-  -- be la'o gy. @unveil(2) .gy.-  ---  -- = English-  ---  -- @univac@ is a high-level interface for @unveil(2)@.-  ---  -- For all @(a,b)@ in @g@, @univac g@ runs C's @unveil(a, b)@.-  ---  -- @univac [("", "")]@ is equivalent to C's @unveil(NULL, NULL)@.-  ---  -- @unveil(2)@'s manual page documents the specifics of this thing-  -- pretty well.-  univac :: [(FilePath, String)]-         -- ^ = la .lojban.-         ---         -- [(le me'oi .filepath. poi ke'a goi ko'a zo'u cadga fa lo nu-         -- me'oi .expose. ko'a, lo me'oi .permission.)]-         ---         -- = English-         ---         -- [(PATH WHICH SHOULD BE EXPOSED, PERMISSIONS)]-         -> IO ();   univac = mapM_ expose     where     expose = teim1_ "unveil" . uncurry unveil <=< toCStrings     teim1_ = throwErrnoIfMinus1_-    toCStrings = uncurry (liftM2 (,)) . both (`withCString` pure)+    toCStrings ("","") = pure (nullPtr, nullPtr)+    toCStrings x = (uncurry (liftM2 (,)) . both (`withCString` pure)) x     both f (a, b) = (f a, f b);- #else--  -- | = la .lojban.-  ---  -- ni'o la'o zoi. @plegg k@ .zoi. na ru'e dunli la'o zoi.-  -- @pledge(k, null)@ pe la'oi .C.  .i ku'i drata ki'u le nu le me'oi-  -- .'Promise'. pe la'oi .@plegg@. cu se me'oi .type.-  ---  -- .i lo me'oi .'Promise'. poi selru'e la'oi .@plegg@. cu binxo lo-  -- selci'a poi selru'e la'o gy. @pledge(2)@ .gy.-  ---  -- = English-  ---  -- @plegg k@ is roughly equivalent to C's "@pledge(k, nulll)@".-  -- However, unlike the standard @pledge(2)@, @plegg@'s 'Promise's are-  -- typed.-  ---  -- 'Promise's which are passed to @plegg@ are converted into text-  -- which is passed to @pledge(2)@.-  plegg :: [Promise]-        -- ^ = la .lojban.-        ---        -- zo'e poi ke'a goi ko'a zo'u cadga fa lo nu me'oi .enforce.-        -- tu'a ko'a-        ---        -- = English-        ---        -- The pledges which should be used-        -> IO ();   plegg _ = return (); -  -- | = la .lojban.-  ---  -- ni'o la'oi .@univac@. korbipe la'oi .Haskell. je ko'a goi la'o gy.-  -- @unveil(2)@ .gy.-  ---  -- .i ro da poi .orsi re je poi se vasru la'oi .@g@. zo'u la'o zoi.-  -- @univac g@ .zoi. pilno lo te .orsi fa'u lo ve .orsi lo pamoi sumti-  -- be ko'a be'o fa'u lo remoi sumti be ko'a je cu co'e ko'a-  ---  -- .i la'o zoi. @univac [("", "")]@ .zoi. dunli la'o zoi.-  -- @unveil(NULL, NULL)@ .zoi. pe la'oi .C.-  ---  -- .i le clinoi be la'o gy. @unveil(2)@ .gy. cu xamgu velski le tcila-  -- be la'o gy. @unveil(2) .gy.-  ---  -- = English-  ---  -- @univac@ is a high-level interface for @unveil(2)@.-  ---  -- For all @(a,b)@ in @g@, @univac g@ runs C's @unveil(a, b)@.-  ---  -- @univac [("", "")]@ is equivalent to C's @unveil(NULL, NULL)@.-  ---  -- @unveil(2)@'s manual page documents the specifics of this thing-  -- pretty well.-  univac :: [(FilePath, String)]-         -- ^ = la .lojban.-         ---         -- [(le me'oi .filepath. poi ke'a goi ko'a zo'u cadga fa lo nu-         -- me'oi .expose. ko'a, lo me'oi .permission.)]-         ---         -- = English-         ---         -- [(PATH WHICH SHOULD BE EXPOSED, PERMISSIONS)]-         -> IO ();   univac _ = return (); #endif  -- | = la .lojban. -- -- ni'o ro da poi ke'a ctaipe la'oi .'Promise'. zo'u ga je cumki fa lo--- nu da selru'e la'oi .plegg. gi skicu da fo lo mu'oi--- gy. man(1) .gy. papri poi ke'a velski la'o gy. pledge(2) .gy.+-- nu da selru'e la'oi .plegg. gi da mapti lo co'e be lo me'oi .lowercase.+-- versiio be lo cmene be da be'o pe la'o gy. pledge(2) .gy.  .i la .varik.+-- cu jinvi le du'u le velcki be tu'a la'o gy. pledge(2) .gy. cu jai filri'a+-- lo nu jimpe -- -- = English --