root/source3/lib/ldb/tools/ldbdel.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ldb_delete_recursive
  2. usage
  3. main

   1 /* 
   2    ldb database library
   3 
   4    Copyright (C) Andrew Tridgell  2004
   5 
   6      ** NOTE! The following LGPL license applies to the ldb
   7      ** library. This does NOT imply that all of Samba is released
   8      ** under the LGPL
   9    
  10    This library is free software; you can redistribute it and/or
  11    modify it under the terms of the GNU Lesser General Public
  12    License as published by the Free Software Foundation; either
  13    version 3 of the License, or (at your option) any later version.
  14 
  15    This library is distributed in the hope that it will be useful,
  16    but WITHOUT ANY WARRANTY; without even the implied warranty of
  17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  18    Lesser General Public License for more details.
  19 
  20    You should have received a copy of the GNU Lesser General Public
  21    License along with this library; if not, see <http://www.gnu.org/licenses/>.
  22 */
  23 
  24 /*
  25  *  Name: ldb
  26  *
  27  *  Component: ldbdel
  28  *
  29  *  Description: utility to delete records - modelled on ldapdelete
  30  *
  31  *  Author: Andrew Tridgell
  32  */
  33 
  34 #include "includes.h"
  35 #include "ldb/include/includes.h"
  36 #include "ldb/tools/cmdline.h"
  37 
  38 static int ldb_delete_recursive(struct ldb_context *ldb, struct ldb_dn *dn)
     /* [<][>][^][v][top][bottom][index][help] */
  39 {
  40         int ret, i, total=0;
  41         const char *attrs[] = { NULL };
  42         struct ldb_result *res;
  43         
  44         ret = ldb_search(ldb, ldb, &res, dn, LDB_SCOPE_SUBTREE, attrs, "distinguishedName=*");
  45         if (ret != LDB_SUCCESS) return -1;
  46 
  47         for (i = 0; i < res->count; i++) {
  48                 if (ldb_delete(ldb, res->msgs[i]->dn) == 0) {
  49                         total++;
  50                 }
  51         }
  52 
  53         talloc_free(res);
  54 
  55         if (total == 0) {
  56                 return -1;
  57         }
  58         printf("Deleted %d records\n", total);
  59         return 0;
  60 }
  61 
  62 static void usage(void)
     /* [<][>][^][v][top][bottom][index][help] */
  63 {
  64         printf("Usage: ldbdel <options> <DN...>\n");
  65         printf("Options:\n");
  66         printf("  -r               recursively delete the given subtree\n");
  67         printf("  -H ldb_url       choose the database (or $LDB_URL)\n");
  68         printf("  -o options       pass options like modules to activate\n");
  69         printf("              e.g: -o modules:timestamps\n");
  70         printf("\n");
  71         printf("Deletes records from a ldb\n\n");
  72         exit(1);
  73 }
  74 
  75 int main(int argc, const char **argv)
     /* [<][>][^][v][top][bottom][index][help] */
  76 {
  77         struct ldb_context *ldb;
  78         int ret = 0, i;
  79         struct ldb_cmdline *options;
  80 
  81         ldb_global_init();
  82 
  83         ldb = ldb_init(NULL);
  84 
  85         options = ldb_cmdline_process(ldb, argc, argv, usage);
  86 
  87         if (options->argc < 1) {
  88                 usage();
  89                 exit(1);
  90         }
  91 
  92         for (i=0;i<options->argc;i++) {
  93                 struct ldb_dn *dn;
  94 
  95                 dn = ldb_dn_explode(ldb, options->argv[i]);
  96                 if (dn == NULL) {
  97                         printf("Invalid DN format\n");
  98                         exit(1);
  99                 }
 100                 if (options->recursive) {
 101                         ret = ldb_delete_recursive(ldb, dn);
 102                 } else {
 103                         ret = ldb_delete(ldb, dn);
 104                         if (ret == 0) {
 105                                 printf("Deleted 1 record\n");
 106                         }
 107                 }
 108                 if (ret != 0) {
 109                         printf("delete of '%s' failed - %s\n",
 110                                 ldb_dn_linearize(ldb, dn),
 111                                 ldb_errstring(ldb));
 112                 }
 113         }
 114 
 115         talloc_free(ldb);
 116 
 117         return ret;
 118 }

/* [<][>][^][v][top][bottom][index][help] */