Commit bd5c9628 authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

Lastmod attributes

parent a7768961
......@@ -34,7 +34,7 @@ PROGRAMS=slapadd slapcat slapindex slappasswd
SRCS = mimic.c slapcommon.c \
slapadd.c slapcat.c slapindex.c slappasswd.c
SLAPD_OBJS = ../config.o ../ch_malloc.o ../backend.o ../charray.o \
SLAPD_OBJS = ../config.o ../ch_malloc.o ../backend.o \
../module.o ../aclparse.o ../filterentry.o ../schema.o \
../schema_check.o ../schema_init.o ../schema_prep.o \
../schemaparse.o ../ad.o ../at.o ../mr.o ../oc.o \
......
......@@ -16,6 +16,7 @@
#include <lber.h>
#include <ldif.h>
#include <lutil.h>
#include "slapcommon.h"
......@@ -99,7 +100,7 @@ main( int argc, char **argv )
break;
}
{
if( global_schemacheck ) {
Attribute *sc = attr_find( e->e_attrs,
slap_schema.si_ad_structuralObjectClass );
Attribute *oc = attr_find( e->e_attrs,
......@@ -118,13 +119,12 @@ main( int argc, char **argv )
if( sc == NULL ) {
struct berval vals[2];
/* int ret = */
structural_class( oc->a_vals, vals,
rc = structural_class( oc->a_vals, vals,
NULL, &text, textbuf, textlen );
if( vals[0].bv_len == 0 ) {
fprintf( stderr, "%s: dn=\"%s\" (line=%d): %s\n",
progname, e->e_dn, lineno, text );
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;
......@@ -135,16 +135,13 @@ main( int argc, char **argv )
attr_merge( e, slap_schema.si_ad_structuralObjectClass,
vals );
}
}
if( global_schemacheck ) {
/* check schema */
rc = entry_schema_check( be, e, NULL, &text, textbuf, textlen );
if( rc != LDAP_SUCCESS ) {
fprintf( stderr, "%s: dn=\"%s\" (line=%d): %s\n",
progname, e->e_dn, lineno, text );
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;
......@@ -152,6 +149,88 @@ main( int argc, char **argv )
}
}
if ( SLAP_LASTMOD(be) ) {
struct tm *ltm;
time_t now = slap_get_time();
char uuidbuf[40];
struct berval vals[2];
struct berval name, timestamp, csn;
char timebuf[22];
char csnbuf[64];
ltm = gmtime(&now);
lutil_gentime( timebuf, sizeof(timebuf), ltm );
csn.bv_len = lutil_csnstr( csnbuf, sizeof( csnbuf ), 0, 0 );
csn.bv_val = csnbuf;
timestamp.bv_val = timebuf;
timestamp.bv_len = strlen(timebuf);
if ( be->be_rootndn.bv_len == 0 ) {
name.bv_val = SLAPD_ANONYMOUS;
name.bv_len = sizeof(SLAPD_ANONYMOUS) - 1;
} else {
name = be->be_rootndn;
}
if( attr_find( e->e_attrs, slap_schema.si_ad_entryUUID )
== NULL )
{
vals[0].bv_len = lutil_uuidstr( uuidbuf, sizeof( uuidbuf ) );
vals[0].bv_val = uuidbuf;
vals[1].bv_len = 0;
vals[1].bv_val = NULL;
attr_merge( e, slap_schema.si_ad_entryUUID, vals );
}
if( attr_find( e->e_attrs, slap_schema.si_ad_creatorsName )
== NULL )
{
ber_dupbv( &vals[0], &name );
vals[1].bv_len = 0;
vals[1].bv_val = NULL;
attr_merge( e, slap_schema.si_ad_creatorsName, vals);
}
if( attr_find( e->e_attrs, slap_schema.si_ad_modifiersName )
== NULL )
{
ber_dupbv( &vals[0], &name );
vals[1].bv_len = 0;
vals[1].bv_val = NULL;
attr_merge( e, slap_schema.si_ad_modifiersName, vals);
}
if( attr_find( e->e_attrs, slap_schema.si_ad_createTimestamp )
== NULL )
{
ber_dupbv( &vals[0], &timestamp );
vals[1].bv_len = 0;
vals[1].bv_val = NULL;
attr_merge( e, slap_schema.si_ad_createTimestamp, vals );
}
if( attr_find( e->e_attrs, slap_schema.si_ad_modifyTimestamp )
== NULL )
{
ber_dupbv( &vals[0], &timestamp );
vals[1].bv_len = 0;
vals[1].bv_val = NULL;
attr_merge( e, slap_schema.si_ad_modifyTimestamp, vals );
}
if( attr_find( e->e_attrs, slap_schema.si_ad_entryCSN )
== NULL )
{
ber_dupbv( &vals[0], &csn );
vals[1].bv_len = 0;
vals[1].bv_val = NULL;
attr_merge( e, slap_schema.si_ad_entryCSN, vals );
}
}
if (!dryrun) {
ID id = be->be_entry_put( be, e, &bvtext );
if( id == NOID ) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment