Skip to content

No access to contacts via DAV #1730

@scroom

Description

@scroom

Steps to reproduce

  1. Configure an Android DAV Sync client (tried DAVdroid and CalDAVSync) to sync the contacts saved in the Nextcloud instance
  2. Start sync process

Expected behaviour

Contacts should be synced to the Android Phone

Actual behaviour

Sync fails

Server configuration

Operating system: Ubuntu 14.04

Web server: Apache2

Database: MySQL

PHP version:

  • PHP 7.0.11-2+deb.sury.orgtrusty+2 (cli) ( NTS )
    Copyright (c) 1997-2016 The PHP Group
    Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.11-2+deb.sury.org
    trusty+2, Copyright (c) 1999-2016, by Zend Technologies
  • the Serverinfo page still stats 5.6.23

Nextcloud version: 10.0.1 (stable)

Updated from an older Nextcloud/ownCloud or fresh install: Updated from ownCloud 9.1 (moved data folder outside the Webroot), possible that this behaviour occurred before as well

Where did you install Nextcloud from: tar.gz

Signing status:

Signing status

No errors have been found.

List of activated apps:

App list

Enabled:
  - activity: 2.3.2
  - admin_audit: 1.0.0
  - apporder: 0.3.2
  - calendar: 1.4.0
  - comments: 1.0.0
  - contacts: 1.4.0.0
  - dav: 1.0.0
  - direct_menu: true
  - documents: 0.13.1
  - external: 1.2
  - federatedfilesharing: 1.0.1
  - federation: 1.0.1
  - files: 1.5.2
  - files_pdfviewer: 0.8.1
  - files_retention: 1.0.0
  - files_sharing: 1.0.0
  - files_texteditor: 2.1
  - files_trashbin: 1.0.0
  - files_versions: 1.3.0
  - files_videoplayer: 0.9.8
  - firstrunwizard: 1.1
  - gallery: 15.0.0
  - mail: 0.6.0
  - music: 0.3.12
  - news: 9.0.4
  - notifications: 0.3.0
  - ownnote: 1.08
  - password_policy: 1.0.0
  - provisioning_api: 1.0.0
  - qownnotesapi: 16.09.0
  - serverinfo: 1.1.1
  - survey_client: 0.1.5
  - systemtags: 1.0.2
  - tasks: 0.9.3
  - templateeditor: 0.1
  - theming: 1.0.1
  - updatenotification: 1.0.1
  - user_ldap: 1.0.1
  - workflowengine: 1.0.1
Disabled:
  - encryption
  - files_accesscontrol
  - files_automatedtagging
  - files_external
  - user_external
  - user_saml

The content of config/config.php:

Config report

{
    "system": {
        "instanceid": "oca4dff1e574",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "scroom.de"
        ],
        "datadirectory": "\/var\/local\/nextcloud\/data",
        "dbtype": "mysql",
        "version": "9.1.1.5",
        "dbname": "cloud",
        "dbhost": "localhost",
        "dbtableprefix": "oc_",
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "ldapIgnoreNamingRules": false,
        "forcessl": true,
        "mail_from_address": "cloud",
        "mail_smtpmode": "php",
        "mail_domain": "scroom.de",
        "preview_libreoffice_path": "\/usr\/bin\/libreoffice",
        "logtimezone": "Europe\/Berlin",
        "logfile": "\/var\/www\/cloud\/data\/cloud.log",
        "loglevel": "0",
        "log_authfailip": true,
        "theme": "scroom",
        "maintenance": false,
        "secret": "***REMOVED SENSITIVE VALUE***",
        "forceSSLforSubdomains": true,
        "overwrite.cli.url": "\/cloud",
        "trashbin_retention_obligation": "auto,30",
        "updatechecker": false,
        "htaccess.RewriteBase": "\/cloud",
        "appstore.experimental.enabled": true,
        "memcache.distributed": "\\OC\\Memcache\\Redis",
        "memcache.local": "\\OC\\Memcache\\Redis",
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "redis": {
            "host": "localhost",
            "port": 6379
        },
        "ldapProviderFactory": "\\OCA\\User_LDAP\\LDAPProviderFactory"
    }
}

