Diff for /servers/slapd/modify.c between versions 1.227.2.23 and 1.227.2.24

version 1.227.2.23, 2006/01/17 19:37:20 version 1.227.2.24, 2006/02/13 19:50:35
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/modify.c,v 1.227.2.22 2006/01/03 22:16:14 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/modify.c,v 1.227.2.23 2006/01/17 19:37:20 kurt Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 1998-2006 The OpenLDAP Foundation.   * Copyright 1998-2006 The OpenLDAP Foundation.
Line 805  void slap_timestamp( time_t *tm, struct Line 805  void slap_timestamp( time_t *tm, struct
 #endif  #endif
 }  }
   
 /* modify only calls this for non-replicas. modrdn always calls.  /* Called for all modify and modrdn ops. If the current op was replicated
    * from elsewhere, all of the attrs should already be present.
  */   */
 void slap_mods_opattrs(  void slap_mods_opattrs(
         Operation *op,          Operation *op,
Line 817  void slap_mods_opattrs( Line 818  void slap_mods_opattrs(
         char timebuf[ LDAP_LUTIL_GENTIME_BUFSIZE ];          char timebuf[ LDAP_LUTIL_GENTIME_BUFSIZE ];
         char csnbuf[ LDAP_LUTIL_CSNSTR_BUFSIZE ];          char csnbuf[ LDAP_LUTIL_CSNSTR_BUFSIZE ];
         Modifications *mod, **modtail, *modlast;          Modifications *mod, **modtail, *modlast;
           int gotcsn = 0, gotmname = 0, gotmtime = 0;
   
         if ( SLAP_LASTMOD( op->o_bd ) ) {          if ( SLAP_LASTMOD( op->o_bd ) ) {
                 char *ptr;                  char *ptr;
                 timestamp.bv_val = timebuf;                  timestamp.bv_val = timebuf;
                   for ( modtail = modsp; *modtail; modtail = &(*modtail)->sml_next ) {
                           if ( (*modtail)->sml_op != LDAP_MOD_ADD &&
                                   (*modtail)->sml_op != LDAP_MOD_REPLACE ) continue;
                           if ( (*modtail)->sml_desc == slap_schema.si_ad_entryCSN ) {
                                   csn = (*modtail)->sml_values[0];
                                   gotcsn = 1;
                           } else
                           if ( (*modtail)->sml_desc == slap_schema.si_ad_modifiersName ) {
                                   gotmname = 1;
                           } else
                           if ( (*modtail)->sml_desc == slap_schema.si_ad_modifyTimestamp ) {
                                   gotmtime = 1;
                           }
                   }
                 if ( BER_BVISEMPTY( &op->o_csn )) {                  if ( BER_BVISEMPTY( &op->o_csn )) {
                         csn.bv_val = csnbuf;                          if ( !gotcsn ) {
                         csn.bv_len = sizeof( csnbuf );                                  csn.bv_val = csnbuf;
                         slap_get_csn( op, &csn, manage_ctxcsn );                                  csn.bv_len = sizeof( csnbuf );
                                   slap_get_csn( op, &csn, manage_ctxcsn );
                           } else {
                                   if ( manage_ctxcsn )
                                           slap_queue_csn( op, &csn );
                           }
                 } else {                  } else {
                         csn = op->o_csn;                          csn = op->o_csn;
                 }                  }
Line 851  void slap_mods_opattrs( Line 872  void slap_mods_opattrs(
                         nname = op->o_ndn;                          nname = op->o_ndn;
                 }                  }
   
                 for ( modtail = modsp; *modtail; modtail = &(*modtail)->sml_next )                  if ( !gotcsn ) {
                         ;                          mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
                           mod->sml_op = LDAP_MOD_REPLACE;
                 mod = (Modifications *) ch_malloc( sizeof( Modifications ) );                          mod->sml_flags = SLAP_MOD_INTERNAL;
                 mod->sml_op = LDAP_MOD_REPLACE;                          mod->sml_next = NULL;
                 mod->sml_flags = SLAP_MOD_INTERNAL;                          BER_BVZERO( &mod->sml_type );
                 mod->sml_next = NULL;                          mod->sml_desc = slap_schema.si_ad_entryCSN;
                 BER_BVZERO( &mod->sml_type );                          mod->sml_values = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );
                 mod->sml_desc = slap_schema.si_ad_entryCSN;                          ber_dupbv( &mod->sml_values[0], &csn );
                 mod->sml_values = (BerVarray) ch_malloc( 2 * sizeof( struct berval ) );                          BER_BVZERO( &mod->sml_values[1] );
                 ber_dupbv( &mod->sml_values[0], &csn );                          assert( !BER_BVISNULL( &mod->sml_values[0] ) );
                 BER_BVZERO( &mod->sml_values[1] );                          mod->sml_nvalues = NULL;
                 assert( !BER_BVISNULL( &mod->sml_values[0] ) );                          *modtail = mod;
                 mod->sml_nvalues = NULL;                          modlast = mod;
                 *modtail = mod;                          modtail = &mod->sml_next;
                 modlast = mod;  
                 modtail = &mod->sml_next;  
           
                 if ( get_manageDIT( op ) ) {  
                         for ( mod = *modsp; mod != modlast; mod = mod->sml_next ) {  
                                 if ( mod->sml_desc == slap_schema.si_ad_modifiersName ) {  
                                         break;  
                                 }  
                         }  
                 }                  }
   
                 if ( mod->sml_desc != slap_schema.si_ad_modifiersName ) {                  if ( !gotmname ) {
                         mod = (Modifications *) ch_malloc( sizeof( Modifications ) );                          mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
                         mod->sml_op = LDAP_MOD_REPLACE;                          mod->sml_op = LDAP_MOD_REPLACE;
                         mod->sml_flags = SLAP_MOD_INTERNAL;                          mod->sml_flags = SLAP_MOD_INTERNAL;
Line 897  void slap_mods_opattrs( Line 909  void slap_mods_opattrs(
                         modtail = &mod->sml_next;                          modtail = &mod->sml_next;
                 }                  }
   
                 if ( get_manageDIT( op ) ) {                  if ( !gotmtime ) {
                         for ( mod = *modsp; mod != modlast; mod = mod->sml_next ) {  
                                 if ( mod->sml_desc == slap_schema.si_ad_modifyTimestamp ) {  
                                         break;  
                                 }  
                         }  
                 }  
   
                 if ( mod->sml_desc != slap_schema.si_ad_modifyTimestamp ) {  
                         mod = (Modifications *) ch_malloc( sizeof( Modifications ) );                          mod = (Modifications *) ch_malloc( sizeof( Modifications ) );
                         mod->sml_op = LDAP_MOD_REPLACE;                          mod->sml_op = LDAP_MOD_REPLACE;
                         mod->sml_flags = SLAP_MOD_INTERNAL;                          mod->sml_flags = SLAP_MOD_INTERNAL;

Removed from v.1.227.2.23  
changed lines
  Added in v.1.227.2.24


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org