[Date Prev][Date Next] [Chronological] [Thread] [Top]

Access of entryUUID in an overlay module



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dear all,

I am new to OpenLDAP. In order to process transactions in a separate
piece of software, I am parsing the output of a slightly modified
version of the auditlog overlay module. As I need to know the
entryUUID of a modified LDAP object, I tried to query it and write it
along with the other information into the auditlog file.

My current patch seems to navigate slapd into a deadlock situation. I
do not understand the reason for that and would be very happy if
someone may help to point me into the correct direction for
implementing this.

Here is my patch that I am working with, so far:

====================
- --- ./servers/slapd/overlays/auditlog.c.orig    2014-01-09
12:26:22.060000000 -0500
+++ ./servers/slapd/overlays/auditlog.c 2014-01-17 11:13:34.624000000
- -0500
@@ -24,6 +24,7 @@
 #ifdef SLAPD_OVER_AUDITLOG

 #include <stdio.h>
+#include <time.h>

 #include <ac/string.h>
 #include <ac/ctype.h>
@@ -74,8 +75,13 @@
    Modifications *m;
    struct berval *b, *who = NULL, peername;
    char *what, *whatm, *suffix;
- -   time_t stamp;
+   struct timeval stamp;
    int i;
+   int rc;
+   Entry *e = NULL;
+   Attribute *a_entryUUID;
+   char *entryUUID = "NULL";
+   BackendInfo *bi = op->o_bd->bd_info;

    if ( rs->sr_err != LDAP_SUCCESS ) return SLAP_CB_CONTINUE;

@@ -119,6 +125,16 @@
    if ( !who )
        who = &op->o_dn;

+   /* get the entryUUID */
+   //rc = overlay_entry_get_ov( op, &op->o_req_ndn, NULL, NULL, 0,
&e, on );
+   op->o_bd->bd_info = (BackendInfo *)on->on_info;
+   rc = be_entry_get_rw( op, &op->o_req_ndn, NULL, NULL, 0, &e );
+   op->o_bd->bd_info = bi;
+   if ( rc == LDAP_SUCCESS ) {
+       a_entryUUID = attr_find( e->e_attrs,
slap_schema.si_ad_entryUUID );
+       entryUUID = a_entryUUID->a_vals[0].bv_val;
+   }
+
    peername = op->o_conn->c_peer_name;
    ldap_pvt_thread_mutex_lock(&ad->ad_mutex);
    if((f = fopen(ad->ad_logfile, "a")) == NULL) {
@@ -126,9 +142,11 @@
        return SLAP_CB_CONTINUE;
    }

- -   stamp = slap_get_time();
- -   fprintf(f, "# %s %ld %s%s%s %s conn=%ld\n",
- -       what, (long)stamp, suffix, who ? " " : "", who ? who->bv_val : "",
+   gettimeofday(&stamp, NULL);
+   fprintf(f, "# %s %ld.%06ld %s %s%s%s %s conn=%ld\n",
+       what, stamp.tv_sec, stamp.tv_usec,
+       entryUUID,
+       suffix, who ? " " : "", who ? who->bv_val : "",
        peername.bv_val ? peername.bv_val: "", op->o_conn->c_connid);

    if ( !BER_BVISEMPTY( &op->o_conn->c_dn ) &&
@@ -176,7 +194,7 @@
        break;
    }

- -   fprintf(f, "# end %s %ld\n\n", what, (long)stamp);
+   fprintf(f, "# end %s %ld.%06ld\n\n", what, stamp.tv_sec,
stamp.tv_usec);

    fclose(f);
    ldap_pvt_thread_mutex_unlock(&ad->ad_mutex);
====================

thanks so much in advance
Alex

- -- 
Dr. Alexander Kläser
Open Source Software Engineer

Univention GmbH
be open.
Mary-Somerville-Str.1
28359 Bremen
Tel. : +49 421 22232-59
Fax : +49 421 22232-99

klaeser@univention.de
http://www.univention.de

Geschäftsführer: Peter H. Ganten
HRB 20755 Amtsgericht Bremen
Steuer-Nr.: 71-597-02876
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iEYEARECAAYFAlLZWZkACgkQgX5Q1Nb/qB0VSACfanVbcP79n3gEnH0zivWSThGA
dxUAnj+2NaKhLweCFjFMtGoHPdHzByQZ
=DHYq
-----END PGP SIGNATURE-----