Zimbra offers Open Source email server software and shared calendar for Linux and the Mac
Go Back   Zimbra :: Forums > Zimbra Collaboration Suite > Developers

Welcome to the Zimbra :: Forums!
Welcome, if you would like to post a comment please register. We also encourage you to explore all things Zimbra with our team and members of the community.

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1 (permalink)  
Old 04-18-2011, 08:03 AM
Intermediate Member
 
Posts: 17
Default GetAppointmentRequest SOAP error service.PERM_DENIED after appointment deleted

Dear Zimbra,

Zimra full version info: Release 6.0.8_GA_2661.RHEL5_64_20100824100342 CentOS5_64 NETWORK edition.

We have client application that adds appointments to Zimbra calendar, and tries to keep in sync. This is done with "helper" user account, not Zimbra admin.

This works fine, except when user deletes appointment on their calendar. When that happens, the client application does not know it was deleted, and gets "service.PERM_DENIED" when trying to find the appointment by its ID.

We cannot assume permission denied means appointment does not exist, as permission denied can happen for other reasons. Please let me know of solution, or workaround, for this, or if this is not issue in Zimra 7.


Thank you,
Ray

Login Request with helper user account, not Zimbra administration:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
		xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
		xmlns:zimbra="urn:zimbra"
		xmlns:zaccount="urn:zimbraAccount"
		xmlns:zmail="urn:zimbraMail"
		xmlns:zadmin="urn:zimbraAdmin">
	<soap:Header>
		<context xmlns="urn:zimbraSoap">
			<nonotify/>
			<noqualify/>
		</context>

	</soap:Header>
	<soap:Body>
		<zaccount:AuthRequest>
			<account by="name">advisor-admin</account>
			<password>...</password>
		</zaccount:AuthRequest>

	</soap:Body>
</soap:Envelope>
Login Response:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header>
        <context xmlns="urn:zimbra">
            <change token="6849"/>
        </context>
    </soap:Header>
    <soap:Body>
        <AuthResponse xmlns="urn:zimbraAccount">
            <authToken>0_52cb...</authToken>
            <lifetime>119999</lifetime>
            <skin>beach</skin>
        </AuthResponse>
    </soap:Body>
</soap:Envelope>
Create Appointment Request:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
		xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
		xmlns:zimbra="urn:zimbra"
		xmlns:zaccount="urn:zimbraAccount"
		xmlns:zmail="urn:zimbraMail"
		xmlns:zadmin="urn:zimbraAdmin">
	<soap:Header>
		<zimbra:context xmlns="urn:zimbraSoap">
			<zaccount:authToken>0_52cb...</zaccount:authToken>
			<nonotify/>
			<noqualify/>
		</zimbra:context>

	</soap:Header>
	<soap:Body>
		<zmail:CreateAppointmentRequest>
			<m l="262">
				<su>SOAP Appointment</su>
				<inv>
					<comp
							name="Test A 04-05 15 min"
							status="CONF"
							fb="B"
							fba="B"
							url="https://www.egr.msu.edu/test/adcalendar/">
						<s d="20110405T140000Z"/>
						<e d="20110405T141500Z"/>
						<desc>Notes that show when appointment is opened.</desc>
					</comp>
				</inv>
			</m>
		</zmail:CreateAppointmentRequest>

	</soap:Body>
</soap:Envelope>
Create Appointment Response:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header>
        <context xmlns="urn:zimbra">
            <change token="6849"/>
        </context>
    </soap:Header>
    <soap:Body>
        <CreateAppointmentResponse xmlns="urn:zimbraMail" apptId="468" calItemId="468" invId="468-467"/>
    </soap:Body>
</soap:Envelope>
Get Appointment While Alive Request:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
		xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
		xmlns:zimbra="urn:zimbra"
		xmlns:zaccount="urn:zimbraAccount"
		xmlns:zmail="urn:zimbraMail"
		xmlns:zadmin="urn:zimbraAdmin">
	<soap:Header>
		<zimbra:context xmlns="urn:zimbraSoap">
			<zaccount:authToken>0_52cb...</zaccount:authToken>
			<nonotify/>
			<noqualify/>
		</zimbra:context>

	</soap:Header>
	<soap:Body>
		<zmail:GetAppointmentRequest id="e583b35d-c01d-49cd-85eb-d98380d7ca48:468-467"/>

	</soap:Body>
</soap:Envelope>
Get Appointment While Alive Response:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header>
        <context xmlns="urn:zimbra">
            <change token="6849"/>
        </context>
    </soap:Header>
    <soap:Body>
        <GetAppointmentResponse xmlns="urn:zimbraMail">
            <appt d="1303137671000" id="468" l="10" rev="8159" s="0" uid="a7e9c6b1-c6bd-4bdf-ae08-ea4bd1983302">
                <inv compNum="0" id="467" seq="0" type="appt">
                    <comp apptId="468" calItemId="468" class="PUB" compNum="0" d="1303137671000" fb="B" fba="B" isOrg="1" loc="" method="PUBLISH" name="Test A 04-05 15 min" noBlob="1" rsvp="0" seq="0" status="CONF" transp="O" uid="a7e9c6b1-c6bd-4bdf-ae08-ea4bd1983302" url="https://www.egr.msu.edu/test/adcalendar/" x_uid="a7e9c6b1-c6bd-4bdf-ae08-ea4bd1983302">
                        <desc>Notes that show when appointment is opened.</desc>
                        <s d="20110405T140000Z"/>
                        <e d="20110405T141500Z"/>
                    </comp>
                </inv>
                <replies/>
            </appt>
        </GetAppointmentResponse>
    </soap:Body>
