• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/samba-3.5.8/source4/lib/ldb/tools/
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 "ldb.h"
35#include "tools/cmdline.h"
36
37static int ldb_delete_recursive(struct ldb_context *ldb, struct ldb_dn *dn)
38{
39	int ret, i, total=0;
40	const char *attrs[] = { NULL };
41	struct ldb_result *res;
42
43	ret = ldb_search(ldb, ldb, &res, dn, LDB_SCOPE_SUBTREE, attrs, "distinguishedName=*");
44	if (ret != LDB_SUCCESS) return -1;
45
46	for (i = 0; i < res->count; i++) {
47		if (ldb_delete(ldb, res->msgs[i]->dn) == 0) {
48			total++;
49		}
50	}
51
52	talloc_free(res);
53
54	if (total == 0) {
55		return -1;
56	}
57	printf("Deleted %d records\n", total);
58	return 0;
59}
60
61static void usage(void)
62{
63	printf("Usage: ldbdel <options> <DN...>\n");
64	printf("Deletes records from a ldb\n\n");
65	ldb_cmdline_help("ldbdel", stdout);
66	exit(1);
67}
68
69int main(int argc, const char **argv)
70{
71	struct ldb_context *ldb;
72	int ret = 0, i;
73	struct ldb_cmdline *options;
74
75	ldb = ldb_init(NULL, NULL);
76
77	options = ldb_cmdline_process(ldb, argc, argv, usage);
78
79	if (options->argc < 1) {
80		usage();
81		exit(1);
82	}
83
84	for (i=0;i<options->argc;i++) {
85		struct ldb_dn *dn;
86
87		dn = ldb_dn_new(ldb, ldb, options->argv[i]);
88		if ( ! ldb_dn_validate(dn)) {
89			printf("Invalid DN format\n");
90			exit(1);
91		}
92		if (options->recursive) {
93			ret = ldb_delete_recursive(ldb, dn);
94		} else {
95			ret = ldb_delete(ldb, dn);
96			if (ret == 0) {
97				printf("Deleted 1 record\n");
98			}
99		}
100		if (ret != 0) {
101			printf("delete of '%s' failed - %s\n",
102				ldb_dn_get_linearized(dn),
103				ldb_errstring(ldb));
104		}
105	}
106
107	talloc_free(ldb);
108
109	return ret;
110}
111