• Vincent Pelletier's avatar
    ZSQLCatalog: Fix security indexation when indexing the same object multiple times · 048c4414
    Vincent Pelletier authored
    When an object is being indexed, it get wrapped so it has magic properties,
    like security definitions as they will be accessed by indexation methods.
    One such property is used to trigger the insertion of rows in
    roles_and_users table. That property has the special feature that it is
    only produced on the first object needing a new set of rows added to
    roles_and_users, other objects will get a None value instead for that
    property so that no further lines are inserted.
    Then, SQCatalog iterates over that wrapper list to compute all indexation
    method parameters. It does so via a cache (LazyIndexationParameterList) so
    that unused parameters are not computed. The cache key is wrapped object's
    uid.
    All this together means that if an object is indexed multiple times in a
    single call (which happens at site creation, for example) and it needs a
    new set of rows added in roles_and_users, only one of produced wrappers
    will get the appropriate value. If that object is not the first on which
    that parameter is evaluated (which gets more likely with every copy of the
    same object being indexed), it will be cached as None and shared between
    all copies, causing no row to be added to roles_and_users.
    
    Full investigation done by by Yusei Tahara.
    wrappers will get the
    048c4414
ZSQLCatalog.py 52 KB