Are you using external storage, if yes which one: no

Are you using encryption: no

Are you using an external user-backend, if yes which one: LDAP

LDAP configuration (delete this part if not used)

LDAP config

+-------------------------------+--------------------------------------------------------------------------------------+
| Configuration                 | s01                                                                                  |
+-------------------------------+--------------------------------------------------------------------------------------+
| hasMemberOfFilterSupport      | 0                                                                                    |
| hasPagedResultSupport         |                                                                                      |
| homeFolderNamingRule          |                                                                                      |
| lastJpegPhotoLookup           | 0                                                                                    |
| ldapAgentName                 | cn=Manager,dc=example,dc=com                                                         |
| ldapAgentPassword             | ***                                                                                  |
| ldapAttributesForGroupSearch  |                                                                                      |
| ldapAttributesForUserSearch   |                                                                                      |
| ldapBackupHost                |                                                                                      |
| ldapBackupPort                |                                                                                      |
| ldapBase                      | o=domains,dc=example,dc=com                                                          |
| ldapBaseGroups                | o=domains,dc=example,dc=com                                                          |
| ldapBaseUsers                 | o=domains,dc=example,dc=com                                                          |
| ldapCacheTTL                  | 400                                                                                  |
| ldapConfigurationActive       | 1                                                                                    |
| ldapDynamicGroupMemberURL     |                                                                                      |
| ldapEmailAttribute            | mail                                                                                 |
| ldapExperiencedAdmin          | 0                                                                                    |
| ldapExpertUUIDGroupAttr       |                                                                                      |
| ldapExpertUUIDUserAttr        | mail                                                                                 |
| ldapExpertUsernameAttr        |                                                                                      |
| ldapGroupDisplayName          | cn                                                                                   |
| ldapGroupFilter               |                                                                                      |
| ldapGroupFilterGroups         |                                                                                      |
| ldapGroupFilterMode           | 0                                                                                    |
| ldapGroupFilterObjectclass    |                                                                                      |
| ldapGroupMemberAssocAttr      | uniqueMember                                                                         |
| ldapHost                      | example.com                                                                          |
| ldapIgnoreNamingRules         |                                                                                      |
| ldapLoginFilter               | (&(|(objectclass=mailUser))(|(|(mailPrimaryAddress=%uid)(mail=%uid))(|(mail=%uid)))) |
| ldapLoginFilterAttributes     | mail                                                                                 |
| ldapLoginFilterEmail          | 1                                                                                    |
| ldapLoginFilterMode           | 0                                                                                    |
| ldapLoginFilterUsername       | 0                                                                                    |
| ldapNestedGroups              | 0                                                                                    |
| ldapOverrideMainServer        | 0                                                                                    |
| ldapPagingSize                | 500                                                                                  |
| ldapPort                      | 389                                                                                  |
| ldapQuotaAttribute            |                                                                                      |
| ldapQuotaDefault              |                                                                                      |
| ldapTLS                       | 0                                                                                    |
| ldapUserDisplayName           | cn                                                                                   |
| ldapUserDisplayName2          |                                                                                      |
| ldapUserFilter                | (|(objectclass=mailUser))                                                            |
| ldapUserFilterGroups          |                                                                                      |
| ldapUserFilterMode            | 1                                                                                    |
| ldapUserFilterObjectclass     | mailUser                                                                             |
| ldapUuidGroupAttribute        | auto                                                                                 |
| ldapUuidUserAttribute         | auto                                                                                 |
| turnOffCertCheck              | 0                                                                                    |
| useMemberOfToDetectMembership | 1                                                                                    |
+-------------------------------+--------------------------------------------------------------------------------------+

### Client configuration

DAVdroid: 1.3.1-ose

Operating system: Cyanogen OS 13.1.2

Logs

Web server error log

Web server error log

Insert your webserver log here
#### Nextcloud log (data/nextcloud.log)

Nextcloud log

