cloudstack-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CLOUDSTACK-8922) Unable to delete IP tag
Date Thu, 23 Nov 2017 11:12:00 GMT

    [ https://issues.apache.org/jira/browse/CLOUDSTACK-8922?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16264183#comment-16264183
] 

ASF GitHub Bot commented on CLOUDSTACK-8922:
--------------------------------------------

bwsw commented on issue #905: BUG-ID: CLOUDSTACK-8922:  Unable to delete IP tag
URL: https://github.com/apache/cloudstack/pull/905#issuecomment-346590497
 
 
   It looks overcomplicated, really, search over resourceId is a wrong logic. It should search
only against uuds. We discussed the problem in a mail list with @rafaelweingartner.
   Right now I'm working on fix for it too. The code is here:
   
   https://github.com/bwsw/cloudstack/blob/4.10.1-NP/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
   
   All marvin component and smoke are passing, and tag specific too:
   
   ```
   nosetests-2.7 --with-marvin --marvin-config=setup/dev/advanced.cfg -w test/integration/component
--with-xunit --xunit-file=/tmp/bvt_selfservice_cases.xml --zone=Sandbox-simulator --hypervisor=simulator
-a tags=advanced,required_hardware=false -a speed=0 `pwd`/test/integration/component/test_tags.py
   ```
   I believe, leaving internal id search is a wrong way to deal with it, because they can
not and shouldn't appear in API. Also, the code I'm working on includes security fix for listing
resource tags because right now the code from the PR doesn't even checks privileges for listing:
   
   ```
    @Override
       public List<? extends ResourceTag> listByResourceTypeAndId(ResourceObjectType
type, long resourceId) {
           return _resourceTagDao.listBy(resourceId, type);
       }
   ```
   Mine:
   
   ```
   @Override
       public List<? extends ResourceTag> listByResourceTypeAndId(ResourceObjectType
resourceType, long resourceId) {
           Account caller = CallContext.current().getCallingAccount();
           Pair<Long, Long> accountDomainPair = getAccountDomain(resourceId, resourceType);
           Long domainId = accountDomainPair.second();
           Long accountId = accountDomainPair.first();
           checkResourceAccessible(accountId, domainId, "Account '" + caller + "' doesn't
have permissions to list tags" +
                   " for resource '" + resourceId + "' of type '" + resourceType + "'.");
           return _resourceTagDao.listBy(resourceId, resourceType);
       }
   ```
   
   So, basically the PR:
   
   1. it doesn't fix the semantical problem allowing to search with internal ids
   2. doesn't fix security fault when listing resource tags.
   
   I need couple of days to finish the code because I want to add account tags feature and
