1/*	$NetBSD$	*/
2
3/* OpenLDAP: pkg/ldap/servers/slapd/slapdn.c,v 1.8.2.5 2010/04/13 20:23:21 kurt Exp */
4/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 *
6 * Copyright 2004-2010 The OpenLDAP Foundation.
7 * Portions Copyright 2004 Pierangelo Masarati.
8 * All rights reserved.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted only as authorized by the OpenLDAP
12 * Public License.
13 *
14 * A copy of this license is available in file LICENSE in the
15 * top-level directory of the distribution or, alternatively, at
16 * <http://www.OpenLDAP.org/license.html>.
17 */
18/* ACKNOWLEDGEMENTS:
19 * This work was initially developed by Pierangelo Masarati for inclusion
20 * in OpenLDAP Software.
21 */
22
23#include "portable.h"
24
25#include <stdio.h>
26
27#include <ac/stdlib.h>
28
29#include <ac/ctype.h>
30#include <ac/string.h>
31#include <ac/socket.h>
32#include <ac/unistd.h>
33
34#include <lber.h>
35#include <ldif.h>
36#include <lutil.h>
37
38#include "slapcommon.h"
39
40int
41slapdn( int argc, char **argv )
42{
43	int			rc = 0;
44	const char		*progname = "slapdn";
45
46	slap_tool_init( progname, SLAPDN, argc, argv );
47
48	argv = &argv[ optind ];
49	argc -= optind;
50
51	for ( ; argc--; argv++ ) {
52		struct berval	dn,
53				pdn = BER_BVNULL,
54				ndn = BER_BVNULL;
55
56		ber_str2bv( argv[ 0 ], 0, 0, &dn );
57
58		switch ( dn_mode ) {
59		case SLAP_TOOL_LDAPDN_PRETTY:
60			rc = dnPretty( NULL, &dn, &pdn, NULL );
61			break;
62
63		case SLAP_TOOL_LDAPDN_NORMAL:
64			rc = dnNormalize( 0, NULL, NULL, &dn, &ndn, NULL );
65			break;
66
67		default:
68			rc = dnPrettyNormal( NULL, &dn, &pdn, &ndn, NULL );
69			break;
70		}
71
72		if ( rc != LDAP_SUCCESS ) {
73			fprintf( stderr, "DN: <%s> check failed %d (%s)\n",
74					dn.bv_val, rc,
75					ldap_err2string( rc ) );
76			if ( !continuemode ) {
77				rc = -1;
78				break;
79			}
80
81		} else {
82			switch ( dn_mode ) {
83			case SLAP_TOOL_LDAPDN_PRETTY:
84				printf( "%s\n", pdn.bv_val );
85				break;
86
87			case SLAP_TOOL_LDAPDN_NORMAL:
88				printf( "%s\n", ndn.bv_val );
89				break;
90
91			default:
92				printf( "DN: <%s> check succeeded\n"
93						"normalized: <%s>\n"
94						"pretty:     <%s>\n",
95						dn.bv_val,
96						ndn.bv_val, pdn.bv_val );
97				break;
98			}
99
100			ch_free( ndn.bv_val );
101			ch_free( pdn.bv_val );
102		}
103	}
104
105	if ( slap_tool_destroy())
106		rc = EXIT_FAILURE;
107
108	return rc;
109}
110