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>
29 print_error( struct DSError *e )
33 if ( (ps = ps_alloc( std_open )) == NULLPS ) {
34 fprintf( stderr, "error in ps_alloc\n" );
37 if ( std_setup( ps, stderr ) == NOTOK ) {
38 fprintf( stderr, "error in std_setup = %d", ps->ps_errno );
49 x500err2ldaperr( struct DSError *e, char **matched )
51 int ldaperr = LDAP_OTHER;
54 Debug( LDAP_DEBUG_TRACE, "x500err2ldaperr\n", 0, 0, 0 );
57 switch ( e->dse_type ) {
58 case DSE_ATTRIBUTEERROR:
59 #if ISODEPACKAGE == IC || ISODEPACKAGE == XT
60 switch ( e->ERR_ATTRIBUTE.DSE_at_plist->DSE_at_what ) {
62 switch ( e->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what ) {
64 case DSE_AT_NOSUCHATTRIBUTE:
65 ldaperr = LDAP_NO_SUCH_ATTRIBUTE;
67 case DSE_AT_INVALIDATTRIBUTESYNTAX:
68 ldaperr = LDAP_INVALID_SYNTAX;
70 case DSE_AT_UNDEFINEDATTRIBUTETYPE:
71 ldaperr = LDAP_UNDEFINED_TYPE;
73 case DSE_AT_INAPPROPRIATEMATCHING:
74 ldaperr = LDAP_INAPPROPRIATE_MATCHING;
76 case DSE_AT_CONSTRAINTVIOLATION:
77 ldaperr = LDAP_CONSTRAINT_VIOLATION;
79 case DSE_AT_TYPEORVALUEEXISTS:
80 ldaperr = LDAP_TYPE_OR_VALUE_EXISTS;
88 switch( e->ERR_NAME.DSE_na_problem ) {
89 case DSE_NA_NOSUCHOBJECT:
90 ldaperr = LDAP_NO_SUCH_OBJECT;
92 case DSE_NA_ALIASPROBLEM:
93 ldaperr = LDAP_ALIAS_PROBLEM;
95 case DSE_NA_INVALIDATTRIBUTESYNTAX:
96 ldaperr = LDAP_INVALID_SYNTAX;
98 case DSE_NA_ALIASDEREFERENCE:
99 ldaperr = LDAP_ALIAS_DEREF_PROBLEM;
105 if ( e->ERR_NAME.DSE_na_matched == NULLDN ) {
110 ps = ps_alloc( str_open );
111 str_setup( ps, NULLCP, 0, 0 );
113 ldap_dn_print( ps, e->ERR_NAME.DSE_na_matched, NULLDN, EDBOUT );
116 *matched = (char *) strdup( ps->ps_base );
118 ps->ps_ptr = ps->ps_base;
119 ps->ps_cnt = ps->ps_bufsiz;
122 case DSE_SERVICEERROR:
123 switch( e->ERR_SERVICE.DSE_sv_problem ) {
127 case DSE_SV_UNAVAILABLE:
128 ldaperr = LDAP_UNAVAILABLE;
130 case DSE_SV_UNWILLINGTOPERFORM:
131 ldaperr = LDAP_UNWILLING_TO_PERFORM;
133 case DSE_SV_TIMELIMITEXCEEDED:
134 ldaperr = LDAP_TIMELIMIT_EXCEEDED;
136 case DSE_SV_ADMINLIMITEXCEEDED:
137 ldaperr = LDAP_SIZELIMIT_EXCEEDED;
139 case DSE_SV_LOOPDETECT:
140 ldaperr = LDAP_LOOP_DETECT;
147 case DSE_SECURITYERROR:
148 switch( e->ERR_SECURITY.DSE_sc_problem ) {
149 case DSE_SC_AUTHENTICATION:
150 ldaperr = LDAP_INAPPROPRIATE_AUTH;
152 case DSE_SC_INVALIDCREDENTIALS:
153 ldaperr = LDAP_INVALID_CREDENTIALS;
155 case DSE_SC_ACCESSRIGHTS:
156 ldaperr = LDAP_INSUFFICIENT_ACCESS;
163 case DSE_UPDATEERROR:
164 switch( e->ERR_UPDATE.DSE_up_problem ) {
165 case DSE_UP_NAMINGVIOLATION:
166 ldaperr = LDAP_NAMING_VIOLATION;
168 case DSE_UP_OBJECTCLASSVIOLATION:
169 ldaperr = LDAP_OBJECT_CLASS_VIOLATION;
171 case DSE_UP_NOTONNONLEAF:
172 ldaperr = LDAP_NOT_ALLOWED_ON_NONLEAF;
174 case DSE_UP_NOTONRDN:
175 ldaperr = LDAP_NOT_ALLOWED_ON_RDN;
177 case DSE_UP_ALREADYEXISTS:
178 ldaperr = LDAP_ALREADY_EXISTS;
180 case DSE_UP_NOOBJECTCLASSMODS:
181 ldaperr = LDAP_NO_OBJECT_CLASS_MODS;