Author: orudyy
Date: Wed Apr  3 11:50:36 2013
New Revision: 1463933

URL: http://svn.apache.org/r1463933
Log:
QPID-4695: Add validation of configured object names and IDs

Modified:
    
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html
    
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html
    
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html
    
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html
    
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHost.html
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
    
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html?rev=1463933&r1=1463932&r2=1463933&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addAuthenticationProvider.html
 Wed Apr  3 11:50:36 2013
@@ -25,7 +25,7 @@
                 <tr>
                     <td class="tableContainer-labelCell" style="width: 
300px;">Name*:</td>
                     <td class="tableContainer-valueCell"><input type="text" 
required="true" name="name"
-                        id="formAddAuthenticationProvider.name" 
placeholder="Name"
+                        id="formAddAuthenticationProvider.name" 
placeholder="Name" regexp="^[\x20-\x2e\x30-\x7F]{1,255}$"
                         dojoType="dijit.form.ValidationTextBox" 
missingMessage="A name must be supplied" /></div></td>
                 </tr>
                 </table>

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html?rev=1463933&r1=1463932&r2=1463933&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addExchange.html
 Wed Apr  3 11:50:36 2013
@@ -26,7 +26,7 @@
                     <td valign="top"><strong>Exchange Name*: </strong></td>
                     <td><input type="text" required="true" name="name" 
id="formAddExchange.name" placeholder="Exchange Name"
                         dojoType="dijit.form.ValidationTextBox" 
missingMessage="A name must be supplied"
-                        
data-dojo-props="regExp:'^(?!qpid\.|amq\.|\<\<default\>\>).*$', 
invalidMessage:'Reserved exchange name!'"/></td>
+                        
data-dojo-props="regExp:'^(?!qpid\.|amq\.|\<\<default\>\>)[\x20-\x2e\x30-\x7F]{1,255}$',
 invalidMessage:'Illegal or reserved exchange name!'"/></td>
                 </tr>
                 <tr>
                     <td valign="top"><strong>Durable? </strong></td>

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html?rev=1463933&r1=1463932&r2=1463933&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addPort.html
 Wed Apr  3 11:50:36 2013
@@ -25,7 +25,7 @@
             <div id="formAddPort:fields">
                 <input type="text" required="true" name="name" 
id="formAddPort.name" placeholder="Name"
                     data-dojo-props="label: 'Name*:'" 
dojoType="dijit.form.ValidationTextBox"
-                    missingMessage="A name must be supplied" />
+                    missingMessage="A name must be supplied" 
regexp="^[\x20-\x2e\x30-\x7F]{1,255}$"/>
                 <input data-dojo-type="dijit.form.NumberSpinner" 
id="formAddPort.port" required="true" data-dojo-props="label: 'Port Number*:'"
                      name="port" smallDelta="1" 
constraints="{min:1,max:65535,places:0, pattern: '#####'}"
                      missingMessage="A port number must be supplied"  />

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html?rev=1463933&r1=1463932&r2=1463933&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addQueue.html
 Wed Apr  3 11:50:36 2013
@@ -25,7 +25,7 @@
                 <tr>
                     <td valign="top"><strong>Queue Name*: </strong></td>
                     <td><input type="text" required="true" name="name" 
id="formAddQueue.name" placeholder="Queue Name"
-                        dojoType="dijit.form.ValidationTextBox" 
missingMessage="A name must be supplied" /></td>
+                        dojoType="dijit.form.ValidationTextBox" 
missingMessage="A name must be supplied" 
regexp="^[\x20-\x2e\x30-\x7F]{1,255}$"/></td>
                 </tr>
                 <tr>
                     <td valign="top"><strong>Durable? </strong></td>

Modified: 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHost.html
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHost.html?rev=1463933&r1=1463932&r2=1463933&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHost.html
 (original)
+++ 
qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/addVirtualHost.html
 Wed Apr  3 11:50:36 2013
