]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/accesslog.c
Fix prev commit
[openldap] / servers / slapd / overlays / accesslog.c
index f134ed1d1f3a4013d166ecab43e8275209ae7642..c0454cf20032caf170c73123af0d535b3c1d972c 100644 (file)
@@ -57,7 +57,7 @@ typedef struct log_info {
        int li_age;
        int li_cycle;
        struct re_s *li_task;
-       Filter *li_filter;
+       Filter *li_oldf;
        Entry *li_old;
        int li_success;
        ldap_pvt_thread_mutex_t li_op_mutex;
@@ -71,7 +71,7 @@ enum {
        LOG_OPS,
        LOG_PURGE,
        LOG_SUCCESS,
-       LOG_FILTER
+       LOG_OLD
 };
 
 static ConfigTable log_cfats[] = {
@@ -93,8 +93,8 @@ static ConfigTable log_cfats[] = {
                log_cf_gen, "( OLcfgOvAt:4.4 NAME 'olcAccessLogSuccess' "
                        "DESC 'Log successful ops only' "
                        "SYNTAX OMsBoolean SINGLE-VALUE )", NULL, NULL },
-       { "logoldfilter", NULL, 2, 2, 0, ARG_MAGIC|LOG_FILTER,
-               log_cf_gen, "( OLcfgOvAt:4.5 NAME 'olcAccessLogOldFilter' "
+       { "logold", "filter", 2, 2, 0, ARG_MAGIC|LOG_OLD,
+               log_cf_gen, "( OLcfgOvAt:4.5 NAME 'olcAccessLogOld' "
                        "DESC 'Log old values when modifying entries matching the filter' "
                        "SYNTAX OMsDirectoryString SINGLE-VALUE )", NULL, NULL },
        { NULL }
@@ -107,7 +107,7 @@ static ConfigOCs log_cfocs[] = {
                "SUP olcOverlayConfig "
                "MUST olcAccessLogDB "
                "MAY ( olcAccessLogOps $ olcAccessLogPurge $ olcAccessLogSuccess $ "
-                       "olcAccessLogOldFilter ) )",
+                       "olcAccessLogOld ) )",
                        Cft_Overlay, log_cfats },
        { NULL }
 };
@@ -443,6 +443,9 @@ log_age_parse(char *agestr)
                        return -1;
                t1 *= 60;
                t1 += atoi( agestr );
+       } else if ( gotdays ) {
+               /* only got days+hh:mm */
+               t1 *= 60;
        }
        return t1;
 }
@@ -613,9 +616,9 @@ log_cf_gen(ConfigArgs *c)
                        else
                                rc = 1;
                        break;
-               case LOG_FILTER:
-                       if ( li->li_filter ) {
-                               filter2bv( li->li_filter, &agebv );
+               case LOG_OLD:
+                       if ( li->li_oldf ) {
+                               filter2bv( li->li_oldf, &agebv );
                                value_add_one( &c->rvalue_vals, &agebv );
                        }
                        else
@@ -651,10 +654,10 @@ log_cf_gen(ConfigArgs *c)
                case LOG_SUCCESS:
                        li->li_success = 0;
                        break;
-               case LOG_FILTER:
-                       if ( li->li_filter ) {
-                               filter_free( li->li_filter );
-                               li->li_filter = NULL;
+               case LOG_OLD:
+                       if ( li->li_oldf ) {
+                               filter_free( li->li_oldf );
+                               li->li_oldf = NULL;
                        }
                        break;
                }
@@ -702,9 +705,9 @@ log_cf_gen(ConfigArgs *c)
                case LOG_SUCCESS:
                        li->li_success = c->value_int;
                        break;
-               case LOG_FILTER:
-                       li->li_filter = str2filter( c->argv[1] );
-                       if ( !li->li_filter ) {
+               case LOG_OLD:
+                       li->li_oldf = str2filter( c->argv[1] );
+                       if ( !li->li_oldf ) {
                                sprintf( c->msg, "bad filter!" );
                                rc = 1;
                        }
@@ -837,7 +840,7 @@ static int accesslog_response(Operation *op, SlapReply *rs) {
        int i;
        int logop;
        slap_verbmasks *lo;
-       Entry *e, *old = NULL;
+       Entry *e = NULL, *old = NULL;
        char timebuf[LDAP_LUTIL_GENTIME_BUFSIZE+8];
        struct berval bv;
        char *ptr;
@@ -1124,11 +1127,12 @@ static int accesslog_response(Operation *op, SlapReply *rs) {
        }
 
        op2.o_bd->be_add( &op2, &rs2 );
-       entry_free( e );
 
 done:
+       if ( lo->mask & LOG_OP_WRITES )
+               ldap_pvt_thread_mutex_unlock( &li->li_log_mutex );
+       if ( e ) entry_free( e );
        if ( old ) entry_free( old );
-       ldap_pvt_thread_mutex_unlock( &li->li_log_mutex );
        return SLAP_CB_CONTINUE;
 }
 
@@ -1184,7 +1188,7 @@ accesslog_op_mod( Operation *op, SlapReply *rs )
                 * overlays like refint to keep working.
                 */
                ldap_pvt_thread_mutex_lock( &li->li_op_mutex );
-               if ( li->li_filter && ( op->o_tag == LDAP_REQ_DELETE ||
+               if ( li->li_oldf && ( op->o_tag == LDAP_REQ_DELETE ||
                        op->o_tag == LDAP_REQ_MODIFY )) {
                        int rc;
                        Entry *e;
@@ -1192,7 +1196,7 @@ accesslog_op_mod( Operation *op, SlapReply *rs )
                        op->o_bd->bd_info = on->on_info->oi_orig;
                        rc = be_entry_get_rw( op, &op->o_req_ndn, NULL, NULL, 0, &e );
                        if ( e ) {
-                               if ( test_filter( op, e, li->li_filter ) == LDAP_COMPARE_TRUE )
+                               if ( test_filter( op, e, li->li_oldf ) == LDAP_COMPARE_TRUE )
                                        li->li_old = entry_dup( e );
                                be_entry_release_rw( op, e, 0 );
                        }