LCOV - code coverage report
Current view: top level - libcli/ldap - ldap_ndr.c (source / functions) Hit Total Coverage
Test: coverage report for master 2f515e9b Lines: 29 34 85.3 %
Date: 2024-04-21 15:09:00 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /* 
       2             :    Unix SMB/CIFS implementation.
       3             : 
       4             :    wrap/unwrap NDR encoded elements for ldap calls
       5             :    
       6             :    Copyright (C) Andrew Tridgell  2005
       7             :     
       8             :    This program is free software; you can redistribute it and/or modify
       9             :    it under the terms of the GNU General Public License as published by
      10             :    the Free Software Foundation; either version 3 of the License, or
      11             :    (at your option) any later version.
      12             :    
      13             :    This program is distributed in the hope that it will be useful,
      14             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      15             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      16             :    GNU General Public License for more details.
      17             :    
      18             :    You should have received a copy of the GNU General Public License
      19             :    along with this program.  If not, see <http://www.gnu.org/licenses/>.
      20             :    
      21             : */
      22             : 
      23             : #include "includes.h"
      24             : #include <ldb.h>
      25             : #include "librpc/gen_ndr/ndr_security.h"
      26             : #include "librpc/gen_ndr/ndr_misc.h"
      27             : #include "libcli/ldap/ldap_ndr.h"
      28             : 
      29             : /*
      30             :   encode a NDR uint32 as a ldap filter element
      31             : */
      32        3584 : char *ldap_encode_ndr_uint32(TALLOC_CTX *mem_ctx, uint32_t value)
      33             : {
      34          36 :         uint8_t buf[4];
      35          36 :         struct ldb_val val;
      36        3584 :         SIVAL(buf, 0, value);
      37        3584 :         val.data = buf;
      38        3584 :         val.length = 4;
      39        3584 :         return ldb_binary_encode(mem_ctx, val);
      40             : }
      41             : 
      42             : /*
      43             :   encode a NDR dom_sid as a ldap filter element
      44             : */
      45      672173 : char *ldap_encode_ndr_dom_sid(TALLOC_CTX *mem_ctx, const struct dom_sid *sid)
      46             : {
      47       22409 :         DATA_BLOB blob;
      48       22409 :         enum ndr_err_code ndr_err;
      49       22409 :         char *ret;
      50      672173 :         ndr_err = ndr_push_struct_blob(&blob, mem_ctx, sid,
      51             :                                        (ndr_push_flags_fn_t)ndr_push_dom_sid);
      52      672173 :         if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
      53           0 :                 return NULL;
      54             :         }
      55      672173 :         ret = ldb_binary_encode(mem_ctx, blob);
      56      672173 :         data_blob_free(&blob);
      57      672173 :         return ret;
      58             : }
      59             : 
      60             : 
      61             : /*
      62             :   encode a NDR GUID as a ldap filter element
      63             : */
      64          74 : char *ldap_encode_ndr_GUID(TALLOC_CTX *mem_ctx, const struct GUID *guid)
      65             : {
      66          74 :         struct GUID_ndr_buf buf = { .buf = {0}, };
      67          74 :         DATA_BLOB blob = { .data = buf.buf, .length = sizeof(buf.buf), };
      68           0 :         char *ret;
      69          74 :         GUID_to_ndr_buf(guid, &buf);
      70          74 :         ret = ldb_binary_encode(mem_ctx, blob);
      71          74 :         return ret;
      72             : }
      73             : 
      74             : /*
      75             :   decode a NDR GUID from a ldap filter element
      76             : */
      77          20 : NTSTATUS ldap_decode_ndr_GUID(TALLOC_CTX *mem_ctx, struct ldb_val val, struct GUID *guid)
      78             : {
      79           0 :         DATA_BLOB blob;
      80           0 :         enum ndr_err_code ndr_err;
      81             : 
      82          20 :         blob.data = val.data;
      83          20 :         blob.length = val.length;
      84          20 :         ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, guid,
      85             :                                        (ndr_pull_flags_fn_t)ndr_pull_GUID);
      86          20 :         talloc_free(val.data);
      87          20 :         if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
      88           0 :                 return ndr_map_error2ntstatus(ndr_err);
      89             :         }
      90          20 :         return NT_STATUS_OK;
      91             : }

Generated by: LCOV version 1.14