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.
14 #include <quipu/ds_error.h>
15 #include <quipu/attrvalue.h>
16 #include <quipu/name.h>
17 #include <quipu/commonarg.h>
18 #include <sys/types.h>
19 #include <sys/socket.h>
25 print_error( struct DSError *e )
29 if ( (ps = ps_alloc( std_open )) == NULLPS ) {
30 fprintf( stderr, "error in ps_alloc\n" );
33 if ( std_setup( ps, stderr ) == NOTOK ) {
34 fprintf( stderr, "error in std_setup = %d", ps->ps_errno );
45 x500err2ldaperr( struct DSError *e, char **matched )
47 int ldaperr = LDAP_OTHER;
50 Debug( LDAP_DEBUG_TRACE, "x500err2ldaperr\n", 0, 0, 0 );
53 switch ( e->dse_type ) {
54 case DSE_ATTRIBUTEERROR:
55 #if ISODEPACKAGE == IC || ISODEPACKAGE == XT
56 switch ( e->ERR_ATTRIBUTE.DSE_at_plist->DSE_at_what ) {
58 switch ( e->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what ) {
60 case DSE_AT_NOSUCHATTRIBUTE:
61 ldaperr = LDAP_NO_SUCH_ATTRIBUTE;
63 case DSE_AT_INVALIDATTRIBUTESYNTAX:
64 ldaperr = LDAP_INVALID_SYNTAX;
66 case DSE_AT_UNDEFINEDATTRIBUTETYPE:
67 ldaperr = LDAP_UNDEFINED_TYPE;
69 case DSE_AT_INAPPROPRIATEMATCHING:
70 ldaperr = LDAP_INAPPROPRIATE_MATCHING;
72 case DSE_AT_CONSTRAINTVIOLATION:
73 ldaperr = LDAP_CONSTRAINT_VIOLATION;
75 case DSE_AT_TYPEORVALUEEXISTS:
76 ldaperr = LDAP_TYPE_OR_VALUE_EXISTS;
84 switch( e->ERR_NAME.DSE_na_problem ) {
85 case DSE_NA_NOSUCHOBJECT:
86 ldaperr = LDAP_NO_SUCH_OBJECT;
88 case DSE_NA_ALIASPROBLEM:
89 ldaperr = LDAP_ALIAS_PROBLEM;
91 case DSE_NA_INVALIDATTRIBUTESYNTAX:
92 ldaperr = LDAP_INVALID_SYNTAX;
94 case DSE_NA_ALIASDEREFERENCE:
95 ldaperr = LDAP_ALIAS_DEREF_PROBLEM;
101 if ( e->ERR_NAME.DSE_na_matched == NULLDN ) {
106 ps = ps_alloc( str_open );
107 str_setup( ps, NULLCP, 0, 0 );
109 ldap_dn_print( ps, e->ERR_NAME.DSE_na_matched, NULLDN, EDBOUT );
112 *matched = (char *) strdup( ps->ps_base );
114 ps->ps_ptr = ps->ps_base;
115 ps->ps_cnt = ps->ps_bufsiz;
118 case DSE_SERVICEERROR:
119 switch( e->ERR_SERVICE.DSE_sv_problem ) {
123 case DSE_SV_UNAVAILABLE:
124 ldaperr = LDAP_UNAVAILABLE;
126 case DSE_SV_UNWILLINGTOPERFORM:
127 ldaperr = LDAP_UNWILLING_TO_PERFORM;
129 case DSE_SV_TIMELIMITEXCEEDED:
130 ldaperr = LDAP_TIMELIMIT_EXCEEDED;
132 case DSE_SV_ADMINLIMITEXCEEDED:
133 ldaperr = LDAP_SIZELIMIT_EXCEEDED;
135 case DSE_SV_LOOPDETECT:
136 ldaperr = LDAP_LOOP_DETECT;
143 case DSE_SECURITYERROR:
144 switch( e->ERR_SECURITY.DSE_sc_problem ) {
145 case DSE_SC_AUTHENTICATION:
146 ldaperr = LDAP_INAPPROPRIATE_AUTH;
148 case DSE_SC_INVALIDCREDENTIALS:
149 ldaperr = LDAP_INVALID_CREDENTIALS;
151 case DSE_SC_ACCESSRIGHTS:
152 ldaperr = LDAP_INSUFFICIENT_ACCESS;
159 case DSE_UPDATEERROR:
160 switch( e->ERR_UPDATE.DSE_up_problem ) {
161 case DSE_UP_NAMINGVIOLATION:
162 ldaperr = LDAP_NAMING_VIOLATION;
164 case DSE_UP_OBJECTCLASSVIOLATION:
165 ldaperr = LDAP_OBJECT_CLASS_VIOLATION;
167 case DSE_UP_NOTONNONLEAF:
168 ldaperr = LDAP_NOT_ALLOWED_ON_NONLEAF;
170 case DSE_UP_NOTONRDN:
171 ldaperr = LDAP_NOT_ALLOWED_ON_RDN;
173 case DSE_UP_ALREADYEXISTS:
174 ldaperr = LDAP_ALREADY_EXISTS;
176 case DSE_UP_NOOBJECTCLASSMODS:
177 ldaperr = LDAP_NO_OBJECT_CLASS_MODS;