]> git.sur5r.net Git - openldap/blob - servers/ldapd/error.c
ITS#2762: header include fix
[openldap] / servers / ldapd / error.c
1 /*
2  * Copyright (c) 1990 Regents of the University of Michigan.
3  * All rights reserved.
4  *
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.
11  */
12
13 #include <stdio.h>
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>
20 #include <ctype.h>
21 #include "lber.h"
22 #include "ldap.h"
23
24 void
25 print_error( struct DSError *e )
26 {
27         PS      ps;
28
29         if ( (ps = ps_alloc( std_open )) == NULLPS ) {
30                 fprintf( stderr, "error in ps_alloc\n" );
31                 return;
32         }
33         if ( std_setup( ps, stderr ) == NOTOK ) {
34                 fprintf( stderr, "error in std_setup = %d", ps->ps_errno );
35                 return;
36         }
37
38         ds_error( ps, e );
39
40         ps_flush( ps );
41         ps_free( ps );
42 }
43
44 int
45 x500err2ldaperr( struct DSError *e, char **matched )
46 {
47         int             ldaperr = LDAP_OTHER;
48         static PS       ps;
49
50         Debug( LDAP_DEBUG_TRACE, "x500err2ldaperr\n", 0, 0, 0 );
51
52         *matched = NULL;
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 ) {
57 #else
58                 switch ( e->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what ) {
59 #endif
60                 case DSE_AT_NOSUCHATTRIBUTE:
61                         ldaperr = LDAP_NO_SUCH_ATTRIBUTE;
62                         break;
63                 case DSE_AT_INVALIDATTRIBUTESYNTAX:
64                         ldaperr = LDAP_INVALID_SYNTAX;
65                         break;
66                 case DSE_AT_UNDEFINEDATTRIBUTETYPE:
67                         ldaperr = LDAP_UNDEFINED_TYPE;
68                         break;
69                 case DSE_AT_INAPPROPRIATEMATCHING:
70                         ldaperr = LDAP_INAPPROPRIATE_MATCHING;
71                         break;
72                 case DSE_AT_CONSTRAINTVIOLATION:
73                         ldaperr = LDAP_CONSTRAINT_VIOLATION;
74                         break;
75                 case DSE_AT_TYPEORVALUEEXISTS:
76                         ldaperr = LDAP_TYPE_OR_VALUE_EXISTS;
77                         break;
78                 default:
79                         break;
80                 }
81                 break;
82
83         case DSE_NAMEERROR:
84                 switch( e->ERR_NAME.DSE_na_problem ) {
85                 case DSE_NA_NOSUCHOBJECT:
86                         ldaperr = LDAP_NO_SUCH_OBJECT;
87                         break;
88                 case DSE_NA_ALIASPROBLEM:
89                         ldaperr = LDAP_ALIAS_PROBLEM;
90                         break;
91                 case DSE_NA_INVALIDATTRIBUTESYNTAX:
92                         ldaperr = LDAP_INVALID_SYNTAX;
93                         break;
94                 case DSE_NA_ALIASDEREFERENCE:
95                         ldaperr = LDAP_ALIAS_DEREF_PROBLEM;
96                         break;
97                 default:
98                         break;
99                 }
100
101                 if ( e->ERR_NAME.DSE_na_matched == NULLDN ) {
102                         break;
103                 }
104
105                 if ( ps == NULL ) {
106                         ps = ps_alloc( str_open );
107                         str_setup( ps, NULLCP, 0, 0 );
108                 }
109                 ldap_dn_print( ps, e->ERR_NAME.DSE_na_matched, NULLDN, EDBOUT );
110                 *ps->ps_ptr = '\0';
111
112                 *matched = (char *) strdup( ps->ps_base );
113
114                 ps->ps_ptr = ps->ps_base;
115                 ps->ps_cnt = ps->ps_bufsiz;
116                 break;
117
118         case DSE_SERVICEERROR:
119                 switch( e->ERR_SERVICE.DSE_sv_problem ) {
120                 case DSE_SV_BUSY:
121                         ldaperr = LDAP_BUSY;
122                         break;
123                 case DSE_SV_UNAVAILABLE:
124                         ldaperr = LDAP_UNAVAILABLE;
125                         break;
126                 case DSE_SV_UNWILLINGTOPERFORM:
127                         ldaperr = LDAP_UNWILLING_TO_PERFORM;
128                         break;
129                 case DSE_SV_TIMELIMITEXCEEDED:
130                         ldaperr = LDAP_TIMELIMIT_EXCEEDED;
131                         break;
132                 case DSE_SV_ADMINLIMITEXCEEDED:
133                         ldaperr = LDAP_SIZELIMIT_EXCEEDED;
134                         break;
135                 case DSE_SV_LOOPDETECT:
136                         ldaperr = LDAP_LOOP_DETECT;
137                         break;
138                 default:
139                         break;
140                 }
141                 break;
142
143         case DSE_SECURITYERROR:
144                 switch( e->ERR_SECURITY.DSE_sc_problem ) {
145                 case DSE_SC_AUTHENTICATION:
146                         ldaperr = LDAP_INAPPROPRIATE_AUTH;
147                         break;
148                 case DSE_SC_INVALIDCREDENTIALS:
149                         ldaperr = LDAP_INVALID_CREDENTIALS;
150                         break;
151                 case DSE_SC_ACCESSRIGHTS:
152                         ldaperr = LDAP_INSUFFICIENT_ACCESS;
153                         break;
154                 default:
155                         break;
156                 }
157                 break;
158
159         case DSE_UPDATEERROR:
160                 switch( e->ERR_UPDATE.DSE_up_problem ) {
161                 case DSE_UP_NAMINGVIOLATION:
162                         ldaperr = LDAP_NAMING_VIOLATION;
163                         break;
164                 case DSE_UP_OBJECTCLASSVIOLATION:
165                         ldaperr = LDAP_OBJECT_CLASS_VIOLATION;
166                         break;
167                 case DSE_UP_NOTONNONLEAF:
168                         ldaperr = LDAP_NOT_ALLOWED_ON_NONLEAF;
169                         break;
170                 case DSE_UP_NOTONRDN:
171                         ldaperr = LDAP_NOT_ALLOWED_ON_RDN;
172                         break;
173                 case DSE_UP_ALREADYEXISTS:
174                         ldaperr = LDAP_ALREADY_EXISTS;
175                         break;
176                 case DSE_UP_NOOBJECTCLASSMODS:
177                         ldaperr = LDAP_NO_OBJECT_CLASS_MODS;
178                         break;
179                 default:
180                         break;
181                 }
182                 break;
183
184         default:
185                 break;
186         }
187
188         return( ldaperr );
189 }