have to implement set of marvin tests for it.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> Unable to delete IP tag
> -----------------------
>
>                 Key: CLOUDSTACK-8922
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-8922
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the default.) 
>          Components: Management Server
>    Affects Versions: 4.5.2
>            Reporter: subhash yedugundla
>
> 1. Acquire new IP address 
> 2. Create tags for the IP 
> 3. Delete the tag from Step#2 
>  an error occurs at Step#3 whereby the delete tag operation fails with "Acct[f4d0c381-e0b7-4aed-aa90-3336d42f7540-71000000017]
does not have permission to operate within domain id\u003d632"
> TROUBLESHOOTING
> ==================
> Acquire new IP address
> *********************
> {noformat}
> 2014-11-19 15:08:15,870 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl] (catalina-exec-20:ctx-faed32b5
ctx-712308cb ctx-401bfcaf) submit async job-72419, details: AsyncJobVO {id:72419, userId:
17, accountId: 15, instanceType: IpAddress, instanceId: 672, cmd: org.apache.cloudstack.api.command.user.address.AssociateIPAddrCmd,
cmdInfo: {"id":"672","response":"json","cmdEventType":"NET.IPASSIGN","ctxUserId":"17","zoneid":"a117e75f-d02e-4074-806d-889c61261394","httpmethod":"GET","ctxAccountId":"15","networkid":"0ca7c69e-c281-407b-a152-2559c10a81a6","ctxStartEventId":"166725","signature":"3NZRU6dIBxg1HMDiP/MkY2agRn4\u003d","apikey":"tuwHXs1AfpQheJeJ9BcLdoVxIBCItASnguAbus76AMUcIXuyFgHOJiIB44fO57p_bBaqyfppmxrC-rQSb-nxXg"},
cmdVersion: 0, status: IN_PROGRESS, processStatus: 0, resultCode: 0, result: null, initMsid:
345048681027, completeMsid: null, lastUpdated: null, lastPolled: null, created: null}
> 2014-11-19 15:08:15,870 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl] (API-Job-Executor-68:ctx-fca9add6
job-72419) Executing AsyncJobVO {id:72419, userId: 17, accountId: 15, instanceType: IpAddress,
instanceId: 672, cmd: org.apache.cloudstack.api.command.user.address.AssociateIPAddrCmd, cmdInfo:
{"id":"672","response":"json","cmdEventType":"NET.IPASSIGN","ctxUserId":"17","zoneid":"a117e75f-d02e-4074-806d-889c61261394","httpmethod":"GET","ctxAccountId":"15","networkid":"0ca7c69e-c281-407b-a152-2559c10a81a6","ctxStartEventId":"166725","signature":"3NZRU6dIBxg1HMDiP/MkY2agRn4\u003d","apikey":"tuwHXs1AfpQheJeJ9BcLdoVxIBCItASnguAbus76AMUcIXuyFgHOJiIB44fO57p_bBaqyfppmxrC-rQSb-nxXg"},
cmdVersion: 0, status: IN_PROGRESS, processStatus: 0, resultCode: 0, result: null, initMsid:
345048681027, completeMsid: null, lastUpdated: null, lastPolled: null, created: null}
> 2014-11-19 15:08:15,890 DEBUG [c.c.u.AccountManagerImpl] (API-Job-Executor-68:ctx-fca9add6
job-72419 ctx-96bbdee5) Access to Ntwk[216|Guest|8] granted to Acct[f4d0c381-e0b7-4aed-aa90-3336d42f7540-71000000017]
by DomainChecker
> 2014-11-19 15:08:15,911 DEBUG [c.c.n.IpAddressManagerImpl] (API-Job-Executor-68:ctx-fca9add6
job-72419 ctx-96bbdee5) Successfully associated ip address 210.140.170.160 to network Ntwk[216|Guest|8]
> 2014-11-19 15:08:15,922 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl] (API-Job-Executor-68:ctx-fca9add6
job-72419 ctx-96bbdee5) Complete async job-72419, jobStatus: SUCCEEDED, resultCode: 0, result:
org.apache.cloudstack.api.response.IPAddressResponse/ipaddress/{"id":"3d7c3a2a-1f2d-46dc-9905-4a7ce620e7e9","ipaddress":"210.140.170.160","allocated":"2014-11-19T15:08:15+0900","zoneid":"a117e75f-d02e-4074-806d-889c61261394","zonename":"tesla","issourcenat":false,"account":"71000000017","domainid":"cc27e32c-6acd-4fdf-a1e5-734cef8a7fe0","domain":"71000000017","forvirtualnetwork":true,"isstaticnat":false,"issystem":false,"associatednetworkid":"0ca7c69e-c281-407b-a152-2559c10a81a6","associatednetworkname":"network1","networkid":"79132c74-fe77-4bd5-9915-ce7c577fb95f","state":"Allocating","physicalnetworkid":"4a00ce42-6a30-4494-afdd-3531d883237b","tags":[],"isportable":false}
> 2014-11-19 15:08:15,932 INFO  [o.a.c.f.j.i.AsyncJobMonitor] (API-Job-Executor-68:ctx-fca9add6
job-72419) Remove job-72419 from job monitoring
> +-------+-------------------------------------------------------------------+------------+---------------+-------------------+---------------------+---------------------+
> | id    | job_cmd                                                           | job_status
| job_init_msid | job_complete_msid | created             | last_updated        |
> +-------+-------------------------------------------------------------------+------------+---------------+-------------------+---------------------+---------------------+
> | 72419 | org.apache.cloudstack.api.command.user.address.AssociateIPAddrCmd |       
  1 |  345048681027 |      345048681027 | 2014-11-19 06:08:15 | 2014-11-19 06:08:15 |
