]> granicus.if.org Git - imagemagick/commitdiff
...
authorCristy <urban-warrior@imagemagick.org>
Mon, 13 Mar 2017 12:45:31 +0000 (08:45 -0400)
committerCristy <urban-warrior@imagemagick.org>
Mon, 13 Mar 2017 12:45:31 +0000 (08:45 -0400)
MagickCore/cache.c
MagickCore/distribute-cache.c
MagickCore/magick.c
MagickCore/policy.c
MagickCore/policy.h
MagickCore/resource.c
MagickCore/utility.c
config/policy.xml

index 82fe3b69a40db3c03ef9a566d1724716892c7a67..8a110f886a40189671c12481b82a4c663900e8b0 100644 (file)
@@ -217,7 +217,7 @@ MagickPrivate Cache AcquirePixelCache(const size_t number_threads)
       cache_info->synchronize=IsStringTrue(value);
       value=DestroyString(value);
     }
-  value=GetPolicyValue("synchronize");
+  value=GetPolicyValue("cache:synchronize");
   if (value != (const char *) NULL)
     {
       cache_info->synchronize=IsStringTrue(value);
@@ -3449,6 +3449,8 @@ static MagickBooleanType OpenPixelCache(Image *image,const MapMode mode,
       */
       cache_anonymous_memory=0;
       value=GetPolicyValue("pixel-cache-memory");
+      if (value == (char *) NULL)
+        value=GetPolicyValue("cache:memory-map");
       if (LocaleCompare(value,"anonymous") == 0)
         {
 #if defined(MAGICKCORE_HAVE_MMAP) && defined(MAP_ANONYMOUS)
index 669d1f09cd9fe078084e0a828aa06676bd83ea56..76882b3bcbe79b6da4d19da3333a4dc73750411e 100644 (file)
@@ -201,7 +201,7 @@ static int ConnectPixelCacheServer(const char *hostname,const int port,
     Connect to distributed pixel cache and get session key.
   */
   *session_key=0;
-  shared_secret=GetPolicyValue("shared-secret");
+  shared_secret=GetPolicyValue("cache:shared-secret");
   if (shared_secret == (char *) NULL)
     {
       shared_secret=DestroyString(shared_secret);
@@ -805,7 +805,7 @@ static HANDLER_RETURN_TYPE DistributePixelCacheClient(void *socket)
   /*
     Distributed pixel cache client.
   */
-  shared_secret=GetPolicyValue("shared-secret");
+  shared_secret=GetPolicyValue("cache:shared-secret");
   if (shared_secret == (char *) NULL)
     ThrowFatalException(CacheFatalError,"shared secret expected");
   p=session;
index 16ce0776a833b341037e3d40e037e3b8a2fc5bc8..df7b5d8e1b976e8d9ce6483960540ccb157c40e0 100644 (file)
@@ -1680,7 +1680,7 @@ MagickExport int SetMagickPrecision(const int precision)
       magick_precision=MagickPrecision;
       limit=GetEnvironmentValue("MAGICK_PRECISION");
       if (limit == (char *) NULL)
-        limit=GetPolicyValue("precision");
+        limit=GetPolicyValue("system:precision");
       if (limit != (char *) NULL)
         {
           magick_precision=StringToInteger(limit);
index ee81b3208c0adf794466730e0eac97993d56819f..535bb43db50b06e22feabcea5ff26d5a39c7a5d7 100644 (file)
@@ -264,6 +264,9 @@ static PolicyInfo *GetPolicyInfo(const char *name,ExceptionInfo *exception)
   char
     policyname[MagickPathExtent];
 
+  PolicyDomain
+    domain;
+
   register PolicyInfo
     *p;
 
@@ -286,6 +289,19 @@ static PolicyInfo *GetPolicyInfo(const char *name,ExceptionInfo *exception)
     (void) CopyMagickString(q,q+1,MagickPathExtent);
     q--;
   }
+  /*
+    Strip domain from policy name (e.g. resource:map).
+  */
+  domain=UndefinedPolicyDomain;
+  for (q=policyname; *q != '\0'; q++)
+  {
+    if (*q != ':')
+      continue;
+    *q='\0';
+    domain=(PolicyDomain) ParseCommandOption(MagickPolicyDomainOptions,
+      MagickTrue,policyname);
+    (void) CopyMagickString(policyname,q+1,MagickPathExtent);
+  }
   /*
     Search for policy tag.
   */
@@ -299,8 +315,9 @@ static PolicyInfo *GetPolicyInfo(const char *name,ExceptionInfo *exception)
     }
   while (p != (PolicyInfo *) NULL)
   {
-    if (LocaleCompare(policyname,p->name) == 0)
-      break;
+    if ((domain == UndefinedPolicyDomain) || (p->domain == domain))
+      if (LocaleCompare(policyname,p->name) == 0)
+        break;
     p=(PolicyInfo *) GetNextValueInLinkedList(policy_cache);
   }
   if (p != (PolicyInfo *) NULL)
@@ -599,11 +616,14 @@ MagickExport MagickBooleanType IsRightsAuthorized(const PolicyDomain domain,
         (GlobExpression(pattern,p->pattern,MagickFalse) != MagickFalse))
       {
         if ((rights & ReadPolicyRights) != 0)
-          authorized=(p->rights & ReadPolicyRights) != 0;
+          authorized=(p->rights & ReadPolicyRights) != 0 ? MagickTrue :
+            MagickFalse;
         if ((rights & WritePolicyRights) != 0)
-          authorized=(p->rights & WritePolicyRights) != 0;
+          authorized=(p->rights & WritePolicyRights) != 0 ? MagickTrue :
+            MagickFalse;
         if ((rights & ExecutePolicyRights) != 0)
-          authorized=(p->rights & ExecutePolicyRights) != 0;
+          authorized=(p->rights & ExecutePolicyRights) != 0 ? MagickTrue :
+            MagickFalse;
       }
     p=(PolicyInfo *) GetNextValueInLinkedList(policy_cache);
   }
index d4657f55dd5f68693c18bb60ba505209d8195b5d..6cffe9d1a28908ac1ac20aa267dc67223641ce06 100644 (file)
@@ -51,7 +51,7 @@ typedef struct _PolicyInfo
   PolicyInfo;
 
 extern MagickExport char
-  *GetPolicyValue(const char *name),
+  *GetPolicyValue(const char *),
   **GetPolicyList(const char *,size_t *,ExceptionInfo *);
 
 extern MagickExport const PolicyInfo
index 40c5593fb6b44234e28b0f4df65c4481c60614da..f3bd067357ce3f6b072eb3119caca487ea5b4c32 100644 (file)
@@ -436,7 +436,7 @@ MagickExport MagickBooleanType GetPathTemplate(char *path)
 #endif
   if (directory == (char *) NULL)
     return(MagickTrue);
-  value=GetPolicyValue("temporary-path");
+  value=GetPolicyValue("resource:temporary-path");
   if (value != (char *) NULL)
     {
       (void) CloneString(&directory,value);
@@ -1249,7 +1249,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case WidthResource:
     {
       resource_info.width_limit=limit;
-      value=GetPolicyValue("width");
+      value=GetPolicyValue("resource:width");
       if (value != (char *) NULL)
         resource_info.width_limit=MagickMin(limit,StringToSizeType(value,
           100.0));
@@ -1258,7 +1258,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case HeightResource:
     {
       resource_info.height_limit=limit;
-      value=GetPolicyValue("height");
+      value=GetPolicyValue("resource:height");
       if (value != (char *) NULL)
         resource_info.height_limit=MagickMin(limit,StringToSizeType(value,
           100.0));
@@ -1267,7 +1267,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case AreaResource:
     {
       resource_info.area_limit=limit;
-      value=GetPolicyValue("area");
+      value=GetPolicyValue("resource:area");
       if (value != (char *) NULL)
         resource_info.area_limit=MagickMin(limit,StringToSizeType(value,100.0));
       break;
@@ -1275,7 +1275,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case MemoryResource:
     {
       resource_info.memory_limit=limit;
-      value=GetPolicyValue("memory");
+      value=GetPolicyValue("resource:memory");
       if (value != (char *) NULL)
         resource_info.memory_limit=MagickMin(limit,StringToSizeType(value,
           100.0));
@@ -1284,7 +1284,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case MapResource:
     {
       resource_info.map_limit=limit;
-      value=GetPolicyValue("map");
+      value=GetPolicyValue("resource:map");
       if (value != (char *) NULL)
         resource_info.map_limit=MagickMin(limit,StringToSizeType(value,100.0));
       break;
@@ -1292,7 +1292,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case DiskResource:
     {
       resource_info.disk_limit=limit;
-      value=GetPolicyValue("disk");
+      value=GetPolicyValue("resource:disk");
       if (value != (char *) NULL)
         resource_info.disk_limit=MagickMin(limit,StringToSizeType(value,100.0));
       break;
@@ -1300,7 +1300,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case FileResource:
     {
       resource_info.file_limit=limit;
-      value=GetPolicyValue("file");
+      value=GetPolicyValue("resource:file");
       if (value != (char *) NULL)
         resource_info.file_limit=MagickMin(limit,StringToSizeType(value,100.0));
       break;
@@ -1308,7 +1308,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case ThreadResource:
     {
       resource_info.thread_limit=limit;
-      value=GetPolicyValue("thread");
+      value=GetPolicyValue("resource:thread");
       if (value != (char *) NULL)
         resource_info.thread_limit=MagickMin(limit,StringToSizeType(value,
           100.0));
@@ -1322,7 +1322,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case ThrottleResource:
     {
       resource_info.throttle_limit=limit;
-      value=GetPolicyValue("throttle");
+      value=GetPolicyValue("resource:throttle");
       if (value != (char *) NULL)
         resource_info.throttle_limit=MagickMax(limit,StringToSizeType(value,
           100.0));
@@ -1331,7 +1331,7 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type,
     case TimeResource:
     {
       resource_info.time_limit=limit;
-      value=GetPolicyValue("time");
+      value=GetPolicyValue("resource:time");
       if (value != (char *) NULL)
         resource_info.time_limit=MagickMin(limit,StringToSizeType(value,100.0));
       ResetPixelCacheEpoch();
index ebe8d5d675b397167c903646a9b855c01b596ec8..6fa0f5c528991b09dc3d8fe271875bbf9ff44633 100644 (file)
@@ -1826,7 +1826,7 @@ MagickPrivate MagickBooleanType ShredFile(const char *path)
 
   if ((path == (const char *) NULL) || (*path == '\0'))
     return(MagickFalse);
-  passes=GetPolicyValue("shred");
+  passes=GetPolicyValue("system:shred");
   if (passes == (char *) NULL)
     passes=GetEnvironmentValue("MAGICK_SHRED_PASSES");
   if (passes == (char *) NULL)
index b0df62995fb76bff9ff2b16d16b78a68168dee11..fef14cf65b27c114122604ca1c1bdcb5bd3a8a06 100644 (file)
     <policy domain="coder" rights="read|write" pattern="{GIF,JPEG,PNG,WEBP}" />
 -->
 <policymap>
-  <!-- <policy domain="system" name="pixel-cache-memory" value="anonymous"/> -->
   <!-- <policy domain="system" name="shred" value="2"/> -->
   <!-- <policy domain="system" name="precision" value="6"/> -->
-  <!-- <policy domain="cache" name="synchronize" value="False"/> -->
   <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
   <!-- <policy domain="resource" name="memory" value="2GiB"/> -->
   <!-- <policy domain="resource" name="map" value="4GiB"/> -->
@@ -80,5 +78,7 @@
   <!-- <policy domain="coder" rights="none" pattern="MVG" /> -->
   <!-- <policy domain="delegate" rights="none" pattern="HTTPS" /> -->
   <!-- <policy domain="path" rights="none" pattern="@*" /> -->
+  <!-- <policy domain="cache" name="memory-map" value="anonymous"/> -->
+  <!-- <policy domain="cache" name="synchronize" value="True"/> -->
   <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/>
 </policymap>