{"reqId":"Jih0UOncAP8LUkvfGcWx","remoteAddr":"*.*.*.*","app":"admin_audit","message":"Login attempt: \"user@example.com\"","level":1,"time":"2016-10-13T09:18:09+02:00","method":"PROPFIND","url":"\/cloud\/remote.php\/dav\/addressbooks\/users\/user@example.com\/neu\/","user":"--"}
{"reqId":"Jih0UOncAP8LUkvfGcWx","remoteAddr":"*.*.*.*","app":"admin_audit","message":"Login successful: \"user@example.com\"","level":1,"time":"2016-10-13T09:18:09+02:00","method":"PROPFIND","url":"\/cloud\/remote.php\/dav\/addressbooks\/users\/user@example.com\/neu\/","user":"user@example.com"}
{"reqId":"lopSJeGIeJF3fQo37W3O","remoteAddr":"*.*.*.*","app":"admin_audit","message":"Login attempt: \"user@example.com\"","level":1,"time":"2016-10-13T09:18:10+02:00","method":"PROPFIND","url":"\/cloud\/remote.php\/dav\/addressbooks\/users\/user@example.com\/neu\/","user":"--"}
{"reqId":"lopSJeGIeJF3fQo37W3O","remoteAddr":"*.*.*.*","app":"admin_audit","message":"Login successful: \"user@example.com\"","level":1,"time":"2016-10-13T09:18:10+02:00","method":"PROPFIND","url":"\/cloud\/remote.php\/dav\/addressbooks\/users\/user@example.com\/neu\/","user":"user@example.com"}
{"reqId":"e4dyx1FwfeSJyROl1hxY","remoteAddr":"*.*.*.*","app":"webdav","message":"Exception: {\"Message\":\"HTTP\\\/1.1 404 Card not found\",\"Exception\":\"Sabre\\\\DAV\\\\Exception\\\\NotFound\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(76): OCA\\\\DAV\\\\CardDAV\\\\AddressBook->getChild('https:')\\n#1 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(71): Sabre\\\\DAV\\\\Tree->getNodeForPath('addressbooks\\\/us...')\\n#2 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(71): Sabre\\\\DAV\\\\Tree->getNodeForPath('addressbooks\\\/us...')\\n#3 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(71): Sabre\\\\DAV\\\\Tree->getNodeForPath('addressbooks\\\/us...')\\n#4 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(71): Sabre\\\\DAV\\\\Tree->getNodeForPath('addressbooks\\\/us...')\\n#5 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(71): Sabre\\\\DAV\\\\Tree->getNodeForPath('addressbooks\\\/us...')\\n#6 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(71): Sabre\\\\DAV\\\\Tree->getNodeForPath('addressbooks\\\/us...')\\n#7 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(71): Sabre\\\\DAV\\\\Tree->getNodeForPath('addressbooks\\\/us...')\\n#8 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(270): Sabre\\\\DAV\\\\Tree->getNodeForPath('addressbooks\\\/us...')\\n#9 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(960): Sabre\\\\DAV\\\\Tree->getMultipleNodes(Array)\\n#10 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/CardDAV\\\/Plugin.php(252): Sabre\\\\DAV\\\\Server->getPropertiesForMultiplePaths(Array, Array)\\n#11 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/CardDAV\\\/Plugin.php(198): Sabre\\\\CardDAV\\\\Plugin->addressbookMultiGetReport(Object(Sabre\\\\CardDAV\\\\Xml\\\\Request\\\\AddressBookMultiGetReport))\\n#12 [internal function]: Sabre\\\\CardDAV\\\\Plugin->report('{urn:ietf:param...', Object(Sabre\\\\CardDAV\\\\Xml\\\\Request\\\\AddressBookMultiGetReport), 'addressbooks\\\/us...')\\n#13 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/event\\\/lib\\\/EventEmitterTrait.php(105): call_user_func_array(Array, Array)\\n#14 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/CorePlugin.php(716): Sabre\\\\Event\\\\EventEmitter->emit('report', Array)\\n#15 [internal function]: Sabre\\\\DAV\\\\CorePlugin->httpReport(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#16 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/event\\\/lib\\\/EventEmitterTrait.php(105): call_user_func_array(Array, Array)\\n#17 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(459): Sabre\\\\Event\\\\EventEmitter->emit('method:REPORT', Array)\\n#18 \\\/var\\\/www\\\/cloud\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(248): Sabre\\\\DAV\\\\Server->invokeMethod(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#19 \\\/var\\\/www\\\/cloud\\\/apps\\\/dav\\\/lib\\\/Server.php(184): Sabre\\\\DAV\\\\Server->exec()\\n#20 \\\/var\\\/www\\\/cloud\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(30): OCA\\\\DAV\\\\Server->exec()\\n#21 \\\/var\\\/www\\\/cloud\\\/remote.php(165): require_once('\\\/var\\\/www\\\/cloud\\\/...')\\n#22 {main}\",\"File\":\"\\\/var\\\/www\\\/cloud\\\/apps\\\/dav\\\/lib\\\/CardDAV\\\/AddressBook.php\",\"Line\":121,\"User\":\"user@example.com\"}","level":0,"time":"2016-10-13T09:18:10+02:00","method":"REPORT","url":"\/cloud\/remote.php\/dav\/addressbooks\/users\/user@example.com\/neu\/","user":"user@example.com"}
#### DAVdroid log

