diff --git a/doc/configuration.txt b/doc/configuration.txt index 6e7af4b87..12a7eb76d 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -2,9 +2,9 @@ HAProxy Configuration Manual ---------------------- - version 1.3.12 + version 1.3.12.1 willy tarreau - 2007/07/24 + 2007/07/25 This document covers the configuration language as implemented in the version @@ -287,6 +287,7 @@ srvtimeout X - X X stats auth X - X X stats enable X - X X stats realm X - X X +stats refresh X - X X stats scope X - X X stats uri X - X X transparent X X X - diff --git a/include/common/uri_auth.h b/include/common/uri_auth.h index bb25ac1ea..9f675db6a 100644 --- a/include/common/uri_auth.h +++ b/include/common/uri_auth.h @@ -1,7 +1,7 @@ /* * URI-based user authentication using the HTTP basic method. * - * Copyright 2006 Willy Tarreau + * Copyright 2006-2007 Willy Tarreau * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -36,6 +36,7 @@ struct uri_auth { int uri_len; /* the prefix length */ char *uri_prefix; /* the prefix we want to match */ char *auth_realm; /* the realm reported to the client */ + int refresh; /* refresh interval for the browser (in seconds) */ struct user_auth *users; /* linked list of valid user:passwd couples */ struct stat_scope *scope; /* linked list of authorized proxies */ }; @@ -65,7 +66,15 @@ struct uri_auth { struct uri_auth *stats_check_init_uri_auth(struct uri_auth **root); struct uri_auth *stats_set_uri(struct uri_auth **root, char *uri); struct uri_auth *stats_set_realm(struct uri_auth **root, char *realm); +struct uri_auth *stats_set_refresh(struct uri_auth **root, int interval); struct uri_auth *stats_add_auth(struct uri_auth **root, char *user); struct uri_auth *stats_add_scope(struct uri_auth **root, char *scope); #endif /* _COMMON_URI_AUTH_H */ + +/* + * Local variables: + * c-indent-level: 8 + * c-basic-offset: 8 + * End: + */ diff --git a/src/cfgparse.c b/src/cfgparse.c index 967b9ca74..783e18979 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1040,6 +1040,16 @@ int cfg_parse_listen(const char *file, int linenum, char **args) Alert("parsing [%s:%d] : out of memory.\n", file, linenum); return -1; } + } else if (!strcmp(args[1], "refresh")) { + int interval = atoi(args[2]); + + if (interval < 0) { + Alert("parsing [%s:%d] : 'refresh' needs a positive interval in seconds.\n", file, linenum); + return -1; + } else if (!stats_set_refresh(&curproxy->uri_auth, interval)) { + Alert("parsing [%s:%d] : out of memory.\n", file, linenum); + return -1; + } } else if (!strcmp(args[1], "auth")) { if (*(args[2]) == 0) { Alert("parsing [%s:%d] : 'auth' needs a user:password account.\n", file, linenum); diff --git a/src/proto_http.c b/src/proto_http.c index 10420818c..8ebdc6116 100644 --- a/src/proto_http.c +++ b/src/proto_http.c @@ -3451,8 +3451,13 @@ int produce_content_stats(struct session *s) "HTTP/1.0 200 OK\r\n" "Cache-Control: no-cache\r\n" "Connection: close\r\n" - "Content-Type: text/html\r\n" - "\r\n"); + "Content-Type: text/html\r\n"); + + if (s->be->uri_auth->refresh > 0) + chunk_printf(&msg, sizeof(trash), "Refresh: %d\r\n", + s->be->uri_auth->refresh); + + chunk_printf(&msg, sizeof(trash), "\r\n"); s->txn.status = 200; client_retnclose(s, &msg); // send the start of the response. diff --git a/src/uri_auth.c b/src/uri_auth.c index f666c0dfa..f5f90af7b 100644 --- a/src/uri_auth.c +++ b/src/uri_auth.c @@ -1,7 +1,7 @@ /* * URI-based user authentication using the HTTP basic method. * - * Copyright 2006 Willy Tarreau + * Copyright 2006-2007 Willy Tarreau * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -113,6 +113,19 @@ struct uri_auth *stats_set_realm(struct uri_auth **root, char *realm) return NULL; } +/* + * Returns a default uri_auth with the refresh interval. + * Uses the pointer provided if not NULL and not initialized. + */ +struct uri_auth *stats_set_refresh(struct uri_auth **root, int interval) +{ + struct uri_auth *u; + + if ((u = stats_check_init_uri_auth(root)) != NULL) + u->refresh = interval; + return u; +} + /* * Returns a default uri_auth with a entry added to the list of * authorized users. If a matching entry is found, no update will be performed. @@ -204,3 +217,9 @@ struct uri_auth *stats_add_scope(struct uri_auth **root, char *scope) return NULL; } +/* + * Local variables: + * c-indent-level: 8 + * c-basic-offset: 8 + * End: + */