6.0.0-beta1
7/6/25

[#13874] ActiveSync Returns Incorecct Status to Device during MoveItems
Summary ActiveSync Returns Incorecct Status to Device during MoveItems
Queue Horde Framework Packages
Type Bug
State Not A Bug
Priority 1. Low
Owners mrubinsk (at) horde (dot) org
Requester sascha (at) valckenier-kips (dot) de
Created 02/20/2015 (3789 days ago)
Due
Updated 02/23/2015 (3786 days ago)
Assigned 02/20/2015 (3789 days ago)
Resolved 02/23/2015 (3786 days ago)
Github Issue Link
Github Pull Request
Milestone
Patch No

History
02/23/2015 04:38:43 PM Michael Rubinsky Comment #6
Assigned to Michael Rubinsky
State ⇒ Not A Bug
Reply to this comment
This is not related to Horde_ActiveSync at all then.  At the worst, 
there may be something to workaround in Horde_Imap_Client. Closing 
this bug. If/when you get a IMAP log of this broken behavior please 
create a new ticket under Framework packages for Horde_Imap_Client.
02/22/2015 01:22:32 AM sascha (at) valckenier-kips (dot) de Comment #5 Reply to this comment
i have setup a testsystem with
horde 5.2.5
mysql server 5.5 with utf8
dbmail 3.1.8 and 3.2.3
cyrus 2.4
apache 2 + php5
--
I have copy my database from productionsystem to my testsystem.
And i have configured with same parameters of my production but only 
local ips from my network.

First check with dbmail 3.1.8. My Mail are same as in production.
Horde webmail work same as in production.
Setup the iOS Device and try to move a Message. The same error as in 
production. Delete Mail the same.
Then i switch to dbmail 3.2.3 and the same as bevor.
Now i have setup and configure a cyrus Mailserver and copy every 
Message with imapsync to the cyrus.
The same try as bevor, and now it works without failures.

And additional bug is also fixed. i have system e-mails from logcheck, 
with dbmail i can only see in horde/imp and on the Device a Attachment 
"7BIT". With cyrus, the inline text will in horde/imp displayed and on 
iOS the same. DBMAIl is a attachmend and cyrus show me the e-mail 
corrcect.

I must check what returns now the function with dbmail returns 
nothing. With cyrus i must show in the log.

The function will not return the ids and force_map is setup.

i have opend a ticket for the dbmail server with the 2 problems.

I think the dbmail imap server returns in other format as cyrus and so 
were not detect the new msgid or the imap commandprotocoll is not 
correct from dbmail server.

Greetings Sascha
02/20/2015 03:45:38 PM Michael Rubinsky Comment #4 Reply to this comment
  I think the UIDPLUS Feature is needed for ActiveSync for this.
This is not true. The imap client library will ALWAYS return the new 
UID if the force_map paramter is true in the copy() method (which it 
is in Horde_ActiveSync_Imap_Adapter::moveMessage()).

\
02/20/2015 03:38:57 PM sascha (at) valckenier-kips (dot) de Comment #3 Reply to this comment
Thanks for your very fast answer.
Yes i am current in analyse and try to find at which procedure the 
newid will not returned.
In my mind, i think the IMAP-Backend Server is the problem.
I use DBMail 3.1.8 current. I think the UIDPLUS Feature is needed for 
ActiveSync for this. The Horde IMP comes out without this. This 
feature is after my researches implemented, possible disabled or not 
in the List of the Features of the Server and the Client does not use 
then this.

My ActiveSync Client is a iOS Device and in the ActiveSync-Debug the 
Response XML returns no MSGID and the Status 1 (Invalid Srouce).
The Server Moves the Message correctly but my Deivce means it's not 
moved, but the message is removed from the current folder on device 
and is to finde in the new folder. The Working is absolut correct but 
the Status will not right returned. If i have new information after my 
analyses, i will report this.

[Show Quoted Text - 26 lines]
02/20/2015 03:08:44 PM Michael Rubinsky Comment #2
Priority ⇒ 1. Low
State ⇒ Feedback
Reply to this comment
Cannot reproduce.

The logic in the code you pasted is correct. If a new UID is not 
returned for a moved message, something went wrong with moving the 
message (or an issue with the driver code, but, as I said, I can't 
reproduce this). WIthout a UID we can't report success back to the 
device, since it needs to know the new UID.

You need to find out why the old_uid -> new_uid mapping is not being 
returned in your case. The call stack looks something like this:

Horde_ActiveSync_Request_MoveItems calls 
Horde_ActiveSync_Connector_Importer::importMessageMove(), which calls 
Horde_Core_ActiveSync_Driver::moveMessage(), which calls 
Horde_ActiveSync_Imap_Adapter::moveMessage()

  I would start by looking in 
Horde_ActiveSync_Imap_Adapter::moveMessage() and see what the imap 
client is returning from the copy command. ($imap->copy).

If that is correct, next you should check the importer's 
importMessageMove method to be sure the data is handled correctly there.

What client is this? A sync log might also be helpful to weed out any 
obvious errors.
02/20/2015 02:47:04 PM sascha (at) valckenier-kips (dot) de Comment #1
Priority ⇒ 2. Medium
Type ⇒ Bug
Summary ⇒ ActiveSync Returns Incorecct Status to Device during MoveItems
Queue ⇒ Horde Framework Packages
Milestone ⇒
Patch ⇒ No
State ⇒ Unconfirmed
Reply to this comment
ActiveSync returns incorrect Status Back to device.
In Function MoveItems (Moving a E-Mail from Inbox to a Folder), i 
become Status value 1 back. my Mobile Device give me a error back, 
that mail could't moved. But the Mail was on my DBMail 2.3.8 Server 
Moved correctly.

I have enabled Debug and added Debugging Line in MoveItems.php.
On Move the PHP Script becomes no new Message ID from IMAPD and after 
them the Script give back the Status "1".

I'am not sure, if the IMAP-Server or Horde/ActiveSync has the problem. 
This will i testing later.

Here the Code from MoveItems, that give me the bad Status back:

  if (empty($move_res['results'][$move[self::SRCMSGKEY]])) {
                         // Hm. Specs say to send INVALID_SRC if the msg is
                         // already moved, or no longer present, but that seems
                         // to lead to the client keeping the item and 
continuously
                         // retrying. We can't fake the move since we need a
                         // new uid.....
                         $status = in_array($move[self::SRCMSGKEY], 
$move_res['missing'])
                             ? self::STATUS_INVALID_SRC
                             : self::STATUS_SERVER_ERR;
                     } else {
                         $new_msgid = 
$move_res['results'][$move[self::SRCMSGKEY]];
                     }

The Statmante Return invalid Source. Is a way to correct this. My 
Mobiledevice make me crazy. Every moving returns me a Errormessage.

Thanks Sascha

Saved Queries