DAVdroid log

SYNCHRONIZATION INFO
Synchronization phase: 9
Account name: user@example.com-dav
Authority: com.android.contacts

HTTP REQUEST:
REPORT /cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/
Depth: 0

<?xml version='1.0' encoding='UTF-8' ?><CARD:addressbook-multiget xmlns="DAV:" xmlns:CARD="urn:ietf:params:xml:ns:carddav"><prop><getcontenttype /><getetag /><CARD:address-data content-type="text/vcard" version="4.0" /></prop><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/https://user%2540example.com@example.com/owncloud/remote.php/carddav/addressbooks/user%2540example.com/kontakte/57116a3e-a648-489c-830f-ee740c650671.vcf.vcf</href><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/https://user%2540example.com@example.com/owncloud/remote.php/carddav/addressbooks/user@example.com/kontakte/876cea7f-43aa-45eb-ad72-f29cd7be9896.vcf.vcf</href><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/https://user%2540example.com@example.com/owncloud/remote.php/carddav/addressbooks/user%2540example.com/kontakte/20140301T060339.2d59e4b4b7%252540teachersai.de.vcf.vcf</href><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/e9bbd441-6b47-42cb-a698-e8fabda64585.vcf</href><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/https://user%2540example.com@example.com/owncloud/remote.php/carddav/addressbooks/user%2540example.com/kontakte/20140301T060335.17b6562826%252540teachersai.de.vcf.vcf</href><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/https://user%2540example.com@example.com/owncloud/remote.php/carddav/addressbooks/user%2540example.com/kontakte/20140301T060335.93fab16fc7%252540teachersai.de.vcf.vcf</href><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/https://user%2540example.com@example.com/owncloud/remote.php/carddav/addressbooks/user@example.com/kontakte/20140301T060337.a23dd0df2a%252540teachersai.de.vcf.vcf</href><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/https://user%2540example.com@example.com/owncloud/remote.php/carddav/addressbooks/user%2540example.com/kontakte/20140301T060334.3be3f4a844%252540teachersai.de.vcf.vcf</href><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/d3fd19dd-a60f-44e5-8df4-f78f1292cae1.vcf</href><href>/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/https://user%2540example.com@example.com/owncloud/remote.php/carddav/addressbooks/user%2540example.com/kontakte/20140301T060334.46031afa93%252540teachersai.de.vcf.vcf</href></CARD:addressbook-multiget>

HTTP RESPONSE:
http/1.1 404 Not Found
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Content-Length: 206
Content-Security-Policy: default-src 'none';
Content-Type: application/xml; charset=utf-8
Date: Thu, 13 Oct 2016 06:35:58 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive: timeout=5, max=98
Pragma: no-cache
Server: Apache
Strict-Transport-Security: max-age=15768000; preload
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Frame-Options: Sameorigin
X-Permitted-Cross-Domain-Policies: none
X-Robots-Tag: none
X-XSS-Protection: 1; mode=block