> +-------+-------------------------------------------------------------------+------------+---------------+-------------------+---------------------+---------------------+
> 1 row in set (0.00 sec)
> {noformat}
> Create Tag
> ***********
> {noformat}
> 2014-11-19 15:08:16,376 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl] (catalina-exec-1:ctx-dee6efde
ctx-ae7d665b ctx-34f0c207) submit async job-72421, details: AsyncJobVO {id:72421, userId:
17, accountId: 15, instanceType: None, instanceId: null, cmd: org.apache.cloudstack.api.command.user.tag.CreateTagsCmd,
cmdInfo: {"response":"json","cmdEventType":"CREATE_TAGS","ctxUserId":"17","tags[0].value":"hyamashita001-test13","tags[0].key":"cloud-description","httpmethod":"GET","resourcetype":"PublicIPAddress","ctxAccountId":"15","ctxStartEventId":"166734","signature":"Wdx759HnH7eeh1YbfZbqyiPHqOI\u003d","resourceids":"3d7c3a2a-1f2d-46dc-9905-4a7ce620e7e9","apikey":"tuwHXs1AfpQheJeJ9BcLdoVxIBCItASnguAbus76AMUcIXuyFgHOJiIB44fO57p_bBaqyfppmxrC-rQSb-nxXg"},
cmdVersion: 0, status: IN_PROGRESS, processStatus: 0, resultCode: 0, result: null, initMsid:
345048681027, completeMsid: null, lastUpdated: null, lastPolled: null, created: null}
> 2014-11-19 15:08:16,376 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl] (API-Job-Executor-66:ctx-60c43fb5
job-72421) Executing AsyncJobVO {id:72421, userId: 17, accountId: 15, instanceType: None,
instanceId: null, cmd: org.apache.cloudstack.api.command.user.tag.CreateTagsCmd, cmdInfo:
{"response":"json","cmdEventType":"CREATE_TAGS","ctxUserId":"17","tags[0].value":"hyamashita001-test13","tags[0].key":"cloud-description","httpmethod":"GET","resourcetype":"PublicIPAddress","ctxAccountId":"15","ctxStartEventId":"166734","signature":"Wdx759HnH7eeh1YbfZbqyiPHqOI\u003d","resourceids":"3d7c3a2a-1f2d-46dc-9905-4a7ce620e7e9","apikey":"tuwHXs1AfpQheJeJ9BcLdoVxIBCItASnguAbus76AMUcIXuyFgHOJiIB44fO57p_bBaqyfppmxrC-rQSb-nxXg"},
cmdVersion: 0, status: IN_PROGRESS, processStatus: 0, resultCode: 0, result: null, initMsid:
345048681027, completeMsid: null, lastUpdated: null, lastPolled: null, created: null}
> 2014-11-19 15:08:16,394 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl] (API-Job-Executor-66:ctx-60c43fb5
job-72421 ctx-269323f2) Complete async job-72421, jobStatus: SUCCEEDED, resultCode: 0, result:
org.apache.cloudstack.api.response.SuccessResponse/null/{"success":true}
> 2014-11-19 15:08:16,404 INFO  [o.a.c.f.j.i.AsyncJobMonitor] (API-Job-Executor-66:ctx-60c43fb5
job-72421) Remove job-72421 from job monitoring
> +-------+----------------------------------------------------------+------------+---------------+-------------------+---------------------+---------------------+
> | id    | job_cmd                                                  | job_status | job_init_msid
| job_complete_msid | created             | last_updated        |
> +-------+----------------------------------------------------------+------------+---------------+-------------------+---------------------+---------------------+
> | 72421 | org.apache.cloudstack.api.command.user.tag.CreateTagsCmd |          1 |  345048681027
|      345048681027 | 2014-11-19 06:08:16 | 2014-11-19 06:08:16 |
> +-------+----------------------------------------------------------+------------+---------------+-------------------+---------------------+---------------------+
> {noformat}
> As we can see both the Acquire IP address process and Create TAG process completes successfully.
> Delete Tag
> ***********
> {noformat}
> 2014-11-19 15:15:06,496 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl] (catalina-exec-18:ctx-f9096d31
ctx-c18e0cef ctx-a73fb445) submit async job-72484, details: AsyncJobVO {id:72484, userId:
17, accountId: 15, instanceType: None, instanceId: null, cmd: org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd,
cmdInfo: {"response":"json","cmdEventType":"DELETE_TAGS","ctxUserId":"17","tags[0].key":"cloud-description","httpmethod":"GET","resourcetype":"PublicIPAddress","ctxAccountId":"15","ctxStartEventId":"166921","signature":"7aUyelqNUGlgp+4PVdfCzJ0P7xY\u003d","resourceids":"3d7c3a2a-1f2d-46dc-9905-4a7ce620e7e9","apikey":"tuwHXs1AfpQheJeJ9BcLdoVxIBCItASnguAbus76AMUcIXuyFgHOJiIB44fO57p_bBaqyfppmxrC-rQSb-nxXg"},
cmdVersion: 0, status: IN_PROGRESS, processStatus: 0, resultCode: 0, result: null, initMsid:
345048681027, completeMsid: null, lastUpdated: null, lastPolled: null, created: null}
> 2014-11-19 15:15:06,496 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl] (API-Job-Executor-104:ctx-a96a8572
job-72484) Executing AsyncJobVO {id:72484, userId: 17, accountId: 15, instanceType: None,
instanceId: null, cmd: org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd, cmdInfo:
{"response":"json","cmdEventType":"DELETE_TAGS","ctxUserId":"17","tags[0].key":"cloud-description","httpmethod":"GET","resourcetype":"PublicIPAddress","ctxAccountId":"15","ctxStartEventId":"166921","signature":"7aUyelqNUGlgp+4PVdfCzJ0P7xY\u003d","resourceids":"3d7c3a2a-1f2d-46dc-9905-4a7ce620e7e9","apikey":"tuwHXs1AfpQheJeJ9BcLdoVxIBCItASnguAbus76AMUcIXuyFgHOJiIB44fO57p_bBaqyfppmxrC-rQSb-nxXg"},
cmdVersion: 0, status: IN_PROGRESS, processStatus: 0, resultCode: 0, result: null, initMsid:
345048681027, completeMsid: null, lastUpdated: null, lastPolled: null, created: null}
> 2014-11-19 15:15:06,502 DEBUG [c.c.u.AccountManagerImpl] (API-Job-Executor-104:ctx-a96a8572
job-72484 ctx-d9207bf9) Access to Acct[6b3b9128-2ef1-4866-8a60-33b284c749de-71000000726] granted
to Acct[f4d0c381-e0b7-4aed-aa90-3336d42f7540-71000000017] by DomainChecker
> 2014-11-19 15:15:06,506 DEBUG [c.c.u.AccountManagerImpl] (catalina-exec-8:ctx-74989794
ctx-5decfcea ctx-111e7f31) Access to Acct[f4d0c381-e0b7-4aed-aa90-3336d42f7540-71000000017]
granted to Acct[13ebed98-547c-4036-a4fd-f8c2e4e5dc5c-71000000017] by DomainChecker
> 2014-11-19 15:15:06,510 ERROR [c.c.a.ApiAsyncJobDispatcher] (API-Job-Executor-104:ctx-a96a8572
job-72484) Unexpected exception while executing org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd
> com.cloud.exception.PermissionDeniedException: Acct[f4d0c381-e0b7-4aed-aa90-3336d42f7540-71000000017]
does not have permission to operate within domain id=632
> 	at com.cloud.acl.DomainChecker.checkAccess(DomainChecker.java:77)
> 	at com.cloud.user.AccountManagerImpl.checkAccess(AccountManagerImpl.java:451)
> 	at sun.reflect.GeneratedMethodAccessor250.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:606)
> 	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
> 	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
> 	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> 	at com.sun.proxy.$Proxy83.checkAccess(Unknown Source)
> 	at com.cloud.tags.TaggedResourceManagerImpl.deleteTags(TaggedResourceManagerImpl.java:375)
> 	at sun.reflect.GeneratedMethodAccessor546.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:606)
> 	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
> 	at com.cloud.event.ActionEventInterceptor.invoke(ActionEventInterceptor.java:50)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)
> 	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
> 	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
> 	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
> 	at com.sun.proxy.$Proxy315.deleteTags(Unknown Source)
> 	at org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd.execute(DeleteTagsCmd.java:103)
> 	at com.cloud.api.ApiDispatcher.dispatch(ApiDispatcher.java:161)
> 	at com.cloud.api.ApiAsyncJobDispatcher.runJob(ApiAsyncJobDispatcher.java:97)
> 	at org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl$5.runInContext(AsyncJobManagerImpl.java:507)
> 	at org.apache.cloudstack.managed.context.ManagedContextRunnable$1.run(ManagedContextRunnable.java:50)
> 	at org.apache.cloudstack.managed.context.impl.DefaultManagedContext$1.call(DefaultManagedContext.java:56)
> 	at org.apache.cloudstack.managed.context.impl.DefaultManagedContext.callWithContext(DefaultManagedContext.java:103)
> 	at org.apache.cloudstack.managed.context.impl.DefaultManagedContext.runWithContext(DefaultManagedContext.java:53)
> 	at org.apache.cloudstack.managed.context.ManagedContextRunnable.run(ManagedContextRunnable.java:47)
> 	at org.apache.cloudstack.framework.jobs.impl.AsyncJobManagerImpl$5.run(AsyncJobManagerImpl.java:464)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> 	at java.lang.Thread.run(Thread.java:745)
> 2014-11-19 15:15:06,511 DEBUG [o.a.c.f.j.i.AsyncJobManagerImpl] (API-Job-Executor-104:ctx-a96a8572
job-72484) Complete async job-72484, jobStatus: FAILED, resultCode: 530, result: org.apache.cloudstack.api.response.ExceptionResponse/null/{"uuidList":[],"errorcode":530,"errortext":"Acct[f4d0c381-e0b7-4aed-aa90-3336d42f7540-71000000017]
does not have permission to operate within domain id\u003d632"}
> 2014-11-19 15:15:06,521 INFO  [o.a.c.f.j.i.AsyncJobMonitor] (API-Job-Executor-104:ctx-a96a8572
job-72484) Remove job-72484 from job monitoring
> +-------+----------------------------------------------------------+------------+---------------+-------------------+---------------------+---------------------+
> | id    | job_cmd                                                  | job_status | job_init_msid
| job_complete_msid | created             | last_updated        |
> +-------+----------------------------------------------------------+------------+---------------+-------------------+---------------------+---------------------+
> | 72484 | org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd |          2 |  345048681027
|      345048681027 | 2014-11-19 06:15:06 | 2014-11-19 06:15:06 |
> | 72489 | org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd |          2 |  345048681027
|      345048681027 | 2014-11-19 06:15:45 | 2014-11-19 06:15:45 |
> +-------+----------------------------------------------------------+------------+---------------+-------------------+---------------------+---------------------+
> 2 rows in set (0.00 sec)
> {noformat}
> Account ID 15 has below credentials 
> {noformat}
> +----+--------------+--------------------------------------+------+-----------+---------+
> | id | account_name | uuid                                 | type | domain_id | state
  |
> +----+--------------+--------------------------------------+------+-----------+---------+
> | 15 | 71000000017  | f4d0c381-e0b7-4aed-aa90-3336d42f7540 |    2 |        11 | enabled
|
> +----+--------------+--------------------------------------+------+-----------+---------+
> 1 row in set (0.00 sec)
> {noformat}
> Below is the DB record for domain id=632
> {noformat}
> +-----+-------------+--------------------------------------+--------+----------------+
> | id  | name        | uuid                                 | state  | network_domain
|
> +-----+-------------+--------------------------------------+--------+----------------+
> | 632 | 71000000726 | 0536af94-fce7-46d2-b98a-9e3fd0f304ae | Active | NULL          
|
> +-----+-------------+--------------------------------------+--------+----------------+
> {noformat}
> Even though the logs say that access to domain id=632 has been granted to account id=15
below;
> {noformat}
> 2014-11-19 15:15:06,502 DEBUG [c.c.u.AccountManagerImpl] (API-Job-Executor-104:ctx-a96a8572
job-72484 ctx-d9207bf9) Access to Acct[6b3b9128-2ef1-4866-8a60-33b284c749de-71000000726] granted
to Acct[f4d0c381-e0b7-4aed-aa90-3336d42f7540-71000000017] by DomainChecker
> {noformat}
> The operation fails with no permission.
> {noformat}
> com.cloud.exception.PermissionDeniedException: Acct[f4d0c381-e0b7-4aed-aa90-3336d42f7540-71000000017]
does not have permission to operate within domain id=632
> {noformat}
> EXPECTED BEHAVIOR
> ==================
> User should be able to delete the tags
> ACTUAL BEHAVIOR
> ==================
> User is unable to delete tags



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message