]> git.sur5r.net Git - openldap/commitdiff
document missing feature; avoid the risk of returning argv in an inconsistent state...
authorPierangelo Masarati <ando@openldap.org>
Mon, 28 Mar 2005 18:51:02 +0000 (18:51 +0000)
committerPierangelo Masarati <ando@openldap.org>
Mon, 28 Mar 2005 18:51:02 +0000 (18:51 +0000)
doc/man/man5/slapo-pcache.5
servers/slapd/overlays/pcache.c

index e925554d7125dff75cf7ccef670bfcbfd54146c3..2fb88ae57a532052578795e0bb93f2148df489c4 100644 (file)
@@ -78,6 +78,21 @@ used by the \fBproxytemplate\fP directive to define cacheable templates.
 Specifies a cacheable template and "time to live" (in sec) <ttl> of queries 
 belonging to the template. 
 
+.TP
+.B response-callback { head | tail }
+Specifies whether the response callback should be placed at the
+.B tail
+(the default) or at the 
+.B head
+(actually, wherever the stacking sequence would make it appear) 
+of the callback list.  This affects how the overlay interacts with other
+overlays, since the proxycache overlay should be executed as early 
+as possible (and thus configured as late as possible), to get 
+a chance to return the cached results; however, if executed early
+at response, it would cache entries that may be later "massaged"
+by other databases and thus returned \fIafter\fP massaging the first
+time, and \fIbefore\fP massaging when cached.
+
 .LP
 The following adds a template with filter string \fB((&sn=)(givenName=))\fP 
 and attributes mail, postaladdress, telephonenumber and a TTL of 1 hour. 
index f991d4987fa620387da47b51169b6e5797d760a9..e75b79c741303162ac1854f4ad36ab342cf91fba 100644 (file)
@@ -1499,18 +1499,19 @@ proxy_cache_config(
        AttributeName*  attr_name;
        AttributeName*  attrarray;
        const char*     text=NULL;
-       char            *save_argv0 = NULL;
+       char            *argv0 = NULL;
 
        int             index, i;
        int             num;
        int             rc = 0;
 
        if ( strncasecmp( argv[0], "proxycache-", STRLENOF( "proxycache-" ) ) == 0 ) {
-               save_argv0 = argv[0];
-               argv[0] += STRLENOF( "proxycache-" );
+               argv0 = argv[0] + STRLENOF( "proxycache-" );
+       } else {
+               argv0 = argv[0];
        }
 
-       if ( strcasecmp( argv[0], "proxycache" ) == 0 ) {
+       if ( strcasecmp( argv0, "proxycache" ) == 0 ) {
                if ( argc < 6 ) {
                        fprintf( stderr, "%s: line %d: missing arguments in \"proxycache"
                                " <backend> <max_entries> <numattrsets> <entry limit> "
@@ -1549,7 +1550,7 @@ proxy_cache_config(
                        qm->attr_sets[i].attrs = NULL;
                }
 
-       } else if ( strcasecmp( argv[0], "proxyattrset" ) == 0 ) {
+       } else if ( strcasecmp( argv0, "proxyattrset" ) == 0 ) {
                if ( argc < 3 ) {
                        fprintf( stderr, "%s: line %d: missing arguments in \"proxyattrset "
                                "<index> <attributes>\"\n", fname, lineno );
@@ -1581,7 +1582,7 @@ proxy_cache_config(
                                attr_name->an_name.bv_len = 0;
                        }
                }
-       } else if ( strcasecmp( argv[0], "proxytemplate" ) == 0 ) {
+       } else if ( strcasecmp( argv0, "proxytemplate" ) == 0 ) {
                if ( argc != 4 ) {
                        fprintf( stderr, "%s: line %d: missing argument(s) in "
                                "\"proxytemplate <filter> <proj attr set> <TTL>\" line\n",
@@ -1625,7 +1626,7 @@ proxy_cache_config(
                temp->querystr.bv_val = NULL;
                cm->numtemplates++;
 
-       } else if ( strcasecmp( argv[0], "response-callback" ) == 0 ) {
+       } else if ( strcasecmp( argv0, "response-callback" ) == 0 ) {
                /* set to "tail" to put the response callback
                 * at the end of the callback list; this is required
                 * in case other overlays are present, so that the
@@ -1653,13 +1654,12 @@ proxy_cache_config(
        }
        /* anything else */
        else {
+               if ( argv0 != argv[0] ) {
+                       return SLAP_CONF_UNKNOWN;
+               }
                rc = cm->db.bd_info->bi_db_config( &cm->db, fname, lineno, argc, argv );
        }
 
-       if ( save_argv0 ) {
-               argv[0] = save_argv0;
-       }
-
        return rc;
 }