3 * Copyright (c) 1990 Regents of the University of Michigan.
6 * Redistribution and use in source and binary forms are permitted
7 * provided that this notice is preserved and that due credit is given
8 * to the University of Michigan at Ann Arbor. The name of the University
9 * may not be used to endorse or promote products derived from this
10 * software without specific prior written permission. This software
11 * is provided ``as is'' without express or implied warranty.
19 #include <ac/socket.h>
21 #include <quipu/ds_error.h>
22 #include <quipu/attrvalue.h>
23 #include <quipu/name.h>
24 #include <quipu/commonarg.h>
29 #include "common.h" /* get ldap_dn_print() */
32 print_error( struct DSError *e )
36 if ( (ps = ps_alloc( std_open )) == NULLPS ) {
37 fprintf( stderr, "error in ps_alloc\n" );
40 if ( std_setup( ps, stderr ) == NOTOK ) {
41 fprintf( stderr, "error in std_setup = %d", ps->ps_errno );
52 x500err2ldaperr( struct DSError *e, char **matched )
54 int ldaperr = LDAP_OTHER;
57 Debug( LDAP_DEBUG_TRACE, "x500err2ldaperr\n", 0, 0, 0 );
60 switch ( e->dse_type ) {
61 case DSE_ATTRIBUTEERROR:
62 #if ISODEPACKAGE == IC || ISODEPACKAGE == XT
63 switch ( e->ERR_ATTRIBUTE.DSE_at_plist->DSE_at_what ) {
65 switch ( e->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what ) {
67 case DSE_AT_NOSUCHATTRIBUTE:
68 ldaperr = LDAP_NO_SUCH_ATTRIBUTE;
70 case DSE_AT_INVALIDATTRIBUTESYNTAX:
71 ldaperr = LDAP_INVALID_SYNTAX;
73 case DSE_AT_UNDEFINEDATTRIBUTETYPE:
74 ldaperr = LDAP_UNDEFINED_TYPE;
76 case DSE_AT_INAPPROPRIATEMATCHING:
77 ldaperr = LDAP_INAPPROPRIATE_MATCHING;
79 case DSE_AT_CONSTRAINTVIOLATION:
80 ldaperr = LDAP_CONSTRAINT_VIOLATION;
82 case DSE_AT_TYPEORVALUEEXISTS:
83 ldaperr = LDAP_TYPE_OR_VALUE_EXISTS;
91 switch( e->ERR_NAME.DSE_na_problem ) {
92 case DSE_NA_NOSUCHOBJECT:
93 ldaperr = LDAP_NO_SUCH_OBJECT;
95 case DSE_NA_ALIASPROBLEM:
96 ldaperr = LDAP_ALIAS_PROBLEM;
98 case DSE_NA_INVALIDATTRIBUTESYNTAX:
99 ldaperr = LDAP_INVALID_SYNTAX;
101 case DSE_NA_ALIASDEREFERENCE:
102 ldaperr = LDAP_ALIAS_DEREF_PROBLEM;
108 if ( e->ERR_NAME.DSE_na_matched == NULLDN ) {
113 ps = ps_alloc( str_open );
114 str_setup( ps, NULLCP, 0, 0 );
116 ldap_dn_print( ps, e->ERR_NAME.DSE_na_matched, NULLDN, EDBOUT );
119 *matched = (char *) strdup( ps->ps_base );
121 ps->ps_ptr = ps->ps_base;
122 ps->ps_cnt = ps->ps_bufsiz;
125 case DSE_SERVICEERROR:
126 switch( e->ERR_SERVICE.DSE_sv_problem ) {
130 case DSE_SV_UNAVAILABLE:
131 ldaperr = LDAP_UNAVAILABLE;
133 case DSE_SV_UNWILLINGTOPERFORM:
134 ldaperr = LDAP_UNWILLING_TO_PERFORM;
136 case DSE_SV_TIMELIMITEXCEEDED:
137 ldaperr = LDAP_TIMELIMIT_EXCEEDED;
139 case DSE_SV_ADMINLIMITEXCEEDED:
140 ldaperr = LDAP_SIZELIMIT_EXCEEDED;
142 case DSE_SV_LOOPDETECT:
143 ldaperr = LDAP_LOOP_DETECT;
150 case DSE_SECURITYERROR:
151 switch( e->ERR_SECURITY.DSE_sc_problem ) {
152 case DSE_SC_AUTHENTICATION:
153 ldaperr = LDAP_INAPPROPRIATE_AUTH;
155 case DSE_SC_INVALIDCREDENTIALS:
156 ldaperr = LDAP_INVALID_CREDENTIALS;
158 case DSE_SC_ACCESSRIGHTS:
159 ldaperr = LDAP_INSUFFICIENT_ACCESS;
166 case DSE_UPDATEERROR:
167 switch( e->ERR_UPDATE.DSE_up_problem ) {
168 case DSE_UP_NAMINGVIOLATION:
169 ldaperr = LDAP_NAMING_VIOLATION;
171 case DSE_UP_OBJECTCLASSVIOLATION:
172 ldaperr = LDAP_OBJECT_CLASS_VIOLATION;
174 case DSE_UP_NOTONNONLEAF:
175 ldaperr = LDAP_NOT_ALLOWED_ON_NONLEAF;
177 case DSE_UP_NOTONRDN:
178 ldaperr = LDAP_NOT_ALLOWED_ON_RDN;
180 case DSE_UP_ALREADYEXISTS:
181 ldaperr = LDAP_ALREADY_EXISTS;
183 case DSE_UP_NOOBJECTCLASSMODS:
184 ldaperr = LDAP_NO_OBJECT_CLASS_MODS;