<?xml version="1.0" encoding="utf-8"?>[LF]
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">[LF]
  <s:exception>Sabre\DAV\Exception\NotFound</s:exception>[LF]
  <s:message>Card not found</s:message>[LF]
</d:error>[LF]


EXCEPTION:
at.bitfire.dav4android.exception.NotFoundException: 404 Not Found
at at.bitfire.dav4android.DavResource.checkStatus(DavResource.java:308)
at at.bitfire.dav4android.DavResource.checkStatus(DavResource.java:289)
at at.bitfire.dav4android.DavAddressBook.multiget(DavAddressBook.java:109)
at at.bitfire.davdroid.syncadapter.ContactsSyncManager.downloadRemote(ContactsSyncManager.java:326)
at at.bitfire.davdroid.syncadapter.SyncManager.performSync(SyncManager.java:170)
at at.bitfire.davdroid.syncadapter.ContactsSyncAdapterService$ContactsSyncAdapter.onPerformSync(ContactsSyncAdapterService.java:66)
at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:272)

SOFTWARE INFORMATION
DAVdroid version: 1.3.1-ose (116) Wed Sep 21 08:17:52 GMT+02:00 2016
Installed from: org.fdroid.fdroid
JB Workaround installed: no

CONFIGURATION
System-wide synchronization: automatically
Account: user@example.com-dav
  Address book sync. interval: 240 min
  Calendar     sync. interval: 240 min
  OpenTasks    sync. interval: 240 min
  WiFi only: false
  [CardDAV] Contact group method: CATEGORIES
            RFC 6868 encoding: true
  [CalDAV] Time range (past days): 90
           Manage calendar colors: true

SQLITE DUMP
android_metadata
|  locale |
|  de_DE |
----------
settings
|  setting | value |
----------
services
|  _id | accountName | service | principal |
|  1 | user@example.com-dav | carddav | https://example.com/cloud/remote.php/dav/principals/users/user@example.com/ |
|  2 | user@example.com-dav | caldav | https://example.com/cloud/remote.php/dav/principals/users/user@example.com/ |
----------
sqlite_sequence
|  name | seq |
|  services | 2 |
|  collections | 7 |
|  homesets | 2 |
----------
homesets
|  _id | serviceID | url |
|  1 | 1 | https://example.com/cloud/remote.php/dav/addressbooks/users/user@example.com/ |
|  2 | 2 | https://example.com/cloud/remote.php/dav/calendars/user@example.com/ |
----------
collections
|  _id | serviceID | url | readOnly | displayName | description | color | timezone | supportsVEVENT | supportsVTODO | sync |
|  2 | 1 | https://example.com/cloud/remote.php/dav/addressbooks/users/user@example.com/neu/ | 0 | Neu | <null> | <null> | <null> | <null> | <null> | 0 |
|  3 | 1 | https://example.com/cloud/remote.php/dav/addressbooks/users/user@example.com/kontakte/ | 0 | Kontakte | <null> | <null> | <null> | <null> | <null> | 1 |
|  4 | 2 | https://example.com/cloud/remote.php/dav/calendars/user@example.com/schule/ | 0 | Schule | Schule | -65536 | <null> | 1 | 1 | 0 |
|  5 | 2 | https://example.com/cloud/remote.php/dav/calendars/user@example.com/contact_birthdays/ | 1 | Contact birthdays | <null> | -54 | <null> | 1 | 1 | 0 |
|  6 | 2 | https://example.com/cloud/remote.php/dav/calendars/user@example.com/family/ | 0 | Family | Family | -256 | <null> | 1 | 1 | 0 |
|  7 | 2 | https://example.com/cloud/remote.php/dav/calendars/user@example.com/pers%c3%b6nlich/ | 0 | Persönlich | Persönlich | <null> | <null> | 1 | 1 | 0 |
----------

SYSTEM INFORMATION
Android version: 6.0.1 (MHC19Q)
Device: OnePlus A0001 (A0001)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions