--- ../conf/auth_tkt_cgi.conf.orig 2009-03-04 05:22:06.000000000 +0900 +++ ../conf/auth_tkt_cgi.conf 2015-01-27 12:07:43.628422498 +0900 @@ -13,6 +13,9 @@ # Digest type to use - default is MD5, alternatives are SHA256 or SHA512 #TKTAuthDigestType MD5 +# Query separator for generated URLs. Defaults to semi-colon (';') +#TKTAuthQuerySeparator & + # Used by sample CGI scripts to locate this config file SetEnv MOD_AUTH_TKT_CONF "/etc/httpd/conf.d/auth_tkt_cgi.conf" --- ../src/mod_auth_tkt.c.orig 2009-07-10 16:46:51.000000000 +0900 +++ ../src/mod_auth_tkt.c 2015-01-27 12:07:43.631422016 +0900 @@ -38,6 +38,7 @@ #define REMOTE_USER_TOKENS_ENV "REMOTE_USER_TOKENS" #define DEFAULT_TIMEOUT_SEC 7200 #define DEFAULT_GUEST_USER "guest" +#define QUERY_SEPARATOR ';' #define FORCE_REFRESH 1 #define CHECK_REFRESH 0 @@ -68,6 +69,7 @@ char *guest_user; int guest_fallback; int debug; + const char *query_separator; } auth_tkt_dir_conf; /* Per-server configuration */ @@ -142,6 +144,7 @@ conf->guest_user = NULL; conf->guest_fallback = -1; conf->debug = -1; + conf->query_separator = (char *)QUERY_SEPARATOR; return conf; } @@ -174,6 +177,7 @@ conf->guest_user = (subdir->guest_user) ? subdir->guest_user : parent->guest_user; conf->guest_fallback = (subdir->guest_fallback >= 0) ? subdir->guest_fallback : parent->guest_fallback; conf->debug = (subdir->debug >= 0) ? subdir->debug : parent->debug; + conf->query_separator = (subdir->query_separator) ? subdir->query_separator : parent->query_separator; return conf; } @@ -338,6 +342,16 @@ return NULL; } +static const char * +setup_query_separator (cmd_parms *cmd, void *cfg, const char *param) +{ + if (strcmp(param, ";") != 0 && strcmp(param, "&") != 0) + return "QuerySeparator must be either ';' or '&'."; + auth_tkt_dir_conf *conf = (auth_tkt_dir_conf *)cfg; + conf->query_separator = param; + return NULL; +} + void setup_digest_sz (auth_tkt_serv_conf *sconf) { @@ -467,22 +481,25 @@ AP_INIT_TAKE1("TKTAuthSecretOld", setup_old_secret, NULL, RSRC_CONF, "old/alternative secret key to check in digests"), AP_INIT_TAKE1("TKTAuthDigestType", setup_digest_type, - NULL, RSRC_CONF, "digest type to use [MD5|SHA256|SHA512], default MD5"), + NULL, RSRC_CONF, "digest type to use [MD5|SHA256|SHA512], default MD5"), AP_INIT_FLAG("TKTAuthGuestLogin", ap_set_flag_slot, (void *)APR_OFFSETOF(auth_tkt_dir_conf, guest_login), OR_AUTHCFG, "whether to log people in as guest if no other auth available"), AP_INIT_FLAG("TKTAuthGuestCookie", ap_set_flag_slot, (void *)APR_OFFSETOF(auth_tkt_dir_conf, guest_cookie), - OR_AUTHCFG, "whether to set a cookie when accepting guest users (default off)"), + OR_AUTHCFG, "whether to set a cookie when accepting guest users (default off)"), AP_INIT_TAKE1("TKTAuthGuestUser", ap_set_string_slot, (void *)APR_OFFSETOF(auth_tkt_dir_conf, guest_user), OR_AUTHCFG, "username to use for guest logins"), AP_INIT_FLAG("TKTAuthGuestFallback", ap_set_flag_slot, (void *)APR_OFFSETOF(auth_tkt_dir_conf, guest_fallback), - OR_AUTHCFG, "whether to fall back to guest on an expired ticket (default off)"), + OR_AUTHCFG, "whether to fall back to guest on an expired ticket (default off)"), AP_INIT_ITERATE("TKTAuthDebug", set_auth_tkt_debug, (void *)APR_OFFSETOF(auth_tkt_dir_conf, debug), OR_AUTHCFG, "debug level (1-3, higher for more debug output)"), + AP_INIT_TAKE1("TKTAuthQuerySeparator", setup_query_separator, + (void *)APR_OFFSETOF(auth_tkt_dir_conf, query_separator), + OR_AUTHCFG, "Character used in query strings to separate arguments (default: ';')"), {NULL}, }; @@ -1186,7 +1203,8 @@ char *domain = get_domain(r,conf); char *back_cookie_name = conf->back_cookie_name; char *back_arg_name = conf->back_arg_name; - char *url, *cookie, *back; + char *url = location; + char *cookie, *back; const char *hostinfo = 0; int port; @@ -1255,8 +1273,8 @@ } /* If back_cookie_name not set, add a back url argument to url */ - else { - char sep = ap_strchr(location, '?') ? ';' : '?'; + else if (back_arg_name) { + char sep = ap_strchr(location, '?') ? conf->query_separator[0] : '?'; url = apr_psprintf(r->pool, "%s%c%s=%s", location, sep, back_arg_name, back); } @@ -1398,6 +1416,7 @@ fprintf(stderr,"TKTAuthGuestCookie: %d\n", conf->guest_cookie); fprintf(stderr,"TKTAuthGuestUser: %s\n", conf->guest_user); fprintf(stderr,"TKTAuthGuestFallback %d\n", conf->guest_fallback); + fprintf(stderr,"TKTAuthQuerySeparator: %c\n", conf->query_separator); if (conf->auth_token->nelts > 0) { char ** auth_token = (char **) conf->auth_token->elts; int i;