LCOV - code coverage report
Current view: top level - libcli/ldap - ldap_ndr.c (source / functions) Hit Total Coverage
Test: coverage report for master 70ed9daf Lines: 30 37 81.1 %
Date: 2024-01-11 09:59:51 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        3446 : 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        3446 :         SIVAL(buf, 0, value);
      37        3446 :         val.data = buf;
      38        3446 :         val.length = 4;
      39        3446 :         return ldb_binary_encode(mem_ctx, val);
      40             : }
      41             : 
      42             : /*
      43             :   encode a NDR dom_sid as a ldap filter element
      44             : */
      45      670805 : 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      670805 :         ndr_err = ndr_push_struct_blob(&blob, mem_ctx, sid,
      51             :                                        (ndr_push_flags_fn_t)ndr_push_dom_sid);
      52      670805 :         if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
      53           0 :                 return NULL;
      54             :         }
      55      670805 :         ret = ldb_binary_encode(mem_ctx, blob);
      56      670805 :         data_blob_free(&blob);
      57      670805 :         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 :         NTSTATUS status;
      69           0 :         char *ret;
      70          74 :         status = GUID_to_ndr_buf(guid, &buf);
      71          74 :         if (!NT_STATUS_IS_OK(status)) {
      72           0 :                 return NULL;
      73             :         }
      74          74 :         ret = ldb_binary_encode(mem_ctx, blob);
      75          74 :         return ret;
      76             : }
      77             : 
      78             : /*
      79             :   decode a NDR GUID from a ldap filter element
      80             : */
      81          20 : NTSTATUS ldap_decode_ndr_GUID(TALLOC_CTX *mem_ctx, struct ldb_val val, struct GUID *guid)
      82             : {
      83           0 :         DATA_BLOB blob;
      84           0 :         enum ndr_err_code ndr_err;
      85             : 
      86          20 :         blob.data = val.data;
      87          20 :         blob.length = val.length;
      88          20 :         ndr_err = ndr_pull_struct_blob(&blob, mem_ctx, guid,
      89             :                                        (ndr_pull_flags_fn_t)ndr_pull_GUID);
      90          20 :         talloc_free(val.data);
      91          20 :         if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
      92           0 :                 return ndr_map_error2ntstatus(ndr_err);
      93             :         }
      94          20 :         return NT_STATUS_OK;
      95             : }

Generated by: LCOV version 1.14