@@ -301,60 +301,51 @@ void
301301pcmk__unpack_acls (xmlNode * source , xmlNode * target , const char * user )
302302{
303303 xml_doc_private_t * docpriv = NULL ;
304+ xmlNode * acls = NULL ;
304305
305306 pcmk__assert (target != NULL );
306307
307308 docpriv = target -> doc -> _private ;
308- if (!pcmk_acl_required (user )) {
309- pcmk__trace ( "Not unpacking ACLs because not required for user '%s'" ,
310- user );
309+ if (!pcmk_acl_required (user ) || ( docpriv -> acls != NULL ) ) {
310+ return ;
311+ }
311312
312- } else if (docpriv -> acls == NULL ) {
313- xmlNode * acls = pcmk__xpath_find_one (source -> doc , "//" PCMK_XE_ACLS ,
314- PCMK__LOG_NEVER );
313+ pcmk__str_update (& docpriv -> acl_user , user );
315314
316- pcmk__str_update (& (docpriv -> acl_user ), user );
315+ acls = pcmk__xpath_find_one (source -> doc , "//" PCMK_XE_ACLS ,
316+ PCMK__LOG_NEVER );
317317
318- if (acls == NULL ) {
319- return ;
320- }
318+ for (xmlNode * child = pcmk__xe_first_child (acls , NULL , NULL , NULL );
319+ child != NULL ; child = pcmk__xe_next (child , NULL )) {
321320
322- for (xmlNode * child = pcmk__xe_first_child (acls , NULL , NULL , NULL );
323- child != NULL ; child = pcmk__xe_next (child , NULL )) {
321+ const bool is_target = pcmk__xe_is (child , PCMK_XE_ACL_TARGET );
322+ const bool is_group = pcmk__xe_is (child , PCMK_XE_ACL_GROUP );
323+ const char * id = NULL ;
324324
325- const bool is_target = pcmk__xe_is ( child , PCMK_XE_ACL_TARGET );
326- const bool is_group = pcmk__xe_is ( child , PCMK_XE_ACL_GROUP ) ;
327- const char * id = NULL ;
325+ if (! is_target && ! is_group ) {
326+ continue ;
327+ }
328328
329- if (!is_target && !is_group ) {
330- continue ;
331- }
329+ id = pcmk__s (pcmk__xe_get (child , PCMK_XA_NAME ), pcmk__xe_id (child ));
330+ if (id == NULL ) {
331+ // Not possible with schema validation enabled
332+ continue ;
333+ }
332334
333- id = pcmk__s (pcmk__xe_get (child , PCMK_XA_NAME ),
334- pcmk__xe_id (child ));
335- if (id == NULL ) {
336- // Not possible with schema validation enabled
335+ if (is_target ) {
336+ if (!pcmk__str_eq (id , user , pcmk__str_none )) {
337337 continue ;
338338 }
339+ pcmk__debug ("Unpacking ACLs for user '%s'" , id );
339340
340- if (is_target ) {
341- if (!pcmk__str_eq (id , user , pcmk__str_none )) {
342- continue ;
343- }
344-
345- pcmk__debug ("Unpacking ACLs for user '%s'" , id );
346-
347- } else {
348- if (!pcmk__is_user_in_group (user , id )) {
349- continue ;
350- }
351-
352- pcmk__debug ("Unpacking ACLs for group '%s' (user '%s')" , id ,
353- user );
341+ } else {
342+ if (!pcmk__is_user_in_group (user , id )) {
343+ continue ;
354344 }
355-
356- docpriv -> acls = parse_acl_entry (acls , child , docpriv -> acls );
345+ pcmk__debug ("Unpacking ACLs for group '%s' (user '%s')" , id , user );
357346 }
347+
348+ docpriv -> acls = parse_acl_entry (acls , child , docpriv -> acls );
358349 }
359350}
360351
0 commit comments