</soap:Envelope>
Get Appointment after deleted Request (this is same as prior request):
Code:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
		xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
		xmlns:zimbra="urn:zimbra"
		xmlns:zaccount="urn:zimbraAccount"
		xmlns:zmail="urn:zimbraMail"
		xmlns:zadmin="urn:zimbraAdmin">
	<soap:Header>
		<zimbra:context xmlns="urn:zimbraSoap">
			<zaccount:authToken>0_52cb...</zaccount:authToken>
			<nonotify/>
			<noqualify/>
		</zimbra:context>

	</soap:Header>
	<soap:Body>
		<zmail:GetAppointmentRequest id="e583b35d-c01d-49cd-85eb-d98380d7ca48:468-467"/>

	</soap:Body>
</soap:Envelope>
Get Appointment after deleted Response:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header>
        <context xmlns="urn:zimbra">
            <change token="6849"/>
        </context>
    </soap:Header>
    <soap:Body>
        <soap:Fault>
            <soap:Code>
                <soap:Value>soap:Sender</soap:Value>
            </soap:Code>
            <soap:Reason>
                <soap:Text>permission denied: you do not have sufficient permissions</soap:Text>
            </soap:Reason>
            <soap:Detail>
                <Error xmlns="urn:zimbra">
                    <Code>service.PERM_DENIED</Code>
                    <Trace>com.zimbra.common.service.ServiceException: permission denied: you do not have sufficient permissions
ExceptionId:btpool0-12://carmen.egr.msu.edu/service/soap:1303137671960:86b812c87f8f0cc9
Code:service.PERM_DENIED
	at com.zimbra.common.service.ServiceException.PERM_DENIED(ServiceException.java:278)
	at com.zimbra.cs.mailbox.Mailbox.checkAccess(Mailbox.java:1911)
	at com.zimbra.cs.mailbox.Mailbox.getItemById(Mailbox.java:1923)
	at com.zimbra.cs.mailbox.Mailbox.getCalendarItemById(Mailbox.java:3139)
	at com.zimbra.cs.service.mail.GetCalendarItem.handle(GetCalendarItem.java:64)
	at com.zimbra.soap.SoapEngine.dispatchRequest(SoapEngine.java:420)
	at com.zimbra.soap.DocumentHandler.proxyRequest(DocumentHandler.java:491)
	at com.zimbra.cs.service.mail.MailDocumentHandler.proxyRequest(MailDocumentHandler.java:142)
	at com.zimbra.cs.service.mail.MailDocumentHandler.proxyRequest(MailDocumentHandler.java:124)
	at com.zimbra.cs.service.mail.MailDocumentHandler.proxyIfNecessary(MailDocumentHandler.java:79)
	at com.zimbra.soap.SoapEngine.dispatchRequest(SoapEngine.java:411)
	at com.zimbra.soap.SoapEngine.dispatch(SoapEngine.java:274)
	at com.zimbra.soap.SoapEngine.dispatch(SoapEngine.java:158)
	at com.zimbra.soap.SoapServlet.doWork(SoapServlet.java:291)
	at com.zimbra.soap.SoapServlet.doPost(SoapServlet.java:212)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at com.zimbra.cs.servlet.ZimbraServlet.service(ZimbraServlet.java:181)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
	at com.zimbra.cs.servlet.SetHeaderFilter.doFilter(SetHeaderFilter.java:79)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.servlet.UserAgentFilter.doFilter(UserAgentFilter.java:81)
	at org.mortbay.servlet.GzipFilter.doFilter(GzipFilter.java:155)
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.handler.rewrite.RewriteHandler.handle(RewriteHandler.java:230)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.handler.DebugHandler.handle(DebugHandler.java:77)
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
	at org.mortbay.jetty.Server.handle(Server.java:326)
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:543)
	at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:939)
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:413)
	at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451)
</Trace>
                </Error>
            </soap:Detail>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>
Reply With Quote
  #2 (permalink)  
Old 04-19-2011, 01:27 PM
Intermediate Member
 
Posts: 17
Thumbs down

I checked doing this with admin user, and still get "service.PERM_DENIED" trying to view deleted appointment.

Is there any correct way to request appointment, to see if it was deleted?
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes


Similar Threads

Why Join?

Registering let's you ask questions, makes it easier to search, displays any files attached to posts, and notifies you about replies.

blog.zimbra.com




 

SEO by vBSEO ©2011, Crawlability, Inc.