mirror of
https://github.com/ImageMagick/ImageMagick.git
synced 2026-05-31 11:18:42 +02:00
Support "module" security policy
This commit is contained in:
+19
-8
@@ -959,6 +959,14 @@ MagickExport MagickBooleanType InvokeDynamicImageFilter(const char *tag,
|
||||
if ((*images)->debug != MagickFalse)
|
||||
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
|
||||
(*images)->filename);
|
||||
rights=ReadPolicyRights;
|
||||
if (IsRightsAuthorized(FilterPolicyDomain,rights,tag) == MagickFalse)
|
||||
{
|
||||
errno=EPERM;
|
||||
(void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
|
||||
"NotAuthorized","`%s'",tag);
|
||||
return(MagickFalse);
|
||||
}
|
||||
#if !defined(MAGICKCORE_BUILD_MODULES)
|
||||
{
|
||||
MagickBooleanType
|
||||
@@ -969,14 +977,6 @@ MagickExport MagickBooleanType InvokeDynamicImageFilter(const char *tag,
|
||||
return(status);
|
||||
}
|
||||
#endif
|
||||
rights=ReadPolicyRights;
|
||||
if (IsRightsAuthorized(FilterPolicyDomain,rights,tag) == MagickFalse)
|
||||
{
|
||||
errno=EPERM;
|
||||
(void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
|
||||
"NotAuthorized","`%s'",tag);
|
||||
return(MagickFalse);
|
||||
}
|
||||
TagToFilterModuleName(tag,name);
|
||||
status=GetMagickModulePath(name,MagickImageFilterModule,path,exception);
|
||||
if (status == MagickFalse)
|
||||
@@ -1234,6 +1234,9 @@ MagickPrivate MagickBooleanType OpenModule(const char *module,
|
||||
ModuleInfo
|
||||
*module_info;
|
||||
|
||||
PolicyRights
|
||||
rights;
|
||||
|
||||
register const CoderInfo
|
||||
*p;
|
||||
|
||||
@@ -1247,6 +1250,14 @@ MagickPrivate MagickBooleanType OpenModule(const char *module,
|
||||
module_info=(ModuleInfo *) GetModuleInfo(module,exception);
|
||||
if (module_info != (ModuleInfo *) NULL)
|
||||
return(MagickTrue);
|
||||
rights=ReadPolicyRights;
|
||||
if (IsRightsAuthorized(ModulePolicyDomain,rights,tag) == MagickFalse)
|
||||
{
|
||||
errno=EPERM;
|
||||
(void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
|
||||
"NotAuthorized","`%s'",tag);
|
||||
return(MagickFalse);
|
||||
}
|
||||
(void) CopyMagickString(module_name,module,MagickPathExtent);
|
||||
p=GetCoderInfo(module,exception);
|
||||
if (p != (CoderInfo *) NULL)
|
||||
|
||||
@@ -1834,6 +1834,7 @@ static const OptionInfo
|
||||
{ "Coder", CoderPolicyDomain, UndefinedOptionFlag, MagickFalse },
|
||||
{ "Delegate", DelegatePolicyDomain, UndefinedOptionFlag, MagickFalse },
|
||||
{ "Filter", FilterPolicyDomain, UndefinedOptionFlag, MagickFalse },
|
||||
{ "Module", ModulePolicyDomain, UndefinedOptionFlag, MagickFalse },
|
||||
{ "Path", PathPolicyDomain, UndefinedOptionFlag, MagickFalse },
|
||||
{ "Resource", ResourcePolicyDomain, UndefinedOptionFlag, MagickFalse },
|
||||
{ "System", SystemPolicyDomain, UndefinedOptionFlag, MagickFalse },
|
||||
|
||||
@@ -1254,6 +1254,7 @@ MagickExport MagickBooleanType SetMagickSecurityPolicyValue(
|
||||
case CoderPolicyDomain:
|
||||
case DelegatePolicyDomain:
|
||||
case FilterPolicyDomain:
|
||||
case ModulePolicyDomain:
|
||||
case PathPolicyDomain:
|
||||
default:
|
||||
break;
|
||||
|
||||
+2
-1
@@ -34,7 +34,8 @@ typedef enum
|
||||
PathPolicyDomain,
|
||||
ResourcePolicyDomain,
|
||||
SystemPolicyDomain,
|
||||
CachePolicyDomain
|
||||
CachePolicyDomain,
|
||||
ModulePolicyDomain
|
||||
} PolicyDomain;
|
||||
|
||||
typedef enum
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
<!-- <policy domain="resource" name="throttle" value="0"/> -->
|
||||
<!-- <policy domain="resource" name="time" value="3600"/> -->
|
||||
<!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
|
||||
<!-- <policy domain="module" rights="none" pattern="{ps,pdf,xps}" /> -->
|
||||
<!-- <policy domain="delegate" rights="none" pattern="HTTPS" /> -->
|
||||
<!-- <policy domain="path" rights="none" pattern="@*" /> -->
|
||||
<!-- <policy domain="cache" name="memory-map" value="anonymous"/> -->
|
||||
|
||||
Reference in New Issue
Block a user