2 * Copyright (c) 1990 Regents of the University of Michigan.
5 * Redistribution and use in source and binary forms are permitted
6 * provided that this notice is preserved and that due credit is given
7 * to the University of Michigan at Ann Arbor. The name of the University
8 * may not be used to endorse or promote products derived from this
9 * software without specific prior written permission. This software
10 * is provided ``as is'' without express or implied warranty.
18 #include <ac/socket.h>
20 #include <quipu/ds_error.h>
21 #include <quipu/attrvalue.h>
22 #include <quipu/name.h>
23 #include <quipu/commonarg.h>
28 #include "common.h" /* get ldap_dn_print() */
31 print_error( struct DSError *e )
35 if ( (ps = ps_alloc( std_open )) == NULLPS ) {
36 fprintf( stderr, "error in ps_alloc\n" );
39 if ( std_setup( ps, stderr ) == NOTOK ) {
40 fprintf( stderr, "error in std_setup = %d", ps->ps_errno );
51 x500err2ldaperr( struct DSError *e, char **matched )
53 int ldaperr = LDAP_OTHER;
56 Debug( LDAP_DEBUG_TRACE, "x500err2ldaperr\n", 0, 0, 0 );
59 switch ( e->dse_type ) {
60 case DSE_ATTRIBUTEERROR:
61 #if ISODEPACKAGE == IC || ISODEPACKAGE == XT
62 switch ( e->ERR_ATTRIBUTE.DSE_at_plist->DSE_at_what ) {
64 switch ( e->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what ) {
66 case DSE_AT_NOSUCHATTRIBUTE:
67 ldaperr = LDAP_NO_SUCH_ATTRIBUTE;
69 case DSE_AT_INVALIDATTRIBUTESYNTAX:
70 ldaperr = LDAP_INVALID_SYNTAX;
72 case DSE_AT_UNDEFINEDATTRIBUTETYPE:
73 ldaperr = LDAP_UNDEFINED_TYPE;
75 case DSE_AT_INAPPROPRIATEMATCHING:
76 ldaperr = LDAP_INAPPROPRIATE_MATCHING;
78 case DSE_AT_CONSTRAINTVIOLATION:
79 ldaperr = LDAP_CONSTRAINT_VIOLATION;
81 case DSE_AT_TYPEORVALUEEXISTS:
82 ldaperr = LDAP_TYPE_OR_VALUE_EXISTS;
90 switch( e->ERR_NAME.DSE_na_problem ) {
91 case DSE_NA_NOSUCHOBJECT:
92 ldaperr = LDAP_NO_SUCH_OBJECT;
94 case DSE_NA_ALIASPROBLEM:
95 ldaperr = LDAP_ALIAS_PROBLEM;
97 case DSE_NA_INVALIDATTRIBUTESYNTAX:
98 ldaperr = LDAP_INVALID_SYNTAX;
100 case DSE_NA_ALIASDEREFERENCE:
101 ldaperr = LDAP_ALIAS_DEREF_PROBLEM;
107 if ( e->ERR_NAME.DSE_na_matched == NULLDN ) {
112 ps = ps_alloc( str_open );
113 str_setup( ps, NULLCP, 0, 0 );
115 ldap_dn_print( ps, e->ERR_NAME.DSE_na_matched, NULLDN, EDBOUT );
118 *matched = (char *) strdup( ps->ps_base );
120 ps->ps_ptr = ps->ps_base;
121 ps->ps_cnt = ps->ps_bufsiz;
124 case DSE_SERVICEERROR:
125 switch( e->ERR_SERVICE.DSE_sv_problem ) {
129 case DSE_SV_UNAVAILABLE:
130 ldaperr = LDAP_UNAVAILABLE;
132 case DSE_SV_UNWILLINGTOPERFORM:
133 ldaperr = LDAP_UNWILLING_TO_PERFORM;
135 case DSE_SV_TIMELIMITEXCEEDED:
136 ldaperr = LDAP_TIMELIMIT_EXCEEDED;
138 case DSE_SV_ADMINLIMITEXCEEDED:
139 ldaperr = LDAP_SIZELIMIT_EXCEEDED;
141 case DSE_SV_LOOPDETECT:
142 ldaperr = LDAP_LOOP_DETECT;
149 case DSE_SECURITYERROR:
150 switch( e->ERR_SECURITY.DSE_sc_problem ) {
151 case DSE_SC_AUTHENTICATION:
152 ldaperr = LDAP_INAPPROPRIATE_AUTH;
154 case DSE_SC_INVALIDCREDENTIALS:
155 ldaperr = LDAP_INVALID_CREDENTIALS;
157 case DSE_SC_ACCESSRIGHTS:
158 ldaperr = LDAP_INSUFFICIENT_ACCESS;
165 case DSE_UPDATEERROR:
166 switch( e->ERR_UPDATE.DSE_up_problem ) {
167 case DSE_UP_NAMINGVIOLATION:
168 ldaperr = LDAP_NAMING_VIOLATION;
170 case DSE_UP_OBJECTCLASSVIOLATION:
171 ldaperr = LDAP_OBJECT_CLASS_VIOLATION;
173 case DSE_UP_NOTONNONLEAF:
174 ldaperr = LDAP_NOT_ALLOWED_ON_NONLEAF;
176 case DSE_UP_NOTONRDN:
177 ldaperr = LDAP_NOT_ALLOWED_ON_RDN;
179 case DSE_UP_ALREADYEXISTS:
180 ldaperr = LDAP_ALREADY_EXISTS;
182 case DSE_UP_NOOBJECTCLASSMODS:
183 ldaperr = LDAP_NO_OBJECT_CLASS_MODS;