LCOV - code coverage report
Current view: top level - providers/ad - ad_gpo_ndr.c (source / functions) Hit Total Coverage
Test: .coverage.total Lines: 0 244 0.0 %
Date: 2015-10-19 Functions: 0 15 0.0 %

          Line data    Source code
       1             : /*
       2             :     SSSD
       3             : 
       4             :     ad_gpo_ndr.c
       5             : 
       6             :     Authors:
       7             :     Yassir Elley <yelley@redhat.com>
       8             : 
       9             :     Copyright (C) 2014 Red Hat
      10             : 
      11             :     This program is free software; you can redistribute it and/or modify
      12             :     it under the terms of the GNU General Public License as published by
      13             :     the Free Software Foundation; either version 3 of the License, or
      14             :     (at your option) any later version.
      15             : 
      16             :     This program is distributed in the hope that it will be useful,
      17             :     but WITHOUT ANY WARRANTY; without even the implied warranty of
      18             :     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19             :     GNU General Public License for more details.
      20             : 
      21             :     You should have received a copy of the GNU General Public License
      22             :     along with this program.  If not, see <http://www.gnu.org/licenses/>.
      23             : */
      24             : 
      25             : /*
      26             :  * This file contains a copy of samba's ndr_pull_* functions needed
      27             :  * to parse a security_descriptor. We are copying them here so that we don't
      28             :  * have to link against libsamba-security, which is a private samba library
      29             :  * These functions are taken from:
      30             :  *  librpc/ndr/gen_ndr/ndr_security.c
      31             :  *  librpc/ndr/ndr_misc.c
      32             :  *  librpc/ndr/ndr_sec_helper.c
      33             :  */
      34             : 
      35             : #include "util/util.h"
      36             : #include <ndr.h>
      37             : #include <gen_ndr/security.h>
      38             : 
      39             : static enum ndr_err_code
      40           0 : ndr_pull_GUID(struct ndr_pull *ndr,
      41             :               int ndr_flags,
      42             :               struct GUID *r)
      43             : {
      44           0 :     uint32_t size_clock_seq_0 = 0;
      45           0 :     uint32_t size_node_0 = 0;
      46           0 :     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
      47           0 :     if (ndr_flags & NDR_SCALARS) {
      48           0 :         NDR_CHECK(ndr_pull_align(ndr, 4));
      49           0 :         NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->time_low));
      50           0 :         NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->time_mid));
      51           0 :         NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->time_hi_and_version));
      52           0 :         size_clock_seq_0 = 2;
      53           0 :         NDR_CHECK(ndr_pull_array_uint8(ndr,
      54             :                                        NDR_SCALARS,
      55             :                                        r->clock_seq,
      56             :                                        size_clock_seq_0));
      57           0 :         size_node_0 = 6;
      58           0 :         NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->node, size_node_0));
      59           0 :         NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
      60             :     }
      61           0 :     if (ndr_flags & NDR_BUFFERS) {
      62             :     }
      63           0 :     return NDR_ERR_SUCCESS;
      64             : }
      65             : 
      66             : static enum ndr_err_code
      67           0 : ndr_pull_security_ace_flags(struct ndr_pull *ndr,
      68             :                             int ndr_flags,
      69             :                             uint8_t *r)
      70             : {
      71             :     uint8_t v;
      72           0 :     NDR_CHECK(ndr_pull_uint8(ndr, ndr_flags, &v));
      73           0 :     *r = v;
      74           0 :     return NDR_ERR_SUCCESS;
      75             : }
      76             : 
      77             : 
      78             : static enum ndr_err_code
      79           0 : ndr_pull_security_ace_type(struct ndr_pull *ndr,
      80             :                            int ndr_flags,
      81             :                            enum security_ace_type *r)
      82             : {
      83             :     uint8_t v;
      84           0 :     NDR_CHECK(ndr_pull_enum_uint8(ndr, ndr_flags, &v));
      85           0 :     *r = v;
      86           0 :     return NDR_ERR_SUCCESS;
      87             : }
      88             : 
      89             : 
      90             : static enum ndr_err_code
      91           0 : ndr_pull_security_ace_object_flags(struct ndr_pull *ndr,
      92             :                                    int ndr_flags,
      93             :                                    uint32_t *r)
      94             : {
      95             :     uint32_t v;
      96           0 :     NDR_CHECK(ndr_pull_uint32(ndr, ndr_flags, &v));
      97           0 :     *r = v;
      98           0 :     return NDR_ERR_SUCCESS;
      99             : }
     100             : 
     101             : 
     102             : static enum ndr_err_code
     103           0 : ndr_pull_security_ace_object_type(struct ndr_pull *ndr,
     104             :                                   int ndr_flags,
     105             :                                   union security_ace_object_type *r)
     106             : {
     107             :     uint32_t level;
     108           0 :     level = ndr_pull_get_switch_value(ndr, r);
     109           0 :     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
     110           0 :     if (ndr_flags & NDR_SCALARS) {
     111           0 :         NDR_CHECK(ndr_pull_union_align(ndr, 4));
     112           0 :         switch (level) {
     113             :         case SEC_ACE_OBJECT_TYPE_PRESENT: {
     114           0 :             NDR_CHECK(ndr_pull_GUID(ndr, NDR_SCALARS, &r->type));
     115           0 :             break; }
     116             :         default: {
     117           0 :             break; }
     118             :         }
     119             :     }
     120           0 :     if (ndr_flags & NDR_BUFFERS) {
     121           0 :         switch (level) {
     122             :         case SEC_ACE_OBJECT_TYPE_PRESENT:
     123           0 :             break;
     124             :         default:
     125           0 :             break;
     126             :         }
     127             :     }
     128           0 :     return NDR_ERR_SUCCESS;
     129             : }
     130             : 
     131             : 
     132             : static enum ndr_err_code
     133           0 : ndr_pull_security_ace_object_inherited_type(struct ndr_pull *ndr,
     134             :                                             int ndr_flags,
     135             :                                             union security_ace_object_inherited_type *r)
     136             : {
     137             :     uint32_t level;
     138           0 :     level = ndr_pull_get_switch_value(ndr, r);
     139           0 :     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
     140           0 :     if (ndr_flags & NDR_SCALARS) {
     141           0 :         NDR_CHECK(ndr_pull_union_align(ndr, 4));
     142           0 :         switch (level) {
     143             :         case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT: {
     144           0 :             NDR_CHECK(ndr_pull_GUID(ndr,
     145             :                                     NDR_SCALARS,
     146             :                                     &r->inherited_type));
     147           0 :             break; }
     148             :         default: {
     149           0 :             break; }
     150             :         }
     151             :     }
     152           0 :     if (ndr_flags & NDR_BUFFERS) {
     153           0 :         switch (level) {
     154             :         case SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT:
     155           0 :             break;
     156             :         default:
     157           0 :             break;
     158             :         }
     159             :     }
     160           0 :     return NDR_ERR_SUCCESS;
     161             : }
     162             : 
     163             : static enum ndr_err_code
     164           0 : ndr_pull_security_ace_object(struct ndr_pull *ndr,
     165             :                              int ndr_flags,
     166             :                              struct security_ace_object *r)
     167             : {
     168           0 :     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
     169           0 :     if (ndr_flags & NDR_SCALARS) {
     170           0 :         NDR_CHECK(ndr_pull_align(ndr, 4));
     171           0 :         NDR_CHECK(ndr_pull_security_ace_object_flags
     172             :                   (ndr, NDR_SCALARS, &r->flags));
     173           0 :         NDR_CHECK(ndr_pull_set_switch_value
     174             :                   (ndr, &r->type, r->flags & SEC_ACE_OBJECT_TYPE_PRESENT));
     175           0 :         NDR_CHECK(ndr_pull_security_ace_object_type
     176             :                   (ndr, NDR_SCALARS, &r->type));
     177           0 :         NDR_CHECK(ndr_pull_set_switch_value
     178             :                   (ndr,
     179             :                    &r->inherited_type,
     180             :                    r->flags & SEC_ACE_INHERITED_OBJECT_TYPE_PRESENT));
     181           0 :         NDR_CHECK(ndr_pull_security_ace_object_inherited_type
     182             :                   (ndr, NDR_SCALARS, &r->inherited_type));
     183           0 :         NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
     184             :     }
     185           0 :     if (ndr_flags & NDR_BUFFERS) {
     186           0 :         NDR_CHECK(ndr_pull_security_ace_object_type
     187             :                   (ndr, NDR_BUFFERS, &r->type));
     188           0 :         NDR_CHECK(ndr_pull_security_ace_object_inherited_type
     189             :                   (ndr, NDR_BUFFERS, &r->inherited_type));
     190             :     }
     191           0 :     return NDR_ERR_SUCCESS;
     192             : }
     193             : 
     194             : 
     195             : static enum ndr_err_code
     196           0 : ndr_pull_security_ace_object_ctr(struct ndr_pull *ndr,
     197             :                                  int ndr_flags,
     198             :                                  union security_ace_object_ctr *r)
     199             : {
     200             :     uint32_t level;
     201           0 :     level = ndr_pull_get_switch_value(ndr, r);
     202           0 :     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
     203           0 :     if (ndr_flags & NDR_SCALARS) {
     204           0 :         NDR_CHECK(ndr_pull_union_align(ndr, 4));
     205           0 :         switch (level) {
     206             :         case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT: {
     207           0 :             NDR_CHECK(ndr_pull_security_ace_object
     208             :                       (ndr, NDR_SCALARS, &r->object));
     209           0 :             break; }
     210             :         case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT: {
     211           0 :             NDR_CHECK(ndr_pull_security_ace_object
     212             :                       (ndr, NDR_SCALARS, &r->object));
     213           0 :             break; }
     214             :         case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT: {
     215           0 :             NDR_CHECK(ndr_pull_security_ace_object
     216             :                       (ndr, NDR_SCALARS, &r->object));
     217           0 :             break; }
     218             :         case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT: {
     219           0 :             NDR_CHECK(ndr_pull_security_ace_object
     220             :                       (ndr, NDR_SCALARS, &r->object));
     221           0 :             break; }
     222             :         default: {
     223           0 :             break; }
     224             :         }
     225             :     }
     226           0 :     if (ndr_flags & NDR_BUFFERS) {
     227           0 :         switch (level) {
     228             :         case SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT:
     229           0 :             NDR_CHECK(ndr_pull_security_ace_object
     230             :                       (ndr, NDR_BUFFERS, &r->object));
     231           0 :             break;
     232             :         case SEC_ACE_TYPE_ACCESS_DENIED_OBJECT:
     233           0 :             NDR_CHECK(ndr_pull_security_ace_object
     234             :                       (ndr, NDR_BUFFERS, &r->object));
     235           0 :             break;
     236             :         case SEC_ACE_TYPE_SYSTEM_AUDIT_OBJECT:
     237           0 :             NDR_CHECK(ndr_pull_security_ace_object
     238             :                       (ndr, NDR_BUFFERS, &r->object));
     239           0 :             break;
     240             :         case SEC_ACE_TYPE_SYSTEM_ALARM_OBJECT:
     241           0 :             NDR_CHECK(ndr_pull_security_ace_object
     242             :                       (ndr, NDR_BUFFERS, &r->object));
     243           0 :             break;
     244             :         default:
     245           0 :             break;
     246             :         }
     247             :     }
     248           0 :     return NDR_ERR_SUCCESS;
     249             : }
     250             : 
     251             : static enum ndr_err_code
     252           0 : ndr_pull_dom_sid(struct ndr_pull *ndr,
     253             :                  int ndr_flags,
     254             :                  struct dom_sid *r)
     255             : {
     256             :     uint32_t cntr_sub_auths_0;
     257           0 :     if (ndr_flags & NDR_SCALARS) {
     258           0 :         NDR_CHECK(ndr_pull_align(ndr, 4));
     259           0 :         NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->sid_rev_num));
     260           0 :         NDR_CHECK(ndr_pull_int8(ndr, NDR_SCALARS, &r->num_auths));
     261           0 :         if (r->num_auths < 0 || r->num_auths > ARRAY_SIZE(r->sub_auths)) {
     262           0 :             return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
     263             :         }
     264           0 :         NDR_CHECK(ndr_pull_array_uint8(ndr, NDR_SCALARS, r->id_auth, 6));
     265           0 :         ZERO_STRUCT(r->sub_auths);
     266           0 :         for (cntr_sub_auths_0 = 0;
     267           0 :              cntr_sub_auths_0 < r->num_auths;
     268           0 :              cntr_sub_auths_0++) {
     269           0 :             NDR_CHECK(ndr_pull_uint32
     270             :                       (ndr, NDR_SCALARS, &r->sub_auths[cntr_sub_auths_0]));
     271             :         }
     272             :     }
     273           0 :     return NDR_ERR_SUCCESS;
     274             : }
     275             : 
     276             : static enum ndr_err_code
     277           0 : ndr_pull_security_ace(struct ndr_pull *ndr,
     278             :                       int ndr_flags,
     279             :                       struct security_ace *r)
     280             : {
     281           0 :     if (ndr_flags & NDR_SCALARS) {
     282           0 :         uint32_t start_ofs = ndr->offset;
     283           0 :         uint32_t size = 0;
     284           0 :         uint32_t pad = 0;
     285           0 :         NDR_CHECK(ndr_pull_align(ndr, 4));
     286           0 :         NDR_CHECK(ndr_pull_security_ace_type(ndr, NDR_SCALARS, &r->type));
     287           0 :         NDR_CHECK(ndr_pull_security_ace_flags(ndr, NDR_SCALARS, &r->flags));
     288           0 :         NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
     289           0 :         NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->access_mask));
     290           0 :         NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->object, r->type));
     291           0 :         NDR_CHECK(ndr_pull_security_ace_object_ctr
     292             :                   (ndr, NDR_SCALARS, &r->object));
     293           0 :         NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, &r->trustee));
     294           0 :         size = ndr->offset - start_ofs;
     295           0 :         if (r->size < size) {
     296           0 :             return ndr_pull_error(ndr, NDR_ERR_BUFSIZE,
     297             :                                   "ndr_pull_security_ace: r->size %u < size %u",
     298           0 :                                   (unsigned)r->size, size);
     299             :         }
     300           0 :         pad = r->size - size;
     301           0 :         NDR_PULL_NEED_BYTES(ndr, pad);
     302           0 :         ndr->offset += pad;
     303             :     }
     304           0 :     if (ndr_flags & NDR_BUFFERS) {
     305           0 :         NDR_CHECK(ndr_pull_security_ace_object_ctr
     306             :                   (ndr, NDR_BUFFERS, &r->object));
     307             :     }
     308           0 :     return NDR_ERR_SUCCESS;
     309             : }
     310             : 
     311             : static enum ndr_err_code
     312           0 : ndr_pull_security_acl_revision(struct ndr_pull *ndr,
     313             :                                int ndr_flags,
     314             :                                enum security_acl_revision *r)
     315             : {
     316             :     uint16_t v;
     317           0 :     NDR_CHECK(ndr_pull_enum_uint1632(ndr, ndr_flags, &v));
     318           0 :     *r = v;
     319           0 :     return NDR_ERR_SUCCESS;
     320             : }
     321             : 
     322             : 
     323             : static enum ndr_err_code
     324           0 : ndr_pull_security_acl(struct ndr_pull *ndr,
     325             :                       int ndr_flags,
     326             :                       struct security_acl *r)
     327             : {
     328           0 :     uint32_t size_aces_0 = 0;
     329             :     uint32_t cntr_aces_0;
     330             :     TALLOC_CTX *_mem_save_aces_0;
     331           0 :     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
     332           0 :     if (ndr_flags & NDR_SCALARS) {
     333           0 :         NDR_CHECK(ndr_pull_align(ndr, 4));
     334           0 :         NDR_CHECK(ndr_pull_security_acl_revision
     335             :                   (ndr, NDR_SCALARS, &r->revision));
     336           0 :         NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
     337           0 :         NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->num_aces));
     338           0 :         if (r->num_aces > 1000) {
     339           0 :             return ndr_pull_error(ndr, NDR_ERR_RANGE, "value out of range");
     340             :         }
     341           0 :         size_aces_0 = r->num_aces;
     342           0 :         NDR_PULL_ALLOC_N(ndr, r->aces, size_aces_0);
     343           0 :         _mem_save_aces_0 = NDR_PULL_GET_MEM_CTX(ndr);
     344           0 :         NDR_PULL_SET_MEM_CTX(ndr, r->aces, 0);
     345           0 :         for (cntr_aces_0 = 0; cntr_aces_0 < size_aces_0; cntr_aces_0++) {
     346           0 :             NDR_CHECK(ndr_pull_security_ace
     347             :                       (ndr, NDR_SCALARS, &r->aces[cntr_aces_0]));
     348             :         }
     349           0 :         NDR_PULL_SET_MEM_CTX(ndr, _mem_save_aces_0, 0);
     350           0 :         NDR_CHECK(ndr_pull_trailer_align(ndr, 4));
     351             :     }
     352           0 :     if (ndr_flags & NDR_BUFFERS) {
     353           0 :         size_aces_0 = r->num_aces;
     354           0 :         _mem_save_aces_0 = NDR_PULL_GET_MEM_CTX(ndr);
     355           0 :         NDR_PULL_SET_MEM_CTX(ndr, r->aces, 0);
     356           0 :         for (cntr_aces_0 = 0; cntr_aces_0 < size_aces_0; cntr_aces_0++) {
     357           0 :             NDR_CHECK(ndr_pull_security_ace
     358             :                       (ndr, NDR_BUFFERS, &r->aces[cntr_aces_0]));
     359             :         }
     360           0 :         NDR_PULL_SET_MEM_CTX(ndr, _mem_save_aces_0, 0);
     361             :     }
     362           0 :     return NDR_ERR_SUCCESS;
     363             : }
     364             : 
     365             : 
     366             : static enum ndr_err_code
     367           0 : ndr_pull_security_descriptor_revision(struct ndr_pull *ndr,
     368             :                                       int ndr_flags,
     369             :                                       enum security_descriptor_revision *r)
     370             : {
     371             :     uint8_t v;
     372           0 :     NDR_CHECK(ndr_pull_enum_uint8(ndr, ndr_flags, &v));
     373           0 :     *r = v;
     374           0 :     return NDR_ERR_SUCCESS;
     375             : }
     376             : 
     377             : 
     378             : 
     379             : static enum ndr_err_code
     380           0 : ndr_pull_security_descriptor_type(struct ndr_pull *ndr,
     381             :                                   int ndr_flags,
     382             :                                   uint16_t *r)
     383             : {
     384             :     uint16_t v;
     385           0 :     NDR_CHECK(ndr_pull_uint16(ndr, ndr_flags, &v));
     386           0 :     *r = v;
     387           0 :     return NDR_ERR_SUCCESS;
     388             : }
     389             : 
     390             : 
     391             : enum ndr_err_code
     392           0 : ad_gpo_ndr_pull_security_descriptor(struct ndr_pull *ndr,
     393             :                                     int ndr_flags,
     394             :                                     struct security_descriptor *r)
     395             : {
     396             :     uint32_t _ptr_owner_sid;
     397             :     TALLOC_CTX *_mem_save_owner_sid_0;
     398             :     uint32_t _ptr_group_sid;
     399             :     TALLOC_CTX *_mem_save_group_sid_0;
     400             :     uint32_t _ptr_sacl;
     401             :     TALLOC_CTX *_mem_save_sacl_0;
     402             :     uint32_t _ptr_dacl;
     403             :     TALLOC_CTX *_mem_save_dacl_0;
     404           0 :     uint32_t _flags_save_STRUCT = ndr->flags;
     405             :     uint32_t _relative_save_offset;
     406             : 
     407           0 :     ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN);
     408           0 :     NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
     409           0 :     if (ndr_flags & NDR_SCALARS) {
     410           0 :         NDR_CHECK(ndr_pull_align(ndr, 5));
     411           0 :         NDR_CHECK(ndr_pull_security_descriptor_revision(ndr,
     412             :                                                         NDR_SCALARS,
     413             :                                                         &r->revision));
     414           0 :         NDR_CHECK(ndr_pull_security_descriptor_type(ndr,
     415             :                                                     NDR_SCALARS,
     416             :                                                     &r->type));
     417           0 :         NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_owner_sid));
     418           0 :         if (_ptr_owner_sid) {
     419           0 :             NDR_PULL_ALLOC(ndr, r->owner_sid);
     420           0 :             NDR_CHECK(ndr_pull_relative_ptr1(ndr,
     421             :                                              r->owner_sid,
     422             :                                              _ptr_owner_sid));
     423             :         } else {
     424           0 :             r->owner_sid = NULL;
     425             :         }
     426           0 :         NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_group_sid));
     427           0 :         if (_ptr_group_sid) {
     428           0 :             NDR_PULL_ALLOC(ndr, r->group_sid);
     429           0 :             NDR_CHECK(ndr_pull_relative_ptr1(ndr,
     430             :                                              r->group_sid,
     431             :                                              _ptr_group_sid));
     432             :         } else {
     433           0 :             r->group_sid = NULL;
     434             :         }
     435           0 :         NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sacl));
     436           0 :         if (_ptr_sacl) {
     437           0 :             NDR_PULL_ALLOC(ndr, r->sacl);
     438           0 :             NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->sacl, _ptr_sacl));
     439             :         } else {
     440           0 :             r->sacl = NULL;
     441             :         }
     442           0 :         NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_dacl));
     443           0 :         if (_ptr_dacl) {
     444           0 :             NDR_PULL_ALLOC(ndr, r->dacl);
     445           0 :             NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->dacl, _ptr_dacl));
     446             :         } else {
     447           0 :             r->dacl = NULL;
     448             :         }
     449           0 :         NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
     450             :     }
     451           0 :     if (ndr_flags & NDR_BUFFERS) {
     452           0 :         if (r->owner_sid) {
     453           0 :             _relative_save_offset = ndr->offset;
     454           0 :             NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->owner_sid));
     455           0 :             _mem_save_owner_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
     456           0 :             NDR_PULL_SET_MEM_CTX(ndr, r->owner_sid, 0);
     457           0 :             NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->owner_sid));
     458           0 :             NDR_PULL_SET_MEM_CTX(ndr, _mem_save_owner_sid_0, 0);
     459           0 :             if (ndr->offset > ndr->relative_highest_offset) {
     460           0 :                 ndr->relative_highest_offset = ndr->offset;
     461             :             }
     462           0 :             ndr->offset = _relative_save_offset;
     463             :         }
     464           0 :         if (r->group_sid) {
     465           0 :             _relative_save_offset = ndr->offset;
     466           0 :             NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->group_sid));
     467           0 :             _mem_save_group_sid_0 = NDR_PULL_GET_MEM_CTX(ndr);
     468           0 :             NDR_PULL_SET_MEM_CTX(ndr, r->group_sid, 0);
     469           0 :             NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, r->group_sid));
     470           0 :             NDR_PULL_SET_MEM_CTX(ndr, _mem_save_group_sid_0, 0);
     471           0 :             if (ndr->offset > ndr->relative_highest_offset) {
     472           0 :                 ndr->relative_highest_offset = ndr->offset;
     473             :             }
     474           0 :             ndr->offset = _relative_save_offset;
     475             :         }
     476           0 :         if (r->sacl) {
     477           0 :             _relative_save_offset = ndr->offset;
     478           0 :             NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->sacl));
     479           0 :             _mem_save_sacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
     480           0 :             NDR_PULL_SET_MEM_CTX(ndr, r->sacl, 0);
     481           0 :             NDR_CHECK(ndr_pull_security_acl(ndr,
     482             :                                             NDR_SCALARS|NDR_BUFFERS,
     483             :                                             r->sacl));
     484           0 :             NDR_PULL_SET_MEM_CTX(ndr, _mem_save_sacl_0, 0);
     485           0 :             if (ndr->offset > ndr->relative_highest_offset) {
     486           0 :                 ndr->relative_highest_offset = ndr->offset;
     487             :             }
     488           0 :             ndr->offset = _relative_save_offset;
     489             :         }
     490           0 :         if (r->dacl) {
     491           0 :             _relative_save_offset = ndr->offset;
     492           0 :             NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->dacl));
     493           0 :             _mem_save_dacl_0 = NDR_PULL_GET_MEM_CTX(ndr);
     494           0 :             NDR_PULL_SET_MEM_CTX(ndr, r->dacl, 0);
     495           0 :             NDR_CHECK(ndr_pull_security_acl(ndr,
     496             :                                             NDR_SCALARS|NDR_BUFFERS,
     497             :                                             r->dacl));
     498           0 :             NDR_PULL_SET_MEM_CTX(ndr, _mem_save_dacl_0, 0);
     499           0 :             if (ndr->offset > ndr->relative_highest_offset) {
     500           0 :                 ndr->relative_highest_offset = ndr->offset;
     501             :             }
     502           0 :             ndr->offset = _relative_save_offset;
     503             :         }
     504             : 
     505           0 :         ndr->flags = _flags_save_STRUCT;
     506             :     }
     507           0 :     return NDR_ERR_SUCCESS;
     508             : }

Generated by: LCOV version 1.10