document missing feature; avoid the risk of returning argv in an inconsistent state when an error occurs

This commit is contained in:
Pierangelo Masarati 2005-03-28 18:51:02 +00:00
parent aa681f980d
commit 27e5fabb8b
2 changed files with 26 additions and 11 deletions

View 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.

View 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;
}