Skip to content

Exception with users identified by numeric id #6580

@gaetandossantos

Description

@gaetandossantos

Steps to reproduce

  1. Use last version of Nextcloud with user_ldap and activity, have an LDAP with pure numeric uids
  2. Configure user_ldap/expert/internal_username attribute to LDAP uid (oc_appconfig.ldap_expert_username_attr=uid)
  3. Sync some users to obtain entries like these ones in oc_ldap_user_mapping :
    ldap_dn, owncloud_name, directory_uuid
    'uid=10147,ou=accounts,dc=example,dc=fr', '10147', '5edd7898-91f9-1036-89b3-23cc2d737e18'
    'uid=10220,ou=accounts,dc=example,dc=fr', '10220', '5f232640-91f9-1036-89d9-23cc2d737e18'
    'uid=10676,ou=accounts,dc=example,dc=fr', '10676', '5ef5793e-91f9-1036-89c0-23cc2d737e18'
    'uid=10864,ou=accounts,dc=example,dc=fr', '10864', '5f0c9cc2-91f9-1036-89cb-23cc2d737e18'
  1. Use one of these user, create a file => activity table with inconsistent entry (affecteduser=0 instead of user id)
  2. Rename the file => Exception thrown («The given affected user is invalid») in logs and no activity report (but file effectively renamed)

Seem to be same problem as https://help.nextcloud.com/t/activity-app-seems-no-longer-working/7353/3

user_ldap isn't mandatory to have the issue, same behaviour if you create a new local user with login name containing only digits

Expected behaviour

Have nextcloud work with users identified by numeric id.

Actual behaviour

