Hola Gabriel,

   The case you exposed about having same URI for one global workspace and 
several isolated ones is valid as stated on GSIP that introduced isolated 
workspaces:
   
https://github.com/geoserver/geoserver/wiki/GSIP-165---Add-isolated-workspaces-concept-to-GeoServer

   The following situation will be valid:
     * Prefix: st1 Namespace: http://www.stations.org/1.0 Isolated: false
     * Prefix: st2 Namespace: http://www.stations.org/1.0 Isolated: true
     * Prefix: st3 Namespace: http://www.stations.org/1.0 Isolated: true

   But this one will not be a valid one:
     * Prefix: st1 Namespace: http://www.stations.org/1.0 Isolated: false
     * Prefix: st2 Namespace: http://www.stations.org/1.0 Isolated: false
     * Prefix: st3 Namespace: http://www.stations.org/1.0 Isolated: true

   Only one non isolated workspace can use a certain namespace.

   Also on method:

       IsolatedCatalogFacade.getNamespaceByURI(String)

   Only global namespace can be returned, isolated ones are avoided so only one 
global workspace should match the lookup:

   
https://github.com/geoserver/geoserver/blob/290813cbc463e68459b7eb7d8e6b031b0e192657/src/main/src/main/java/org/geoserver/catalog/impl/IsolatedCatalogFacade.java#L347

   Regards,

   Fernando Mino

   ==

   GeoServer Professional Services from the experts! Visit http://goo.gl/it488V 
for more information.

   ==

   Fernando Mino

   Software Engineer

   GeoSolutions S.A.S.

   Via di Montramito 3/A

   55054  Massarosa (LU)

   Italy

   phone: +39 0584 962313

   fax:     +39 0584 1660272

   http://www.geo-solutions.it

   http://twitter.com/geosolutions_it

   -------------------------------------------------------

   Con riferimento alla normativa sul trattamento dei dati personali (Reg. UE 
2016/679 - Regolamento generale sulla protezione dei dati “GDPR”), si precisa 
che ogni circostanza inerente alla presente email (il suo contenuto, gli 
eventuali allegati, etc.) è un dato la cui conoscenza è riservata al/i solo/i 
destinatario/i indicati dallo scrivente. Se il messaggio Le è giunto per 
errore, è tenuta/o a cancellarlo, ogni altra operazione è illecita. Le sarei 
comunque grato se potesse darmene notizia.
   This email is intended only for the person or entity to which it is 
addressed and may contain information that is privileged, confidential or 
otherwise protected from disclosure. We remind that - as provided by European 
Regulation 2016/679 “GDPR” - copying, dissemination or use of this e-mail or 
the information herein by anyone other than the intended recipient is 
prohibited. If you have received this email by mistake, please notify us 
immediately by telephone or e-mail.


   From "Gabriel Roldan" [email protected]
   To "Geoserver-devel" [email protected]
   Cc
   Date Sat, 2 Nov 2019 11:49:13 -0300
   Subject Re: [Geoserver-devel] Isolated namespace validation
   Tested and indeed, there's a race condition the will leave you with an 
invalid configuration:
   - Have 3 workspaces with the same uri:
   ws1:http://example.com
   ws2:http://example.com
   ws3:http://example.com
   - Change the config of ws1 to isolated:false and save
   now, depending existing = getNamespaceByURI(namespace.getURI());
   may return ws1, in which case the validation proceeds and lets you with
   ws1 being non isolated and the other two being isolated, but with the same 
ns uri.
   On Sat, 2 Nov 2019 at 11:38, Gabriel Roldan <[email protected]> wrote:

   Hey,
   stumbled upon this code in CatalogImpl.validate(NamespaceInfo) and there 
seems to be a bug:
           if (!namespace.isIsolated()) {
               // not an isolated namespace \ workplace so we need to check for 
duplicates
               existing = getNamespaceByURI(namespace.getURI());
               if (existing != null && 
!existing.getId().equals(namespace.getId())) {
                   throw new IllegalArgumentException(
                           "Namespace with URI '" + namespace.getURI() + "' 
already exists.");
               }
           }
   It calls getNamespaceByURI(namespace.getURI()), but that will get you only 
one of the possible many (say you have multiple isolated workspaces with the 
same namespace URI)
   I think the following would be correct, provided my understanding is too:
           if (!namespace.isIsolated()) {
               // not an isolated namespace \ workplace so we need to check for 
duplicates
               List<NamespaceInfo> currentList = 
facade.getNamespacesByURI(namespace.getURI());
               for (NamespaceInfo current : currentList) {
                   if (!current.getId().equals(namespace.getId())) {
                       throw new IllegalArgumentException(
                               "Namespace with URI '" + namespace.getURI() + "' 
already exists.");
                   }
               }
           }
   --
   Gabriel Roldán

   --
   Gabriel Roldán
_______________________________________________
Geoserver-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to