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