LCOV - code coverage report
Current view: top level - lib/util - util_ldb.c (source / functions) Hit Total Coverage
Test: coverage report for master 2f515e9b Lines: 31 35 88.6 %
Date: 2024-04-21 15:09:00 Functions: 3 3 100.0 %

          Line data    Source code
       1             : /*
       2             :    Unix SMB/CIFS implementation.
       3             : 
       4             :    common share info functions
       5             : 
       6             :    Copyright (C) Andrew Tridgell 2004
       7             :    Copyright (C) Tim Potter 2004
       8             : 
       9             :    This program is free software; you can redistribute it and/or modify
      10             :    it under the terms of the GNU General Public License as published by
      11             :    the Free Software Foundation; either version 3 of the License, or
      12             :    (at your option) any later version.
      13             : 
      14             :    This program is distributed in the hope that it will be useful,
      15             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      16             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17             :    GNU General Public License for more details.
      18             : 
      19             :    You should have received a copy of the GNU General Public License
      20             :    along with this program.  If not, see <http://www.gnu.org/licenses/>.
      21             : */
      22             : 
      23             : #include "replace.h"
      24             : #include <ldb.h>
      25             : #include "lib/util/util_ldb.h"
      26             : #include "lib/util/debug.h"
      27             : 
      28             : /*
      29             :  * search the LDB for the specified attributes - va_list variant
      30             :  */
      31     1620999 : int gendb_search_v(struct ldb_context *ldb,
      32             :                    TALLOC_CTX *mem_ctx,
      33             :                    struct ldb_dn *basedn,
      34             :                    struct ldb_message ***msgs,
      35             :                    const char * const *attrs,
      36             :                    const char *format,
      37             :                    va_list ap)
      38             : {
      39     1620999 :         enum ldb_scope scope = LDB_SCOPE_SUBTREE;
      40       56749 :         struct ldb_result *res;
      41     1620999 :         char *expr = NULL;
      42       56749 :         int ret;
      43             : 
      44     1620999 :         if (format) {
      45      667180 :                 expr = talloc_vasprintf(mem_ctx, format, ap);
      46      667180 :                 if (expr == NULL) {
      47           0 :                         return -1;
      48             :                 }
      49             :         } else {
      50      921326 :                 scope = LDB_SCOPE_BASE;
      51             :         }
      52             : 
      53     1620999 :         res = NULL;
      54             : 
      55     1653492 :         ret = ldb_search(ldb, mem_ctx, &res, basedn, scope, attrs,
      56             :                          expr?"%s":NULL, expr);
      57             : 
      58     1620999 :         if (ret == LDB_SUCCESS) {
      59     1620998 :                 DBG_DEBUG("%s %s -> %d\n",
      60             :                          basedn?ldb_dn_get_linearized(basedn):"NULL",
      61             :                          expr?expr:"NULL", res->count);
      62             : 
      63     1620998 :                 ret = res->count;
      64     1620998 :                 if (msgs != NULL) {
      65     1620998 :                         *msgs = talloc_steal(mem_ctx, res->msgs);
      66             :                 }
      67     1620998 :                 talloc_free(res);
      68           1 :         } else if (scope == LDB_SCOPE_BASE && ret == LDB_ERR_NO_SUCH_OBJECT) {
      69           1 :                 ret = 0;
      70           1 :                 if (msgs != NULL) *msgs = NULL;
      71             :         } else {
      72           0 :                 DBG_INFO("search failed: %s\n",
      73             :                          ldb_errstring(ldb));
      74           0 :                 ret = -1;
      75           0 :                 if (msgs != NULL) *msgs = NULL;
      76             :         }
      77             : 
      78     1620999 :         talloc_free(expr);
      79             : 
      80     1620999 :         return ret;
      81             : }
      82             : 
      83             : /*
      84             :  * search the LDB for the specified attributes - varargs variant
      85             :  */
      86      817449 : int gendb_search(struct ldb_context *ldb,
      87             :                  TALLOC_CTX *mem_ctx,
      88             :                  struct ldb_dn *basedn,
      89             :                  struct ldb_message ***res,
      90             :                  const char * const *attrs,
      91             :                  const char *format, ...)
      92             : {
      93       28675 :         va_list ap;
      94       28675 :         int count;
      95             : 
      96      817449 :         va_start(ap, format);
      97      817449 :         count = gendb_search_v(ldb, mem_ctx, basedn, res, attrs, format, ap);
      98      817449 :         va_end(ap);
      99             : 
     100      817449 :         return count;
     101             : }
     102             : 
     103             : /*
     104             :  * search the LDB for a specified record (by DN)
     105             :  */
     106      157075 : int gendb_search_dn(struct ldb_context *ldb,
     107             :                  TALLOC_CTX *mem_ctx,
     108             :                  struct ldb_dn *dn,
     109             :                  struct ldb_message ***res,
     110             :                  const char * const *attrs)
     111             : {
     112      157075 :         return gendb_search(ldb, mem_ctx, dn, res, attrs, NULL);
     113             : }
     114             : 

Generated by: LCOV version 1.14