X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fslapadd.c;h=11cf55f371a93a12a7b458070c4d9120079a2421;hb=72d2ee4d19ee76e7d81d402c4056ce665f797045;hp=6785c3e8ff3ad240040834201b698ce2986078c6;hpb=f5dd01773873863c4f7d4353c481c9ec06f43a93;p=openldap diff --git a/servers/slapd/slapadd.c b/servers/slapd/slapadd.c index 6785c3e8ff..11cf55f371 100644 --- a/servers/slapd/slapadd.c +++ b/servers/slapd/slapadd.c @@ -1,7 +1,7 @@ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . * - * Copyright 1998-2005 The OpenLDAP Foundation. + * Copyright 1998-2006 The OpenLDAP Foundation. * Portions Copyright 1998-2003 Kurt D. Zeilenga. * Portions Copyright 2003 IBM Corporation. * All rights reserved. @@ -44,31 +44,41 @@ static char maxcsnbuf[ LDAP_LUTIL_CSNSTR_BUFSIZE ]; int slapadd( int argc, char **argv ) { - char *buf = NULL; - int lineno; - int lmax; - int rc = EXIT_SUCCESS; - + char *buf = NULL; const char *text; char textbuf[SLAP_TEXT_BUFLEN] = { '\0' }; size_t textlen = sizeof textbuf; const char *progname = "slapadd"; - int manage = 0; struct berval csn; struct berval maxcsn; - int match; + struct berval bvtext; Attribute *attr; Entry *ctxcsn_e; ID ctxcsn_id, id; + OperationBuffer opbuf; + Operation *op; + + int match; int ret; - struct berval bvtext; int checkvals; + int lineno; + int lmax; + int rc = EXIT_SUCCESS; + int manage = 0; + slap_tool_init( progname, SLAPADD, argc, argv ); + memset( &opbuf, 0, sizeof(opbuf) ); + op = (Operation *) &opbuf; + if( !be->be_entry_open || !be->be_entry_close || - !be->be_entry_put ) + !be->be_entry_put || + (update_ctxcsn && + (!be->be_dn2id_get || + !be->be_id2entry_get || + !be->be_entry_modify)) ) { fprintf( stderr, "%s: database doesn't support necessary operations.\n", progname ); @@ -181,16 +191,20 @@ slapadd( int argc, char **argv ) } /* check schema */ - rc = entry_schema_check( be, e, NULL, manage, - &text, textbuf, textlen ); + op->o_bd = be; - if( rc != LDAP_SUCCESS ) { - fprintf( stderr, "%s: dn=\"%s\" (line=%d): (%d) %s\n", - progname, e->e_dn, lineno, rc, text ); - rc = EXIT_FAILURE; - entry_free( e ); - if( continuemode ) continue; - break; + if ( (slapMode & SLAP_TOOL_NO_SCHEMA_CHECK) == 0) { + rc = entry_schema_check( op, e, NULL, manage, + &text, textbuf, textlen ); + + if( rc != LDAP_SUCCESS ) { + fprintf( stderr, "%s: dn=\"%s\" (line=%d): (%d) %s\n", + progname, e->e_dn, lineno, rc, text ); + rc = EXIT_FAILURE; + entry_free( e ); + if( continuemode ) continue; + break; + } } }