On Tue, Mar 01, 2011 at 11:59:28AM +0530, vijay wrote: > [[[ > Update log_access_verdict to make it work with httpd trunk as well as older > versions. The function is being called with APLOG_MACRO in few places. > The macro APLOG_MARK expands to 2 arguments till httpd-2.2.x but 3 > arguments in httpd-2.3-dev, which causes failure while compiling with > httpd-2.3-dev. So we need to handle both the cases. > > * subversion/mod_authz_svn/mod_authz_svn.c > (log_access_verdict): Modify the signature.
Your log message should probably include this link: http://httpd.apache.org/docs/trunk/developer/new_api_2_4.html#upgrading_logging > Patch by: Vijayaguru G <vijay{_AT_}collab.net> > Suggested by: Kameshj > ]]] > > > Index: subversion/mod_authz_svn/mod_authz_svn.c > =================================================================== > --- subversion/mod_authz_svn/mod_authz_svn.c (revision 1075316) > +++ subversion/mod_authz_svn/mod_authz_svn.c (working copy) > @@ -32,6 +32,7 @@ > #include <http_log.h> > #include <ap_config.h> > #include <ap_provider.h> > +#include <ap_release.h> > #include <apr_uri.h> > #include <apr_lib.h> > #include <mod_dav.h> > @@ -519,12 +520,20 @@ > return OK; > } > > +#if AP_SERVER_MAJORVERSION_NUMBER == 2 && AP_SERVER_MINORVERSION_NUMBER == 3 > +#define LOG_ARGS_SIGNATURE const char *file, int line, int module_index > +#define LOG_ARGS_CASCADE file, line, module_index > +#else > +#define LOG_ARGS_SIGNATURE const char *file, int line > +#define LOG_ARGS_CASCADE file, line > +#endif I don't really like a macro that expands to function parameters. Can we do something like this instead? This will duplicate some code, but the function is small and this way it's a bit easier to understand what is happening at a glance. #if AP_MODULE_MAGIC_AT_LEAST(2,3) static void log_access_verdict_httpd_v23(const char *file, int line, const request_rec *r, int allowed, const char *repos_path, const char *dest_repos_path) { /* code for v23 */ } #else static void log_access_verdict2_httpd_v22(const char *file, int line, int module_index, const request_rec *r, int allowed, const char *repos_path, const char *dest_repos_path) { /* code for v22 */ } #endif static void log_access_verdict(const char *file, int line, int module_index, const request_rec *r, int allowed, const char *repos_path, const char *dest_repos_path) { #if AP_MODULE_MAGIC_AT_LEAST(2,3) /* call log_access_verdict_httpd_v23 */ #endif /* call log_access_verdict_httpd_v22 */ #endif } > /* Log a message indicating the access control decision made about a > - * request. FILE and LINE should be supplied via the APLOG_MARK macro. > - * ALLOWED is boolean. REPOS_PATH and DEST_REPOS_PATH are information > + * request. LOG_ARGS_SIGNATURE should be supplied via the APLOG_MARK macro > + * with respect to Apache version. ALLOWED is boolean. > + * REPOS_PATH and DEST_REPOS_PATH are information > * about the request. DEST_REPOS_PATH may be NULL. */ > static void > -log_access_verdict(const char *file, int line, > +log_access_verdict(LOG_ARGS_SIGNATURE, > const request_rec *r, int allowed, > const char *repos_path, const char *dest_repos_path) > { > @@ -534,22 +543,22 @@ > if (r->user) > { > if (dest_repos_path) > - ap_log_rerror(file, line, level, 0, r, > + ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r, > "Access %s: '%s' %s %s %s", verdict, r->user, > r->method, repos_path, dest_repos_path); > else > - ap_log_rerror(file, line, level, 0, r, > + ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r, > "Access %s: '%s' %s %s", verdict, r->user, > r->method, repos_path); > } > else > { > if (dest_repos_path) > - ap_log_rerror(file, line, level, 0, r, > + ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r, > "Access %s: - %s %s %s", verdict, > r->method, repos_path, dest_repos_path); > else > - ap_log_rerror(file, line, level, 0, r, > + ap_log_rerror(LOG_ARGS_CASCADE, level, 0, r, > "Access %s: - %s %s", verdict, > r->method, repos_path); > }