From 149892ba0312243d111bf9e55f5a384ad15489da557bd23eb2667133556d5240 Mon Sep 17 00:00:00 2001 From: Bjoern Schilberg Date: Tue, 11 Jan 2011 12:29:45 +0000 Subject: [PATCH] * added upstream-patch for bug #3525 to work reliably with WMS 1.3.0 and FCGI-mode OBS-URL: https://build.opensuse.org/package/show/Application:Geo/mapserver?expand=0&rev=56 --- bug3525_ms5.6.patch | 809 ++++++++++++++++++++++++++++++++++++++++++++ mapserver.spec | 5 + 2 files changed, 814 insertions(+) create mode 100644 bug3525_ms5.6.patch diff --git a/bug3525_ms5.6.patch b/bug3525_ms5.6.patch new file mode 100644 index 0000000..13da78c --- /dev/null +++ b/bug3525_ms5.6.patch @@ -0,0 +1,809 @@ +Index: mapwms.c +=================================================================== +--- mapwms.c (revision 10854) ++++ mapwms.c (working copy) +@@ -65,9 +65,8 @@ + ** + ** Report current MapServer error in requested format. + */ +-static char *wms_exception_format=NULL; + +-int msWMSException(mapObj *map, int nVersion, const char *exception_code) ++int msWMSException(mapObj *map, int nVersion, const char *exception_code, char *wms_exception_format) + { + const char *encoding; + char *schemalocation = NULL; +@@ -282,7 +281,7 @@ + /* + ** Apply the TIME parameter to layers that are time aware + */ +-int msWMSApplyTime(mapObj *map, int version, char *time) ++int msWMSApplyTime(mapObj *map, int version, char *time, char *wms_exception_format) + { + int i=0; + layerObj *lp = NULL; +@@ -313,7 +312,7 @@ + { + msSetError(MS_WMSERR, "No Time value was given, and no default time value defined.", "msWMSApplyTime"); + return msWMSException(map, version, +- "MissingDimensionValue"); ++ "MissingDimensionValue", wms_exception_format); + } + else + { +@@ -322,7 +321,7 @@ + msSetError(MS_WMSERR, "No Time value was given, and the default time value %s is invalid or outside the time extent defined %s", "msWMSApplyTime", timedefault, timeextent); + /* return MS_FALSE; */ + return msWMSException(map, version, +- "InvalidDimensionValue"); ++ "InvalidDimensionValue", wms_exception_format); + } + msLayerSetTimeFilter(lp, timedefault, timefield); + } +@@ -337,7 +336,7 @@ + msSetError(MS_WMSERR, "Time value(s) %s given is invalid or outside the time extent defined (%s).", "msWMSApplyTime", time, timeextent); + /* return MS_FALSE; */ + return msWMSException(map, version, +- "InvalidDimensionValue"); ++ "InvalidDimensionValue", wms_exception_format); + } + else + { +@@ -346,7 +345,7 @@ + msSetError(MS_WMSERR, "Time value(s) %s given is invalid or outside the time extent defined (%s), and default time set is invalid (%s)", "msWMSApplyTime", time, timeextent, timedefault); + /* return MS_FALSE; */ + return msWMSException(map, version, +- "InvalidDimensionValue"); ++ "InvalidDimensionValue", wms_exception_format); + } + else + msLayerSetTimeFilter(lp, timedefault, timefield); +@@ -380,7 +379,7 @@ + ** + */ + int msWMSLoadGetMapParams(mapObj *map, int nVersion, +- char **names, char **values, int numentries) ++ char **names, char **values, int numentries, char *wms_exception_format) + { + int i, adjust_extent = MS_FALSE, nonsquare_enabled = MS_FALSE; + int iUnits = -1; +@@ -443,7 +442,7 @@ + if (ogrEnabled == 0) + { + msSetError(MS_WMSERR, "OGR support is not available.", "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + else + { +@@ -452,12 +451,12 @@ + if (strcasecmp(names[i], "SLD") == 0) + { + if ((status = msSLDApplySLDURL(map, values[i], -1, NULL)) != MS_SUCCESS) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + if (strcasecmp(names[i], "SLD_BODY") == 0) + { + if ((status =msSLDApplySLD(map, values[i], -1, NULL)) != MS_SUCCESS) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + } + } +@@ -478,7 +477,7 @@ + if (layers==NULL || strlen(values[i]) <=0 || numlayers < 1) { + msSetError(MS_WMSERR, "At least one layer name required in LAYERS.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + + +@@ -609,14 +608,14 @@ + msSetError(MS_WMSERR, + "Unsupported CRS namespace (only EPSG, AUTO2, CRS currently supported).", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "InvalidCRS"); ++ return msWMSException(map, nVersion, "InvalidCRS", wms_exception_format); + } + else + { + msSetError(MS_WMSERR, + "Unsupported SRS namespace (only EPSG and AUTO currently supported).", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "InvalidSRS"); ++ return msWMSException(map, nVersion, "InvalidSRS", wms_exception_format); + } + } + } +@@ -628,7 +627,7 @@ + if (tokens==NULL || n != 4) { + msSetError(MS_WMSERR, "Wrong number of arguments for BBOX.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + bboxrequest = values[i]; + +@@ -650,7 +649,7 @@ + msSetError(MS_WMSERR, + "Invalid values for BBOX.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + adjust_extent = MS_TRUE; + } +@@ -689,7 +688,7 @@ + "Unsupported output format (%s).", + "msWMSLoadGetMapParams()", + values[i] ); +- return msWMSException(map, nVersion, "InvalidFormat"); ++ return msWMSException(map, nVersion, "InvalidFormat", wms_exception_format); + } + } + else +@@ -705,7 +704,7 @@ + "Unsupported output format (%s).", + "msWMSLoadGetMapParams()", + values[i] ); +- return msWMSException(map, nVersion, "InvalidFormat"); ++ return msWMSException(map, nVersion, "InvalidFormat", wms_exception_format); + } + } + msFree( map->imagetype ); +@@ -742,7 +741,7 @@ + msSetError(MS_WMSERR, + "Invalid format for the EXCEPTION parameter.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "InvalidFormat"); ++ return msWMSException(map, nVersion, "InvalidFormat", wms_exception_format); + } + } + if (bboxfound && bboxrequest && nVersion >= OWS_1_3_0) +@@ -807,7 +806,7 @@ + msSetError(MS_WMSERR, + "Invalid values for BBOX.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + adjust_extent = MS_TRUE; + } +@@ -836,7 +835,7 @@ + */ + if (timerequest) + { +- if (msWMSApplyTime(map, nVersion, stime) == MS_FAILURE) ++ if (msWMSApplyTime(map, nVersion, stime, wms_exception_format) == MS_FAILURE) + { + return MS_FAILURE;/* msWMSException(map, nVersion, "InvalidTimeRequest"); */ + } +@@ -857,7 +856,7 @@ + { + msSetError(MS_WMSERR, "Invalid layer(s) given in the LAYERS parameter.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "LayerNotDefined"); ++ return msWMSException(map, nVersion, "LayerNotDefined", wms_exception_format); + } + + /* validate srs value: When the SRS parameter in a GetMap request contains a +@@ -919,13 +918,13 @@ + { + msSetError(MS_WMSERR, "Invalid CRS given : CRS must be valid for all requested layers.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "InvalidSRS"); ++ return msWMSException(map, nVersion, "InvalidSRS", wms_exception_format); + } + else + { + msSetError(MS_WMSERR, "Invalid SRS given : SRS must be valid for all requested layers.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "InvalidSRS"); ++ return msWMSException(map, nVersion, "InvalidSRS", wms_exception_format); + } + } + } +@@ -943,7 +942,7 @@ + /* Restore valid default values in case errors INIMAGE are used */ + map->width = 400; + map->height= 300; +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + + /* Check whether requested BBOX and width/height result in non-square pixels +@@ -986,7 +985,7 @@ + "have any projection set. Please make sure your mapfile " + "has a projection defined at the top level.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "InvalidCRS"); ++ return msWMSException(map, nVersion, "InvalidCRS", wms_exception_format); + } + else + { +@@ -994,7 +993,7 @@ + "have any projection set. Please make sure your mapfile " + "has a projection defined at the top level.", + "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "InvalidSRS"); ++ return msWMSException(map, nVersion, "InvalidSRS", wms_exception_format); + } + } + +@@ -1010,7 +1009,7 @@ + if (nTmp != 0) + { + msFreeProjection(&newProj); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + } + +@@ -1035,7 +1034,7 @@ + original_srs) != 0) + { + msFreeProjection(&newProj); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + GET_LAYER(map, i)->project = MS_TRUE; + } +@@ -1060,7 +1059,7 @@ + nTmp = msLoadProjectionString(&(map->projection), srsbuffer); + + if (nTmp != 0) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + + iUnits = GetMapserverUnitUsingProj(&(map->projection)); + if (iUnits != -1) +@@ -1125,7 +1124,7 @@ + msFreeCharArray(tokens, n); + msFreeCharArray(layers, numlayers); + +- return msWMSException(map, nVersion, "StyleNotDefined"); ++ return msWMSException(map, nVersion, "StyleNotDefined", wms_exception_format); + } + } + +@@ -1139,7 +1138,7 @@ + msFreeCharArray(tokens, n); + if (layers && numlayers > 0) + msFreeCharArray(layers, numlayers); +- return msWMSException(map, nVersion, "StyleNotDefined"); ++ return msWMSException(map, nVersion, "StyleNotDefined", wms_exception_format); + } + } + } +@@ -1174,31 +1173,31 @@ + else + msSetError(MS_WMSERR, "Missing required parameter SRS", "msWMSLoadGetMapParams()"); + +- return msWMSException(map, nVersion, "MissingParameterValue"); ++ return msWMSException(map, nVersion, "MissingParameterValue", wms_exception_format); + } + + if (bboxfound == 0) + { + msSetError(MS_WMSERR, "Missing required parameter BBOX", "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "MissingParameterValue"); ++ return msWMSException(map, nVersion, "MissingParameterValue", wms_exception_format); + } + + if (formatfound == 0 && (strcasecmp(request, "GetMap") == 0 || strcasecmp(request, "map") == 0)) + { + msSetError(MS_WMSERR, "Missing required parameter FORMAT", "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "MissingParameterValue"); ++ return msWMSException(map, nVersion, "MissingParameterValue", wms_exception_format); + } + + if (widthfound == 0) + { + msSetError(MS_WMSERR, "Missing required parameter WIDTH", "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "MissingParameterValue"); ++ return msWMSException(map, nVersion, "MissingParameterValue", wms_exception_format); + } + + if (heightfound == 0) + { + msSetError(MS_WMSERR, "Missing required parameter HEIGHT", "msWMSLoadGetMapParams()"); +- return msWMSException(map, nVersion, "MissingParameterValue"); ++ return msWMSException(map, nVersion, "MissingParameterValue", wms_exception_format); + } + + } +@@ -1935,7 +1934,8 @@ + /* + ** msWMSGetCapabilities() + */ +-int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, const char *requested_updatesequence) ++int msWMSGetCapabilities(mapObj *map, int nVersion, cgiRequestObj *req, const char *requested_updatesequence, ++ char *wms_exception_format) + { + char *dtd_url = NULL; + char *script_url=NULL, *script_url_encoded=NULL; +@@ -1961,11 +1961,11 @@ + i = msOWSNegotiateUpdateSequence(requested_updatesequence, updatesequence); + if (i == 0) { /* current */ + msSetError(MS_WMSERR, "UPDATESEQUENCE parameter (%s) is equal to server (%s)", "msWMSGetCapabilities()", requested_updatesequence, updatesequence); +- return msWMSException(map, nVersion, "CurrentUpdateSequence"); ++ return msWMSException(map, nVersion, "CurrentUpdateSequence", wms_exception_format); + } + if (i > 0) { /* invalid */ + msSetError(MS_WMSERR, "UPDATESEQUENCE parameter (%s) is higher than server (%s)", "msWMSGetCapabilities()", requested_updatesequence, updatesequence); +- return msWMSException(map, nVersion, "InvalidUpdateSequence"); ++ return msWMSException(map, nVersion, "InvalidUpdateSequence", wms_exception_format); + } + } + +@@ -2009,7 +2009,7 @@ + if ((script_url=msOWSGetOnlineResource(map, "MO", "onlineresource", req)) == NULL || + (script_url_encoded = msEncodeHTMLEntities(script_url)) == NULL) + { +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + + if (nVersion <= OWS_1_0_7 || nVersion >= OWS_1_3_0) /* 1.0.0 to 1.0.7 and >=1.3.0*/ +@@ -2596,7 +2596,8 @@ + /* + ** msWMSGetMap() + */ +-int msWMSGetMap(mapObj *map, int nVersion, char **names, char **values, int numentries) ++int msWMSGetMap(mapObj *map, int nVersion, char **names, char **values, int numentries, ++ char *wms_exception_format) + { + imageObj *img; + int i = 0; +@@ -2677,7 +2678,7 @@ + else + img = msDrawMap(map, MS_FALSE); + if (img == NULL) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + + /* Set the HTTP Cache-control headers if they are defined + in the map object */ +@@ -2689,7 +2690,7 @@ + msIO_printf("Content-type: %s%c%c", + MS_IMAGE_MIME_TYPE(map->outputformat), 10,10); + if (msSaveImage(map, img, NULL) != MS_SUCCESS) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + + + msFreeImage(img); +@@ -2697,7 +2698,7 @@ + return(MS_SUCCESS); + } + +-int msDumpResult(mapObj *map, int bFormatHtml, int nVersion) ++int msDumpResult(mapObj *map, int bFormatHtml, int nVersion, char *wms_exception_format) + { + int numresults=0; + int i; +@@ -2770,7 +2771,7 @@ + if (msLayerResultsGetShape(lp, &shape, lp->resultcache->results[j].tileindex, lp->resultcache->results[j].shapeindex) != MS_SUCCESS) + { + msFree(itemvisible); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + + msIO_printf(" Feature %ld: \n", lp->resultcache->results[j].shapeindex); +@@ -2797,7 +2798,8 @@ + /* + ** msWMSFeatureInfo() + */ +-int msWMSFeatureInfo(mapObj *map, int nVersion, char **names, char **values, int numentries) ++int msWMSFeatureInfo(mapObj *map, int nVersion, char **names, char **values, int numentries, ++ char *wms_exception_format) + { + int i, feature_count=1, numlayers_found=0; + pointObj point = {-1.0, -1.0}; +@@ -2824,7 +2826,7 @@ + layers = msStringSplit(values[i], ',', &numlayers); + if(layers==NULL || numlayers < 1 || strlen(msStringTrimLeft(values[i])) < 1) { + msSetError(MS_WMSERR, "At least one layer name required in QUERY_LAYERS.", "msWMSFeatureInfo()"); +- return msWMSException(map, nVersion, "LayerNotDefined"); ++ return msWMSException(map, nVersion, "LayerNotDefined", wms_exception_format); + } + + for(j=0; jnumlayers; j++) { +@@ -2872,12 +2874,12 @@ + if (query_layer) + { + msSetError(MS_WMSERR, "Layer(s) specified in QUERY_LAYERS parameter is not offered by the service instance.", "msWMSFeatureInfo()"); +- return msWMSException(map, nVersion, "LayerNotDefined"); ++ return msWMSException(map, nVersion, "LayerNotDefined", wms_exception_format); + } + else + { + msSetError(MS_WMSERR, "Required QUERY_LAYERS parameter missing for getFeatureInfo.", "msWMSFeatureInfo()"); +- return msWMSException(map, nVersion, "LayerNotDefined"); ++ return msWMSException(map, nVersion, "LayerNotDefined", wms_exception_format); + } + } + +@@ -2890,7 +2892,7 @@ + if (GET_LAYER(map, i)->status == MS_ON && !msIsLayerQueryable(GET_LAYER(map, i))) + { + msSetError(MS_WMSERR, "Requested layer(s) are not queryable.", "msWMSFeatureInfo()"); +- return msWMSException(map, nVersion, "LayerNotQueryable"); ++ return msWMSException(map, nVersion, "LayerNotQueryable", wms_exception_format); + } + } + if(point.x == -1.0 || point.y == -1.0) { +@@ -2898,7 +2900,7 @@ + msSetError(MS_WMSERR, "Required I/J parameters missing for getFeatureInfo.", "msWMSFeatureInfo()"); + else + msSetError(MS_WMSERR, "Required X/Y parameters missing for getFeatureInfo.", "msWMSFeatureInfo()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + + /*wms1.3.0: check if the points are valid*/ +@@ -2907,7 +2909,7 @@ + if (point.x > map->width || point.y > map->height) + { + msSetError(MS_WMSERR, "Invalid I/J values", "msWMSFeatureInfo()"); +- return msWMSException(map, nVersion, "InvalidPoint"); ++ return msWMSException(map, nVersion, "InvalidPoint", wms_exception_format); + } + } + /* Perform the actual query */ +@@ -2930,7 +2932,7 @@ + map->query.maxresults = feature_count; + + if(msQueryByPoint(map) != MS_SUCCESS) +- if((query_status=ms_error->code) != MS_NOTFOUND) return msWMSException(map, nVersion, NULL); ++ if((query_status=ms_error->code) != MS_NOTFOUND) return msWMSException(map, nVersion, NULL, wms_exception_format); + + /* Generate response */ + if (strcasecmp(info_format, "MIME") == 0 || +@@ -2945,7 +2947,7 @@ + msIO_printf("Content-type: text/plain%c%c",10,10); + msIO_printf("GetFeatureInfo results:\n"); + +- numresults = msDumpResult(map, 0, nVersion); ++ numresults = msDumpResult(map, 0, nVersion, wms_exception_format); + + if (numresults == 0) msIO_printf("\n Search returned no results.\n"); + +@@ -2986,10 +2988,10 @@ + if (query_status == MS_NOTFOUND && msObj->map->web.empty) + { + if(msReturnURL(msObj, msObj->map->web.empty, BROWSE) != MS_SUCCESS) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + else if (msReturnTemplateQuery(msObj, (char*)pszMimeType, NULL) != MS_SUCCESS) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + + /* We don't want to free the map, and param names/values since they */ + /* belong to the caller, set them to NULL before freeing the mapservObj */ +@@ -3004,9 +3006,9 @@ + { + msSetError(MS_WMSERR, "Unsupported INFO_FORMAT value (%s).", "msWMSFeatureInfo()", info_format); + if (nVersion >= OWS_1_3_0) +- return msWMSException(map, nVersion, "InvalidFormat"); ++ return msWMSException(map, nVersion, "InvalidFormat", wms_exception_format); + else +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + + return(MS_SUCCESS); +@@ -3016,7 +3018,7 @@ + ** msWMSDescribeLayer() + */ + int msWMSDescribeLayer(mapObj *map, int nVersion, char **names, +- char **values, int numentries) ++ char **values, int numentries, char *wms_exception_format) + { + int i = 0; + char **layers = NULL; +@@ -3048,12 +3050,12 @@ + if (nVersion >= OWS_1_3_0 && sld_version == NULL) + { + msSetError(MS_WMSERR, "Missing required parameter SLD_VERSION", "DescribeLayer()"); +- return msWMSException(map, nVersion, "MissingParameterValue"); ++ return msWMSException(map, nVersion, "MissingParameterValue", wms_exception_format); + } + if (nVersion >= OWS_1_3_0 && strcasecmp(sld_version, "1.1.0") != 0) + { + msSetError(MS_WMSERR, "SLD_VERSION must be 1.1.0", "DescribeLayer()"); +- return msWMSException(map, nVersion, "InvalidParameterValue"); ++ return msWMSException(map, nVersion, "InvalidParameterValue", wms_exception_format); + } + + if (encoding) +@@ -3219,7 +3221,7 @@ + ** msWMSGetLegendGraphic() + */ + int msWMSGetLegendGraphic(mapObj *map, int nVersion, char **names, +- char **values, int numentries) ++ char **values, int numentries, char *wms_exception_format) + { + char *pszLayer = NULL; + char *pszFormat = NULL; +@@ -3281,23 +3283,23 @@ + if (!pszLayer) + { + msSetError(MS_WMSERR, "Mandatory LAYER parameter missing in GetLegendGraphic request.", "msWMSGetLegendGraphic()"); +- return msWMSException(map, nVersion, "LayerNotDefined"); ++ return msWMSException(map, nVersion, "LayerNotDefined", wms_exception_format); + } + if (!pszFormat) + { + msSetError(MS_WMSERR, "Mandatory FORMAT parameter missing in GetLegendGraphic request.", "msWMSGetLegendGraphic()"); +- return msWMSException(map, nVersion, "InvalidFormat"); ++ return msWMSException(map, nVersion, "InvalidFormat", wms_exception_format); + } + + if (nVersion >= OWS_1_3_0 && sld_version == NULL) + { + msSetError(MS_WMSERR, "Missing required parameter SLD_VERSION", "GetLegendGraphic()"); +- return msWMSException(map, nVersion, "MissingParameterValue"); ++ return msWMSException(map, nVersion, "MissingParameterValue", wms_exception_format); + } + if (nVersion >= OWS_1_3_0 && strcasecmp(sld_version, "1.1.0") != 0) + { + msSetError(MS_WMSERR, "SLD_VERSION must be 1.1.0", "GetLegendGraphic()"); +- return msWMSException(map, nVersion, "InvalidParameterValue"); ++ return msWMSException(map, nVersion, "InvalidParameterValue", wms_exception_format); + } + /* check if layer name is valid. We only test the layer name and not */ + /* the group name. */ +@@ -3315,7 +3317,7 @@ + { + msSetError(MS_WMSERR, "Invalid layer given in the LAYER parameter.", + "msWMSGetLegendGraphic()"); +- return msWMSException(map, nVersion, "LayerNotDefined"); ++ return msWMSException(map, nVersion, "LayerNotDefined", wms_exception_format); + } + + /* validate format */ +@@ -3340,7 +3342,7 @@ + "Unsupported output format (%s).", + "msWMSGetLegendGraphic()", + values[i] ); +- return msWMSException(map, nVersion, "InvalidFormat"); ++ return msWMSException(map, nVersion, "InvalidFormat", wms_exception_format); + } + } + else +@@ -3358,7 +3360,7 @@ + "Unsupported output format (%s).", + "msWMSGetLegendGraphic()", + pszFormat); +- return msWMSException(map, nVersion, "InvalidFormat"); ++ return msWMSException(map, nVersion, "InvalidFormat", wms_exception_format); + } + } + msApplyOutputFormat(&(map->outputformat), psFormat, MS_NOOVERRIDE, +@@ -3379,7 +3381,7 @@ + { + msSetError(MS_WMSERR, "style used in the STYLE parameter is not defined on the layer.", + "msWMSGetLegendGraphic()"); +- return msWMSException(map, nVersion, "StyleNotDefined"); ++ return msWMSException(map, nVersion, "StyleNotDefined", wms_exception_format); + } + else + { +@@ -3473,16 +3475,16 @@ + "Unavailable RULE (%s).", + "msWMSGetLegendGraphic()", + psRule); +- return msWMSException(map, nVersion, "InvalidRule"); ++ return msWMSException(map, nVersion, "InvalidRule", wms_exception_format); + } + } + + if (img == NULL) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + + msIO_printf("Content-type: %s%c%c", MS_IMAGE_MIME_TYPE(map->outputformat), 10,10); + if (msSaveImage(map, img, NULL) != MS_SUCCESS) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + + msFreeImage(img); + +@@ -3495,7 +3497,7 @@ + ** have a status set to on or default. + */ + int msWMSGetStyles(mapObj *map, int nVersion, char **names, +- char **values, int numentries) ++ char **values, int numentries, char *wms_exception_format) + + { + int i,j,k; +@@ -3516,7 +3518,7 @@ + if (layers==NULL || numlayers < 1) { + msSetError(MS_WMSERR, "At least one layer name required in LAYERS.", + "msWMSGetStyles()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + for(j=0; jnumlayers; j++) + GET_LAYER(map, j)->status = MS_OFF; +@@ -3544,7 +3546,7 @@ + { + msSetError(MS_WMSERR, "Invalid layer(s) given in the LAYERS parameter.", + "msWMSGetStyles()"); +- return msWMSException(map, nVersion, "LayerNotDefined"); ++ return msWMSException(map, nVersion, "LayerNotDefined", wms_exception_format); + } + + if (nVersion <= OWS_1_1_1) +@@ -3620,6 +3622,7 @@ + int i, status, nVersion=OWS_VERSION_NOTSET; + const char *version=NULL, *request=NULL, *service=NULL, *format=NULL, *updatesequence=NULL; + const char * encoding; ++ char *wms_exception_format = NULL; + + encoding = msOWSLookupMetadata(&(map->web.metadata), "MO", "encoding"); + +@@ -3654,7 +3657,7 @@ + /* Invalid version format. msSetError() has been called by + * msOWSParseVersionString() and we return the error as an exception + */ +- return msWMSException(map, OWS_VERSION_NOTSET, NULL); ++ return msWMSException(map, OWS_VERSION_NOTSET, NULL, wms_exception_format); + } + + /* +@@ -3667,7 +3670,7 @@ + (nVersion >= OWS_1_0_7 || nVersion == OWS_VERSION_NOTSET)) + { + msSetError(MS_WMSERR, "Required SERVICE parameter missing.", "msWMSDispatch"); +- return msWMSException(map, nVersion, "ServiceNotDefined"); ++ return msWMSException(map, nVersion, "ServiceNotDefined", wms_exception_format); + } + + /* +@@ -3680,8 +3683,8 @@ + if (nVersion == OWS_VERSION_NOTSET) + nVersion = OWS_1_3_0;/* VERSION is optional with getCapabilities only */ + if ((status = msOWSMakeAllLayersUnique(map)) != MS_SUCCESS) +- return msWMSException(map, nVersion, NULL); +- return msWMSGetCapabilities(map, nVersion, req, updatesequence); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); ++ return msWMSGetCapabilities(map, nVersion, req, updatesequence, wms_exception_format); + } + else if (request && (strcasecmp(request, "context") == 0 || + strcasecmp(request, "GetContext") == 0) ) +@@ -3710,11 +3713,11 @@ + { + msSetError(MS_WMSERR, "GetContext not enabled on this server.", + "msWMSDispatch()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + + if ((status = msOWSMakeAllLayersUnique(map)) != MS_SUCCESS) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + + if (encoding) + msIO_printf("Content-type: text/xml; charset=%s%c%c", encoding,10,10); +@@ -3722,7 +3725,7 @@ + msIO_printf("Content-type: text/xml%c%c",10,10); + + if ( msWriteMapContext(map, stdout) != MS_SUCCESS ) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + /* Request completed */ + return MS_SUCCESS; + } +@@ -3765,7 +3768,7 @@ + msSetError(MS_WMSERR, + "Incomplete WMS request: VERSION parameter missing", + "msWMSDispatch()"); +- return msWMSException(map, OWS_VERSION_NOTSET, NULL); ++ return msWMSException(map, OWS_VERSION_NOTSET, NULL, wms_exception_format); + } + + if (request==NULL) +@@ -3773,17 +3776,19 @@ + msSetError(MS_WMSERR, + "Incomplete WMS request: REQUEST parameter missing", + "msWMSDispatch()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + + if ((status = msOWSMakeAllLayersUnique(map)) != MS_SUCCESS) +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + + if (strcasecmp(request, "GetLegendGraphic") == 0) +- return msWMSGetLegendGraphic(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams); ++ return msWMSGetLegendGraphic(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams, ++ wms_exception_format); + + if (strcasecmp(request, "GetStyles") == 0) +- return msWMSGetStyles(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams); ++ return msWMSGetStyles(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams, ++ wms_exception_format); + + else if (request && strcasecmp(request, "GetSchemaExtension") == 0) + return msWMSGetSchemaExtension(map); +@@ -3792,25 +3797,29 @@ + if (strcasecmp(request, "map") == 0 || strcasecmp(request, "GetMap") == 0 || + strcasecmp(request, "feature_info") == 0 || strcasecmp(request, "GetFeatureInfo") == 0 || strcasecmp(request, "DescribeLayer") == 0) + { +- status = msWMSLoadGetMapParams(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams); ++ status = msWMSLoadGetMapParams(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams, ++ wms_exception_format); + if (status != MS_SUCCESS) return status; + } + + + if (strcasecmp(request, "map") == 0 || strcasecmp(request, "GetMap") == 0) +- return msWMSGetMap(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams); ++ return msWMSGetMap(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams, ++ wms_exception_format); + else if (strcasecmp(request, "feature_info") == 0 || strcasecmp(request, "GetFeatureInfo") == 0) +- return msWMSFeatureInfo(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams); ++ return msWMSFeatureInfo(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams, ++ wms_exception_format); + else if (strcasecmp(request, "DescribeLayer") == 0) + { +- return msWMSDescribeLayer(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams); ++ return msWMSDescribeLayer(map, nVersion, req->ParamNames, req->ParamValues, req->NumParams, ++ wms_exception_format); + } + + /* Hummmm... incomplete or unsupported WMS request */ + if (service != NULL && strcasecmp(service, "WMS") == 0) + { + msSetError(MS_WMSERR, "Incomplete or unsupported WMS request", "msWMSDispatch()"); +- return msWMSException(map, nVersion, NULL); ++ return msWMSException(map, nVersion, NULL, wms_exception_format); + } + else + return MS_DONE; /* Not a WMS request */ +Index: mapows.h +=================================================================== +--- mapows.h (revision 10854) ++++ mapows.h (working copy) +@@ -408,8 +408,8 @@ + * mapwms.c + *====================================================================*/ + int msWMSDispatch(mapObj *map, cgiRequestObj *req); +-MS_DLL_EXPORT int msWMSLoadGetMapParams(mapObj *map, int nVersion, +- char **names, char **values, int numentries); ++MS_DLL_EXPORT int msWMSLoadGetMapParams(mapObj *map, int nVersion, char **names, ++ char **values, int numentries, char *wms_exception_format); + + + /*==================================================================== +Index: mapobject.c +=================================================================== +--- mapobject.c (revision 10854) ++++ mapobject.c (working copy) +@@ -774,10 +774,17 @@ + { + #ifdef USE_WMS_SVR + int version; ++ char *wms_exception_format = NULL; ++ int i =0; + + version = msOWSParseVersionString(wmtver); ++ for(i=0; iNumParams; i++) ++ { ++ if (strcasecmp(request->ParamNames[i], "EXCEPTIONS") == 0) ++ wms_exception_format = request->ParamValues[i]; ++ } + return msWMSLoadGetMapParams(map, version, request->ParamNames, +- request->ParamValues, request->NumParams); ++ request->ParamValues, request->NumParams, wms_exception_format); + #else + msSetError(MS_WMSERR, "WMS server support is not available.", + "msMapLoadOWSParameters()"); diff --git a/mapserver.spec b/mapserver.spec index 2620237..fc8eab3 100644 --- a/mapserver.spec +++ b/mapserver.spec @@ -60,6 +60,7 @@ BuildRequires: libgcj-devel BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Patch0: mapserver-5.4.1_buildchecks.patch Patch1: hidden_layer.patch +Patch2: bug3525_ms5.6.patch #%define python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)") %define _cgibindir /srv/www/cgi-bin @@ -111,6 +112,7 @@ within the Java programming language. %setup -q %patch0 -p1 %patch1 -p1 +%patch2 -p1 # fix spurious perm bits chmod -x tests/home.png @@ -287,6 +289,9 @@ rm -rf %{buildroot} %{_javadir}/*.jar %changelog +* Tue Jan 11 2011 Stephan Holl 5.6.5 +- added upstream-patch for mapserver bug #3525 to work reliably with WMS + 1.3.0 and FCGI-mode * Mon Dec 06 2010 Stephan Holl 5.6.5 - added --with-experimental-png-compile-flag * Wed Oct 13 2010 Stephan Holl 5.6.5