1998-08-09 08:43:13 +08:00
|
|
|
/*
|
|
|
|
* Copyright (c) 1990 Regents of the University of Michigan.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms are permitted
|
|
|
|
* provided that this notice is preserved and that due credit is given
|
|
|
|
* to the University of Michigan at Ann Arbor. The name of the University
|
|
|
|
* may not be used to endorse or promote products derived from this
|
|
|
|
* software without specific prior written permission. This software
|
|
|
|
* is provided ``as is'' without express or implied warranty.
|
|
|
|
*/
|
|
|
|
|
1998-10-25 09:41:42 +08:00
|
|
|
#include "portable.h"
|
|
|
|
|
1998-08-09 08:43:13 +08:00
|
|
|
#include <stdio.h>
|
1998-10-25 09:41:42 +08:00
|
|
|
|
|
|
|
#include <ac/ctype.h>
|
|
|
|
#include <ac/socket.h>
|
|
|
|
|
1998-08-09 08:43:13 +08:00
|
|
|
#include <quipu/ds_error.h>
|
|
|
|
#include <quipu/attrvalue.h>
|
|
|
|
#include <quipu/name.h>
|
|
|
|
#include <quipu/commonarg.h>
|
1998-10-25 09:41:42 +08:00
|
|
|
|
1998-08-09 08:43:13 +08:00
|
|
|
#include "lber.h"
|
|
|
|
#include "ldap.h"
|
1998-11-05 03:45:38 +08:00
|
|
|
#include "ldap_log.h"
|
Protoized, moved extern definitions to .h files, fixed related bugs.
Most function and variable definitions are now preceded by its extern
definition, for error checking. Retyped a number of functions, usually
to return void. Fixed a number of printf format errors.
API changes (in ldap/include):
Added avl_dup_ok, avl_prefixapply, removed ber_fatten (probably typo
for ber_flatten), retyped ldap_sort_strcasecmp, grew lutil.h.
A number of `extern' declarations are left (some added by protoize), to
be cleaned away later. Mostly strdup(), strcasecmp(), mktemp(), optind,
optarg, errno.
1998-11-16 06:40:11 +08:00
|
|
|
#include "common.h" /* get ldap_dn_print() */
|
1998-08-09 08:43:13 +08:00
|
|
|
|
|
|
|
void
|
|
|
|
print_error( struct DSError *e )
|
|
|
|
{
|
|
|
|
PS ps;
|
|
|
|
|
|
|
|
if ( (ps = ps_alloc( std_open )) == NULLPS ) {
|
|
|
|
fprintf( stderr, "error in ps_alloc\n" );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if ( std_setup( ps, stderr ) == NOTOK ) {
|
|
|
|
fprintf( stderr, "error in std_setup = %d", ps->ps_errno );
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ds_error( ps, e );
|
|
|
|
|
|
|
|
ps_flush( ps );
|
|
|
|
ps_free( ps );
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
x500err2ldaperr( struct DSError *e, char **matched )
|
|
|
|
{
|
|
|
|
int ldaperr = LDAP_OTHER;
|
|
|
|
static PS ps;
|
|
|
|
|
|
|
|
Debug( LDAP_DEBUG_TRACE, "x500err2ldaperr\n", 0, 0, 0 );
|
|
|
|
|
|
|
|
*matched = NULL;
|
|
|
|
switch ( e->dse_type ) {
|
|
|
|
case DSE_ATTRIBUTEERROR:
|
|
|
|
#if ISODEPACKAGE == IC || ISODEPACKAGE == XT
|
|
|
|
switch ( e->ERR_ATTRIBUTE.DSE_at_plist->DSE_at_what ) {
|
|
|
|
#else
|
|
|
|
switch ( e->ERR_ATTRIBUTE.DSE_at_plist.DSE_at_what ) {
|
|
|
|
#endif
|
|
|
|
case DSE_AT_NOSUCHATTRIBUTE:
|
|
|
|
ldaperr = LDAP_NO_SUCH_ATTRIBUTE;
|
|
|
|
break;
|
|
|
|
case DSE_AT_INVALIDATTRIBUTESYNTAX:
|
|
|
|
ldaperr = LDAP_INVALID_SYNTAX;
|
|
|
|
break;
|
|
|
|
case DSE_AT_UNDEFINEDATTRIBUTETYPE:
|
|
|
|
ldaperr = LDAP_UNDEFINED_TYPE;
|
|
|
|
break;
|
|
|
|
case DSE_AT_INAPPROPRIATEMATCHING:
|
|
|
|
ldaperr = LDAP_INAPPROPRIATE_MATCHING;
|
|
|
|
break;
|
|
|
|
case DSE_AT_CONSTRAINTVIOLATION:
|
|
|
|
ldaperr = LDAP_CONSTRAINT_VIOLATION;
|
|
|
|
break;
|
|
|
|
case DSE_AT_TYPEORVALUEEXISTS:
|
|
|
|
ldaperr = LDAP_TYPE_OR_VALUE_EXISTS;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DSE_NAMEERROR:
|
|
|
|
switch( e->ERR_NAME.DSE_na_problem ) {
|
|
|
|
case DSE_NA_NOSUCHOBJECT:
|
|
|
|
ldaperr = LDAP_NO_SUCH_OBJECT;
|
|
|
|
break;
|
|
|
|
case DSE_NA_ALIASPROBLEM:
|
|
|
|
ldaperr = LDAP_ALIAS_PROBLEM;
|
|
|
|
break;
|
|
|
|
case DSE_NA_INVALIDATTRIBUTESYNTAX:
|
|
|
|
ldaperr = LDAP_INVALID_SYNTAX;
|
|
|
|
break;
|
|
|
|
case DSE_NA_ALIASDEREFERENCE:
|
|
|
|
ldaperr = LDAP_ALIAS_DEREF_PROBLEM;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( e->ERR_NAME.DSE_na_matched == NULLDN ) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( ps == NULL ) {
|
|
|
|
ps = ps_alloc( str_open );
|
|
|
|
str_setup( ps, NULLCP, 0, 0 );
|
|
|
|
}
|
|
|
|
ldap_dn_print( ps, e->ERR_NAME.DSE_na_matched, NULLDN, EDBOUT );
|
|
|
|
*ps->ps_ptr = '\0';
|
|
|
|
|
|
|
|
*matched = (char *) strdup( ps->ps_base );
|
|
|
|
|
|
|
|
ps->ps_ptr = ps->ps_base;
|
|
|
|
ps->ps_cnt = ps->ps_bufsiz;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DSE_SERVICEERROR:
|
|
|
|
switch( e->ERR_SERVICE.DSE_sv_problem ) {
|
|
|
|
case DSE_SV_BUSY:
|
|
|
|
ldaperr = LDAP_BUSY;
|
|
|
|
break;
|
|
|
|
case DSE_SV_UNAVAILABLE:
|
|
|
|
ldaperr = LDAP_UNAVAILABLE;
|
|
|
|
break;
|
|
|
|
case DSE_SV_UNWILLINGTOPERFORM:
|
|
|
|
ldaperr = LDAP_UNWILLING_TO_PERFORM;
|
|
|
|
break;
|
|
|
|
case DSE_SV_TIMELIMITEXCEEDED:
|
|
|
|
ldaperr = LDAP_TIMELIMIT_EXCEEDED;
|
|
|
|
break;
|
|
|
|
case DSE_SV_ADMINLIMITEXCEEDED:
|
|
|
|
ldaperr = LDAP_SIZELIMIT_EXCEEDED;
|
|
|
|
break;
|
|
|
|
case DSE_SV_LOOPDETECT:
|
|
|
|
ldaperr = LDAP_LOOP_DETECT;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DSE_SECURITYERROR:
|
|
|
|
switch( e->ERR_SECURITY.DSE_sc_problem ) {
|
|
|
|
case DSE_SC_AUTHENTICATION:
|
|
|
|
ldaperr = LDAP_INAPPROPRIATE_AUTH;
|
|
|
|
break;
|
|
|
|
case DSE_SC_INVALIDCREDENTIALS:
|
|
|
|
ldaperr = LDAP_INVALID_CREDENTIALS;
|
|
|
|
break;
|
|
|
|
case DSE_SC_ACCESSRIGHTS:
|
|
|
|
ldaperr = LDAP_INSUFFICIENT_ACCESS;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DSE_UPDATEERROR:
|
|
|
|
switch( e->ERR_UPDATE.DSE_up_problem ) {
|
|
|
|
case DSE_UP_NAMINGVIOLATION:
|
|
|
|
ldaperr = LDAP_NAMING_VIOLATION;
|
|
|
|
break;
|
|
|
|
case DSE_UP_OBJECTCLASSVIOLATION:
|
|
|
|
ldaperr = LDAP_OBJECT_CLASS_VIOLATION;
|
|
|
|
break;
|
|
|
|
case DSE_UP_NOTONNONLEAF:
|
|
|
|
ldaperr = LDAP_NOT_ALLOWED_ON_NONLEAF;
|
|
|
|
break;
|
|
|
|
case DSE_UP_NOTONRDN:
|
|
|
|
ldaperr = LDAP_NOT_ALLOWED_ON_RDN;
|
|
|
|
break;
|
|
|
|
case DSE_UP_ALREADYEXISTS:
|
|
|
|
ldaperr = LDAP_ALREADY_EXISTS;
|
|
|
|
break;
|
|
|
|
case DSE_UP_NOOBJECTCLASSMODS:
|
|
|
|
ldaperr = LDAP_NO_OBJECT_CLASS_MODS;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return( ldaperr );
|
|
|
|
}
|