summaryrefslogtreecommitdiff
path: root/usr/src/cmd/ldap/common/ldapdelete.c
diff options
context:
space:
mode:
authorstevel@tonic-gate <none@none>2005-06-14 00:00:00 -0700
committerstevel@tonic-gate <none@none>2005-06-14 00:00:00 -0700
commit7c478bd95313f5f23a4c958a745db2134aa03244 (patch)
treec871e58545497667cbb4b0a4f2daf204743e1fe7 /usr/src/cmd/ldap/common/ldapdelete.c
downloadillumos-joyent-7c478bd95313f5f23a4c958a745db2134aa03244.tar.gz
OpenSolaris Launch
Diffstat (limited to 'usr/src/cmd/ldap/common/ldapdelete.c')
-rw-r--r--usr/src/cmd/ldap/common/ldapdelete.c236
1 files changed, 236 insertions, 0 deletions
diff --git a/usr/src/cmd/ldap/common/ldapdelete.c b/usr/src/cmd/ldap/common/ldapdelete.c
new file mode 100644
index 0000000000..cbbe56e2fb
--- /dev/null
+++ b/usr/src/cmd/ldap/common/ldapdelete.c
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+/*
+ * The contents of this file are subject to the Netscape Public
+ * License Version 1.1 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.mozilla.org/NPL/
+ *
+ * Software distributed under the License is distributed on an "AS
+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * rights and limitations under the License.
+ *
+ * The Original Code is Mozilla Communicator client code, released
+ * March 31, 1998.
+ *
+ * The Initial Developer of the Original Code is Netscape
+ * Communications Corporation. Portions created by Netscape are
+ * Copyright (C) 1998-1999 Netscape Communications Corporation. All
+ * Rights Reserved.
+ *
+ * Contributor(s):
+ */
+
+/* ldapdelete.c - simple program to delete an entry using LDAP */
+
+#include "ldaptool.h"
+#ifdef SOLARIS_LDAP_CMD
+#include <locale.h>
+#endif /* SOLARIS_LDAP_CMD */
+
+static int contoper;
+
+#ifdef later
+static int delbypasscmd, yestodelete;
+#endif
+
+#ifndef SOLARIS_LDAP_CMD
+#define gettext(s) s
+#endif
+
+
+static LDAP *ld;
+
+LDAPMessage *result, *e;
+char *my_filter = "(objectclass=*)";
+
+static int dodelete( LDAP *ld, char *dn, LDAPControl **serverctrls );
+static void options_callback( int option, char *optarg );
+
+static void
+usage( void )
+{
+ fprintf( stderr, gettext("usage: %s [options] [dn...]\n"), ldaptool_progname );
+ fprintf( stderr, gettext("options:\n") );
+ ldaptool_common_usage( 0 );
+ fprintf( stderr, gettext(" -a\t\tBy-pass confirmation question when deleting a branch\n") );
+ fprintf( stderr, gettext( " -c\t\tcontinuous mode (do not stop on errors)\n") );
+ fprintf( stderr, gettext( " -f file\tread DNs to delete from file (default: standard input)\n") );
+ exit( LDAP_PARAM_ERROR );
+}
+
+
+int
+main( int argc, char **argv )
+{
+ char buf[ 4096 ];
+ int rc, deref, optind;
+ LDAPControl *ldctrl;
+
+#ifdef notdef
+#ifdef HPUX11
+#ifndef __LP64__
+ _main( argc, argv);
+#endif /* __LP64_ */
+#endif /* HPUX11 */
+#endif
+
+#ifdef SOLARIS_LDAP_CMD
+ char *locale = setlocale(LC_ALL, "");
+ textdomain(TEXT_DOMAIN);
+#endif /* SOLARIS_LDAP_CMD */
+ contoper = 0;
+
+#ifdef later
+ delbypasscmd = 0;
+#endif
+
+ optind = ldaptool_process_args( argc, argv, "c", 0, options_callback );
+
+ if ( optind == -1 ) {
+ usage();
+ }
+
+ if ( ldaptool_fp == NULL && optind >= argc ) {
+ ldaptool_fp = stdin;
+ }
+
+ ld = ldaptool_ldap_init( 0 );
+
+ deref = LDAP_DEREF_NEVER; /* prudent, but probably unnecessary */
+ ldap_set_option( ld, LDAP_OPT_DEREF, &deref );
+
+ ldaptool_bind( ld );
+
+ if (( ldctrl = ldaptool_create_manage_dsait_control()) != NULL ) {
+ ldaptool_add_control_to_array( ldctrl, ldaptool_request_ctrls);
+ }
+
+ if ((ldctrl = ldaptool_create_proxyauth_control(ld)) !=NULL) {
+ ldaptool_add_control_to_array( ldctrl, ldaptool_request_ctrls);
+ }
+
+ if ( ldaptool_fp == NULL ) {
+ for ( ; optind < argc; ++optind ) {
+ char *conv;
+
+ conv = ldaptool_local2UTF8( argv[ optind ] );
+ rc = dodelete( ld, conv, ldaptool_request_ctrls );
+ if( conv != NULL ) {
+ free( conv );
+ }
+ }
+ } else {
+ rc = 0;
+ while ((rc == 0 || contoper) &&
+ fgets(buf, sizeof(buf), ldaptool_fp) != NULL) {
+ buf[ strlen( buf ) - 1 ] = '\0'; /* remove trailing newline */
+ if ( *buf != '\0' ) {
+ rc = dodelete( ld, buf, ldaptool_request_ctrls );
+ }
+ }
+ }
+
+ ldaptool_reset_control_array( ldaptool_request_ctrls );
+ ldaptool_cleanup( ld );
+ return( rc );
+}
+
+static void
+options_callback( int option, char *optarg )
+{
+ switch( option ) {
+ case 'c': /* continuous operation mode */
+ ++contoper;
+ break;
+ default:
+ usage();
+ }
+}
+
+static int
+dodelete( LDAP *ld, char *dn, LDAPControl **serverctrls )
+{
+ int rc;
+
+ if ( ldaptool_verbose ) {
+ printf( gettext("%sdeleting entry %s\n"), ldaptool_not ? "!" : "", dn );
+ }
+ if ( ldaptool_not ) {
+ rc = LDAP_SUCCESS;
+ } else if (( rc = ldaptool_delete_ext_s( ld, dn, serverctrls, NULL,
+ "ldap_delete" )) == LDAP_SUCCESS && ldaptool_verbose ) {
+ printf( gettext("entry removed\n") );
+ }
+
+ return( rc );
+}
+
+#ifdef later
+
+/* This code broke iDS.....it will have to be revisited */
+static int
+dodelete( LDAP *ld, char *dn, LDAPControl **serverctrls )
+{
+ int rc;
+ Head HeadNode;
+ Element *datalist;
+ char ch;
+
+ if ( ldaptool_verbose ) {
+ printf( gettext("%sdeleting entry %s\n"), ldaptool_not ? "!" : "", dn );
+ }
+ if ( ldaptool_not ) {
+ rc = LDAP_SUCCESS;
+ }
+ else { /* else 1 */
+ L_Init(&HeadNode);
+
+ if ( (rc = ldap_search_s( ld, dn, LDAP_SCOPE_SUBTREE, my_filter, NULL, 0, &result )) != LDAP_SUCCESS ) {
+ ldaptool_print_lderror( ld, "ldap_search", LDAPTOOL_CHECK4SSL_IF_APPROP );
+ }
+ else { /* else 2 */
+ for ( e = ldap_first_entry( ld, result ); e != NULL; e = ldap_next_entry( ld, e ) ) {
+ if ( ( dn = ldap_get_dn( ld, e ) ) != NULL ) {
+ datalist = (Element *)malloc(sizeof(Element));
+ datalist->data = dn;
+ L_Insert(datalist, &HeadNode);
+ }
+ }
+ if ( ((Head *)&HeadNode)->count > 1 ) {
+ yestodelete = 0;
+ if ( delbypasscmd == 0 ) {
+ printf( gettext("Are you sure you want to delete the entire branch rooted at %s? [no]\n"), (char *)((Element *)(((Head *)&HeadNode)->first))->data);
+ ch = getchar();
+ if ( (ch == 'Y') || (ch == 'y')) {
+ yestodelete = 1;
+ }
+ } else {
+ yestodelete = 1;
+ }
+ } else {
+ yestodelete = 1;
+ }
+ if ( yestodelete == 1 ) {
+ for ( datalist = ((Head *)&HeadNode)->last; datalist; datalist = datalist->left ) {
+ if (datalist) {
+ if ((rc = ldaptool_delete_ext_s( ld, (char *)datalist->data, serverctrls, NULL, "ldap_delete" )) == LDAP_SUCCESS && ldaptool_verbose ) {
+ printf( gettext("%s entry removed\n"), (char *)datalist->data );
+ }
+ L_Remove(datalist, (Head *)&HeadNode);
+ ldap_memfree(datalist->data);
+ free ( datalist );
+ }
+ }
+ } /* end if (yestodelete) */
+ } /* else 2 */
+ } /* else 1 */
+ return (rc);
+} /* function end bracket */
+#endif