@@ -27,7 +27,7 @@
                     <td class="tableContainer-valueCell">
                         <input type="text" required="true" name="name" 
id="formAddVirtualHost.name"
                             placeholder="Virtual Host Name" 
dojoType="dijit.form.ValidationTextBox"
-                            missingMessage="A name must be supplied" />
+                            missingMessage="A name must be supplied" 
regexp="^[\x20-\x2e\x30-\x7F]{1,255}$"/>
                     </td>
                 </tr>
             </table>

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java?rev=1463933&r1=1463932&r2=1463933&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/AbstractAdapter.java
 Wed Apr  3 11:50:36 2013
@@ -32,6 +32,7 @@ import org.apache.qpid.server.model.Conf
 import org.apache.qpid.server.model.ConfiguredObject;
 import org.apache.qpid.server.model.IllegalStateTransitionException;
 import org.apache.qpid.server.model.State;
+import org.apache.qpid.server.configuration.IllegalConfigurationException;
 import org.apache.qpid.server.configuration.updater.ChangeAttributesTask;
 import org.apache.qpid.server.configuration.updater.ChangeStateTask;
 import org.apache.qpid.server.configuration.updater.CreateChildTask;
@@ -40,6 +41,7 @@ import org.apache.qpid.server.configurat
 
 abstract class AbstractAdapter implements ConfiguredObject
 {
+    private static final Object ID = "id";
     private final Map<String,Object> _attributes = new HashMap<String, 
Object>();
     private final Map<Class<? extends ConfiguredObject>, ConfiguredObject> 
_parents =
             new HashMap<Class<? extends ConfiguredObject>, ConfiguredObject>();
@@ -347,6 +349,15 @@ abstract class AbstractAdapter implement
 
     protected void changeAttributes(final Map<String, Object> attributes)
     {
+        if (attributes.containsKey(ID))
+        {
+            UUID id = getId();
+            Object idAttributeValue = attributes.get(ID);
+            if (idAttributeValue != null && !idAttributeValue.equals(id))
+            {
+                throw new IllegalConfigurationException("Cannot change 
existing configured object id");
+            }
+        }
         Collection<String> names = getAttributeNames();
         for (String name : names)
         {

Modified: 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java?rev=1463933&r1=1463932&r2=1463933&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
 (original)
+++ 
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/AuthenticationProviderRestTest.java
 Wed Apr  3 11:50:36 2013
@@ -24,6 +24,7 @@ import java.io.File;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.UUID;
 
 import org.apache.qpid.server.model.AuthenticationProvider;
 import org.apache.qpid.server.model.LifetimePolicy;
@@ -90,6 +91,22 @@ public class AuthenticationProviderRestT
         assertProvider(false, 
AnonymousAuthenticationManagerFactory.PROVIDER_TYPE, provider);
     }
 
+    public void testUpdateAuthenticationProviderIdFails() throws Exception
+    {
+        String providerName = "test-provider";
+        Map<String, Object> attributes = new HashMap<String, Object>();
+        attributes.put(AuthenticationProvider.NAME, providerName);
+        attributes.put(AuthenticationProvider.TYPE, 
AnonymousAuthenticationManagerFactory.PROVIDER_TYPE);
+
+        int responseCode = 
getRestTestHelper().submitRequest("/rest/authenticationprovider/" + 
providerName, "PUT", attributes);
+        assertEquals("Unexpected response code", 201, responseCode);
+
+        attributes.put(AuthenticationProvider.ID, UUID.randomUUID());
+
+        responseCode = 
getRestTestHelper().submitRequest("/rest/authenticationprovider/" + 
providerName, "PUT", attributes);
+        assertEquals("Update with new ID should fail", 409, responseCode);
+    }
+
     public void testDeleteOfDefaultAuthenticationProviderFails() throws 
Exception
     {
         String providerName = 
TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER;



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to