annex.security.allowed-ip-addresses ports syntax
Extended annex.security.allowed-ip-addresses to let specific ports of an IP address to be used, while denying use of other ports.
This commit is contained in:
parent
4316d92b48
commit
9659f1c30f
6 changed files with 43 additions and 7 deletions
19
Annex/Url.hs
19
Annex/Url.hs
|
@ -41,6 +41,7 @@ import qualified BuildInfo
|
|||
import Network.Socket
|
||||
import Network.HTTP.Client
|
||||
import Network.HTTP.Client.TLS
|
||||
import Text.Read
|
||||
|
||||
defaultUserAgent :: U.UserAgent
|
||||
defaultUserAgent = "git-annex/" ++ BuildInfo.packageversion
|
||||
|
@ -85,10 +86,11 @@ getUrlOptions = Annex.getState Annex.urloptions >>= \case
|
|||
manager <- liftIO $ U.newManager $
|
||||
avoidtimeout $ tlsManagerSettings
|
||||
return (urldownloader, manager)
|
||||
allowedaddrs -> do
|
||||
allowedaddrsports -> do
|
||||
addrmatcher <- liftIO $
|
||||
(\l v -> any (\f -> f v) l) . catMaybes
|
||||
<$> mapM makeAddressMatcher allowedaddrs
|
||||
<$> mapM (uncurry makeAddressMatcher)
|
||||
(mapMaybe splitAddrPort allowedaddrsports)
|
||||
-- Default to not allowing access to loopback
|
||||
-- and private IP addresses to avoid data
|
||||
-- leakage.
|
||||
|
@ -120,6 +122,19 @@ getUrlOptions = Annex.getState Annex.urloptions >>= \case
|
|||
-- separate timeout controls, so disable that.
|
||||
avoidtimeout s = s { managerResponseTimeout = responseTimeoutNone }
|
||||
|
||||
splitAddrPort :: String -> Maybe (String, Maybe PortNumber)
|
||||
splitAddrPort s
|
||||
-- "[addr]:port" (also allow "[addr]")
|
||||
| "[" `isPrefixOf` s = case splitc ']' (drop 1 s) of
|
||||
[a,cp] -> case splitc ':' cp of
|
||||
["",p] -> do
|
||||
pn <- readMaybe p
|
||||
return (a, Just pn)
|
||||
[""] -> Just (a, Nothing)
|
||||
_ -> Nothing
|
||||
_ -> Nothing
|
||||
| otherwise = Just (s, Nothing)
|
||||
|
||||
ipAddressesUnlimited :: Annex Bool
|
||||
ipAddressesUnlimited =
|
||||
("all" == ) . annexAllowedIPAddresses <$> Annex.getGitConfig
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue