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.
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> "
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 );
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",
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
}
/* 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;
}