Due to PHP internals:

  1. numeric string used for array keys are casted to int (http://php.net/manual/en/language.types.array.php «Additionally the following key casts will occur: Strings containing valid decimal integers, unless the number is preceded by a + sign, will be cast to the integer type. E.g. the key "8" will actually be stored under 8. On the other hand "08" will not be cast, as it isn't a valid decimal integer. »)
  2. merging arrays with numeric keys result to an array with keys renumbered (http://fr.php.net/manual/en/function.array-merge.php)

Considering function getAccessList (https://github.com/nextcloud/server/blob/v12.0.1/lib/private/Share20/Manager.php#L1227)

Line Code Result
1228 $owner = $path->getOwner()->getUID(); $owner = '10147'
1259 $al['users'][$owner] = [ .. $al['users'][10147]['node_id']=91597 , NOT $al['users']['10147'] (php internals 1)
1282 $al[$k] = array_merge($al[$k], $v); l $al['users'][0]['node_id']=91597 , NOT $al['users']['10147'] (php internals 2)

Server configuration

Operating system: Debian 9

Web server: Apache 2.4.25

Database: MariaDB 10.1.26

PHP version: PHP FPM 7.0.19

Nextcloud version: 12.0.1

Updated from an older Nextcloud/ownCloud or fresh install: Fresh install

Where did you install Nextcloud from: Git repository

Signing status:

Signing status
No errors have been found.

List of activated apps:

App list
Enabled:
  - activity: 2.5.2
  - bruteforcesettings: 1.0.2
  - dav: 1.3.0
  - federatedfilesharing: 1.2.0
  - files: 1.7.2
  - files_downloadactivity: 1.1.1
  - files_reader: 1.0.4
  - files_sharing: 1.4.0
  - files_trashbin: 1.2.0
  - files_versions: 1.5.0
  - gallery: 18.0.0
  - lookup_server_connector: 1.0.0
  - oauth2: 1.0.5
  - provisioning_api: 1.2.0
  - sharebymail: 1.2.0
  - theming: 1.3.0
  - twofactor_backupcodes: 1.1.1
  - updatenotification: 1.2.0
  - user_ldap: 1.2.1
  - user_saml: 1.3.2
  - workflowengine: 1.2.0
Disabled:
  - admin_audit
  - comments
  - encryption
  - federation
  - files_external
  - systemtags

Nextcloud configuration:

Config report
{
    "system": {
        "instanceid": "oczwixzowqqu",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "cxxxxxxxxxxxxxxxxxxx.fr"
        ],
        "datadirectory": "\/var\/www\/xxxxxxxxxxxxxxx.xxxxxxxxxxxxx.fr\/htdocs\/data",
        "overwritehost": "xxxxxxxxxxxxxxxxxxx.yyyyyyyyyyyyyyyyy.fr",
        "overwrite.cli.url": "https:\/\/xxxxxxxxxxxxxxxxxxxxxxxx.fr",
        "overwriteprotocol": "https",
        "overwritewebroot": "\/",
        "dbtype": "mysql",
        "version": "12.0.1.5",
        "dbname": "nextcloud",
        "dbhost": "xxxxxxxxxxxxxxx:3306",
        "dbport": "",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "maintenance": false,
        "ldapIgnoreNamingRules": false,
        "ldapProviderFactory": "\\OCA\\User_LDAP\\LDAPProviderFactory",
        "debug": true,
        "updater.release.channel": "git",
        "loglevel": 2,
        "enable_avatars": false
    },
    "apps": {
        "activity": {
            "enabled": "yes",
            "installed_version": "2.5.2",
            "notify_email_calendar": "0",
            "notify_email_calendar_event": "0",
            "notify_email_calendar_todo": "0",
            "notify_email_favorite": "0",
            "notify_email_file_changed": "0",
            "notify_email_file_created": "0",
            "notify_email_file_deleted": "0",
            "notify_email_file_downloaded": "0",
            "notify_email_file_restored": "0",
            "notify_email_public_links": "0",
            "notify_email_remote_share": "1",
            "notify_email_shared": "1",
            "notify_setting_batchtime": "3600",
            "notify_setting_self": "1",
            "notify_setting_selfemail": "0",
            "notify_stream_calendar": "0",
            "notify_stream_calendar_event": "0",
            "notify_stream_calendar_todo": "0",
            "notify_stream_favorite": "1",
            "notify_stream_file_changed": "1",
            "notify_stream_file_created": "1",
            "notify_stream_file_deleted": "1",
            "notify_stream_file_downloaded": "1",
            "notify_stream_file_favorite": "0",
            "notify_stream_file_restored": "1",
            "notify_stream_public_links": "1",
            "notify_stream_remote_share": "1",
            "notify_stream_shared": "1",
            "types": "filesystem"
        },
        "admin_audit": {
            "enabled": "no",
            "installed_version": "1.2.0",
            "types": "logging"
        },
        "backgroundjob": {
            "lastjob": "58"
        },
        "bruteforcesettings": {
            "enabled": "yes",
            "installed_version": "1.0.2",
            "types": ""
        },
        "comments": {
            "enabled": "no",
            "installed_version": "1.2.0",
            "types": "logging"
        },
        "core": {
            "backgroundjobs_mode": "cron",
            "installed.bundles": "[\"CoreBundle\"]",
            "installedat": "1496147465.3678",
            "lastcron": "1503328462",
            "lastupdateResult": "[]",
            "lastupdatedat": "1505803152",
            "moveavatarsdone": "yes",
            "oc.integritycheck.checker": "[]",
            "previewsCleanedUp": "1",
            "public_files": "files_sharing\/public.php",
            "public_webdav": "dav\/appinfo\/v1\/publicwebdav.php",
            "scss.variables": "61c39aaaef2af6f4529f60a502fbfe9c",
            "vendor": "nextcloud"
        },
        "dav": {
            "buildCalendarSearchIndex": "yes",
            "enabled": "yes",
            "installed_version": "1.3.0",
            "types": "filesystem"
        },
        "deck": {
            "enabled": "no",
            "installed_version": "0.1.4",
            "types": ""
        },
        "federatedfilesharing": {
            "enabled": "yes",
            "installed_version": "1.2.0",
            "types": ""
        },
        "federation": {
            "enabled": "no",
            "installed_version": "1.2.0",
            "types": "authentication"
        },
        "files": {
            "cronjob_scan_files": "3000",
            "enabled": "yes",
            "installed_version": "1.7.2",
            "types": "filesystem"
        },
        "files_downloadactivity": {
            "enabled": "yes",
            "installed_version": "1.1.1",
            "types": "filesystem"
        },
        "files_reader": {
            "enabled": "yes",
            "installed_version": "1.0.4",
            "types": "filesystem"
        },
        "files_sharing": {
            "enabled": "yes",
            "incoming_server2server_share_enabled": "no",
            "installed_version": "1.4.0",
            "lookupServerUploadEnabled": "no",
            "outgoing_server2server_share_enabled": "no",
            "types": "filesystem"
        },
        "files_trashbin": {
            "enabled": "yes",
            "installed_version": "1.2.0",
            "types": "filesystem"
        },
        "files_versions": {
            "enabled": "yes",
            "installed_version": "1.5.0",
            "types": "filesystem"
        },
        "gallery": {
            "enabled": "yes",
            "installed_version": "18.0.0",
            "types": ""
        },
        "impersonate": {
            "enabled": "no",
            "installed_version": "1.0.1",
            "types": ""
        },
        "lookup_server_connector": {
            "enabled": "yes",
            "installed_version": "1.0.0",
            "types": "authentication"
        },
        "oauth2": {
            "enabled": "yes",
            "installed_version": "1.0.5",
            "types": "authentication"
        },
        "provisioning_api": {
            "enabled": "yes",
            "installed_version": "1.2.0",
            "types": "prevent_group_restriction"
        },
        "sharebymail": {
            "enabled": "yes",
            "installed_version": "1.2.0",
            "types": "filesystem"
        },
        "spreed": {
            "enabled": "no",
            "installed_version": "2.0.1",
            "types": "prevent_group_restriction"
        },
        "systemtags": {
            "enabled": "no",
            "installed_version": "1.2.0",
            "types": "logging"
        },
        "theming": {
            "cachebuster": "10",
            "color": "#9a1c69",
            "enabled": "yes",
            "installed_version": "1.3.0",
            "logoMime": "image\/png",
            "types": "logging"
        },
        "twofactor_backupcodes": {
            "enabled": "yes",
            "installed_version": "1.1.1",
            "types": ""
        },
        "updatenotification": {
            "enabled": "yes",
            "installed_version": "1.2.0",
            "types": ""
        },
        "user_ldap": {
            "cleanUpJobOffset": "150",
            "enabled": "yes",
            "has_memberof_filter_support": "1",
            "home_folder_naming_rule": "",
            "installed_version": "1.2.1",
            "last_jpegPhoto_lookup": "0",
            "ldap_agent_password": "***REMOVED SENSITIVE VALUE***",
            "ldap_attributes_for_group_search": "",
            "ldap_attributes_for_user_search": "displayName\nuid\ncn\nmail",
            "ldap_backup_host": "",
            "ldap_backup_port": "",
            "ldap_base": "ou=accounts,dc=xxxxxxxxxxxxxxxx,dc=fr",
            "ldap_base_groups": "ou=groups,dc=xxxxxxxxxxxxx,dc=fr",
            "ldap_base_users": "ou=accounts,dc=xxxxxxxxxxxxxx,dc=fr",
            "ldap_cache_ttl": "600",
            "ldap_configuration_active": "1",
            "ldap_default_ppolicy_dn": "",
            "ldap_display_name": "displayName",
            "ldap_dn": "uid=xxxxxxxxxxx,ou=admins,dc=xxxxxxxxxxx,dc=fr",
            "ldap_dynamic_group_member_url": "",
            "ldap_email_attr": "",
            "ldap_experienced_admin": "0",
            "ldap_expert_username_attr": "uid",
            "ldap_expert_uuid_group_attr": "",
            "ldap_expert_uuid_user_attr": "",
            "ldap_gid_number": "gidNumber",
            "ldap_group_display_name": "cn",
            "ldap_group_filter": "",
            "ldap_group_filter_mode": "0",
            "ldap_group_member_assoc_attribute": "uniqueMember",
            "ldap_groupfilter_groups": "",
            "ldap_groupfilter_objectclass": "",
            "ldap_host": "ldap.xxxxxxx.fr",
            "ldap_login_filter": "(&(&(|(objectclass=inetOrgPerson)))(|(supannAliasLogin=%uid)))",
            "ldap_login_filter_mode": "0",
            "ldap_loginfilter_attributes": "supannAliasLogin",
            "ldap_loginfilter_email": "0",
            "ldap_loginfilter_username": "0",
            "ldap_nested_groups": "0",
            "ldap_override_main_server": "",
            "ldap_paging_size": "0",
            "ldap_port": "389",
            "ldap_quota_attr": "",
            "ldap_quota_def": "",
            "ldap_tls": "0",
            "ldap_turn_off_cert_check": "0",
            "ldap_turn_on_pwd_change": "0",
            "ldap_user_display_name_2": "",
            "ldap_user_filter_mode": "0",
            "ldap_userfilter_groups": "",
            "ldap_userfilter_objectclass": "inetOrgPerson",
            "ldap_userlist_filter": "(&(|(objectclass=inetOrgPerson)))",
            "types": "authentication",
            "use_memberof_to_detect_membership": "1"
        },
        "user_saml": {
            "enabled": "yes",
            "general-require_provisioned_account": "1",
            "general-uid_mapping": "urn:oid:0.9.2342.19200300.100.1.1",
            "general-use_saml_auth_for_desktop": "0",
            "idp-entityId": "https:\/\/xxx.fr\/idp\/shibboleth",
            "idp-singleSignOnService.url": "https:\/\/xxx.fr\/idp\/profile\/SAML2\/Redirect\/SSO",
            "idp-x509cert": "-----BEGIN CERTIFICATE----------END CERTIFICATE-----",
            "installed_version": "1.3.2",
            "saml-attribute-mapping-displayName_mapping": "urn:oid:2.16.840.1.113730.3.1.241 ",
            "saml-attribute-mapping-email_mapping": "urn:oid:0.9.2342.19200300.100.1.3 ",
            "security-signMetadata": "1",
            "security-wantAssertionsEncrypted": "0",
            "security-wantAssertionsSigned": "0",
            "security-wantXMLValidation": "1",
            "sp-privateKey": "-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----",
            "sp-x509cert": "-----BEGIN CERTIFICATE-----\-----END CERTIFICATE-----",
            "type": "saml",
            "types": "authentication"
        },
        "workflowengine": {
            "enabled": "yes",
            "installed_version": "1.2.0",
            "types": "filesystem"
        }
    }
}

Are you using external storage, if yes which one: no, just local storage
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                 |                                                                |
+-------------------------------+----------------------------------------------------------------+
| hasMemberOfFilterSupport      | 1                                                              |
| hasPagedResultSupport         |                                                                |
| homeFolderNamingRule          |                                                                |
| lastJpegPhotoLookup           | 0                                                              |
| ldapAgentName                 | uid=xxxxxxx,ou=admins,dc=xxxxxx,dc=fr              |
| ldapAgentPassword             | ***                                                            |
| ldapAttributesForGroupSearch  |                                                                |
| ldapAttributesForUserSearch   | displayName;uid;cn;mail                                        |
| ldapBackupHost                |                                                                |
| ldapBackupPort                |                                                                |
| ldapBase                      | ou=accounts,dc=xxxxxxx,dc=fr                                |
| ldapBaseGroups                | ou=groups,dc=xxxxxxx,dc=fr                                  |
| ldapBaseUsers                 | ou=accounts,dc=xxxxxxx,dc=fr                                |
| ldapCacheTTL                  | 600                                                            |
| ldapConfigurationActive       | 1                                                              |
| ldapDefaultPPolicyDN          |                                                                |
| ldapDynamicGroupMemberURL     |                                                                |
| ldapEmailAttribute            |                                                                |
| ldapExperiencedAdmin          | 0                                                              |
| ldapExpertUUIDGroupAttr       |                                                                |
| ldapExpertUUIDUserAttr        |                                                                |
| ldapExpertUsernameAttr        | uid                                                            |
| ldapGidNumber                 | gidNumber                                                      |
| ldapGroupDisplayName          | cn                                                             |
| ldapGroupFilter               |                                                                |
| ldapGroupFilterGroups         |                                                                |
| ldapGroupFilterMode           | 0                                                              |
| ldapGroupFilterObjectclass    |                                                                |
| ldapGroupMemberAssocAttr      | uniqueMember                                                   |
| ldapHost                      | yyyyyyy.xxxxxxx.fr                                         |
| ldapIgnoreNamingRules         |                                                                |
| ldapLoginFilter               | (&(&(|(objectclass=inetOrgPerson)))(|(supannAliasLogin=%uid))) |
| ldapLoginFilterAttributes     | supannAliasLogin                                               |
| ldapLoginFilterEmail          | 0                                                              |
| ldapLoginFilterMode           | 0                                                              |
| ldapLoginFilterUsername       | 0                                                              |
| ldapNestedGroups              | 0                                                              |
| ldapOverrideMainServer        |                                                                |
| ldapPagingSize                | 0                                                              |
| ldapPort                      | 389                                                            |
| ldapQuotaAttribute            |                                                                |
| ldapQuotaDefault              |                                                                |
| ldapTLS                       | 0                                                              |
| ldapUserDisplayName           | displayName                                                    |
| ldapUserDisplayName2          |                                                                |
| ldapUserFilter                | (&(|(objectclass=inetOrgPerson)))                              |
| ldapUserFilterGroups          |                                                                |
| ldapUserFilterMode            | 0                                                              |
| ldapUserFilterObjectclass     | inetOrgPerson                                                  |
| ldapUuidGroupAttribute        | auto                                                           |
| ldapUuidUserAttribute         | auto                                                           |
| turnOffCertCheck              | 0                                                              |
| turnOnPasswordChange          | 0                                                              |
| useMemberOfToDetectMembership | 1                                                              |
+-------------------------------+----------------------------------------------------------------+

Client configuration

Browser: Firefox 45.9

Operating system: Debian 8.7

Logs

Web server error log

None

Nextcloud log (data/nextcloud.log)

Nextcloud log
{"reqId":"0Yn8GuGyPW9KpS2dKewf","level":3,"time":"2017-09-19T13:13:59+00:00","remoteAddr":"194.254.129.13","user":"7045","app":"no app in context","method":"MOVE","url":"\/remote.php\/webdav\/plop","message":"Exception: {\"Exception\":\"InvalidArgumentException\",\"Message\":\"The given affected user is invalid\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/nextcloud.xxxxx.fr\\\/htdocs\\\/apps\\\/activity\\\/lib\\\/FilesHooks.php(1066): OC\\\\Activity\\\\Event->setAffectedUser(0)\\n#1 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/apps\\\/activity\\\/lib\\\/FilesHooks.php(408): OCA\\\\Activity\\\\FilesHooks->addNotificationsForUser(0, 'renamed_by', Array, 91651, '\\\/\\\/plop4', true, true, 0, 'file_changed')\\n#2 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/apps\\\/activity\\\/lib\\\/FilesHooks.php(337): OCA\\\\Activity\\\\FilesHooks->fileRenaming('\\\/plop', '\\\/plop4')\\n#3 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/apps\\\/activity\\\/lib\\\/FilesHooksStatic.php(79): OCA\\\\Activity\\\\FilesHooks->fileMovePost('\\\/plop', '\\\/plop4')\\n#4 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/lib\\\/private\\\/legacy\\\/hook.php(106): OCA\\\\Activity\\\\FilesHooksStatic::fileMovePost(Array)\\n#5 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/lib\\\/private\\\/Files\\\/View.php(833): OC_Hook::emit('OC_Filesystem', 'post_rename', Array)\\n#6 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/Node.php(137): OC\\\\Files\\\\View->rename('\\\/plop', '\\\/plop4')\\n#7 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(151): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Node->setName('plop4')\\n#8 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/CorePlugin.php(642): Sabre\\\\DAV\\\\Tree->move('plop', 'plop4')\\n#9 [internal function]: Sabre\\\\DAV\\\\CorePlugin->httpMove(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#10 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/3rdparty\\\/sabre\\\/event\\\/lib\\\/EventEmitterTrait.php(105): call_user_func_array(Array, Array)\\n#11 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(479): Sabre\\\\Event\\\\EventEmitter->emit('method:MOVE', Array)\\n#12 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/3rdparty\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(254): Sabre\\\\DAV\\\\Server->invokeMethod(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#13 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/apps\\\/dav\\\/appinfo\\\/v1\\\/webdav.php(71): Sabre\\\\DAV\\\\Server->exec()\\n#14 \\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/remote.php(162): require_once('\\\/var\\\/www\\\/nextcl...')\\n#15 {main}\",\"File\":\"\\\/var\\\/www\\\/nextcloud.xxxxxxx.fr\\\/htdocs\\\/lib\\\/private\\\/Activity\\\/Event.php\",\"Line\":142}","userAgent":"Mozilla\/5.0 (X11; Linux x86_64; rv:45.0) Gecko\/20100101 Firefox\/45.0","version":"12.0.1.5"}

Browser log

None

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions