diff options
-rw-r--r-- | main/SAPI.c | 3 | ||||
-rw-r--r-- | main/SAPI.h | 1 | ||||
-rw-r--r-- | main/main.c | 5 | ||||
-rw-r--r-- | main/php_variables.c | 3 | ||||
-rw-r--r-- | sapi/apache/mod_php5.c | 35 | ||||
-rw-r--r-- | sapi/apache_hooks/mod_php5.c | 36 |
6 files changed, 50 insertions, 33 deletions
diff --git a/main/SAPI.c b/main/SAPI.c index 5ff76c35b2..e6ce825375 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -424,6 +424,9 @@ SAPI_API void sapi_deactivate(TSRMLS_D) if (SG(request_info).auth_password) { efree(SG(request_info).auth_password); } + if (SG(request_info).auth_digest) { + efree(SG(request_info).auth_digest); + } if (SG(request_info).content_type_dup) { efree(SG(request_info).content_type_dup); } diff --git a/main/SAPI.h b/main/SAPI.h index 9ef7eecbdb..3b132b8080 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -98,6 +98,7 @@ typedef struct { /* for HTTP authentication */ char *auth_user; char *auth_password; + char *auth_digest; /* this is necessary for the CGI SAPI module */ char *argv0; diff --git a/main/main.c b/main/main.c index e310abd7c4..e0ed5c3756 100644 --- a/main/main.c +++ b/main/main.c @@ -1736,6 +1736,11 @@ PHPAPI int php_handle_auth_data(const char *auth TSRMLS_DC) SG(request_info).auth_user = SG(request_info).auth_password = NULL; } + if (auth && auth[0] != '\0' && strncmp(auth, "Digest ", 7) == 0) { + SG(request_info).auth_digest = estrdup(auth); + ret = 0; + } + return ret; } /* }}} */ diff --git a/main/php_variables.c b/main/php_variables.c index 17a0d82592..95995c2e39 100644 --- a/main/php_variables.c +++ b/main/php_variables.c @@ -515,6 +515,9 @@ static inline void php_register_server_variables(TSRMLS_D) if (SG(request_info).auth_password) { php_register_variable("PHP_AUTH_PW", SG(request_info).auth_password, array_ptr TSRMLS_CC); } + if (SG(request_info).auth_digest) { + php_register_variable("PHP_AUTH_DIGEST", SG(request_info).auth_digest, array_ptr TSRMLS_CC); + } /* store request init time */ { zval new_entry; diff --git a/sapi/apache/mod_php5.c b/sapi/apache/mod_php5.c index 59be19df4b..6fc4016c19 100644 --- a/sapi/apache/mod_php5.c +++ b/sapi/apache/mod_php5.c @@ -489,24 +489,27 @@ static void init_request_info(TSRMLS_D) if (r->headers_in) { authorization = table_get(r->headers_in, "Authorization"); } + + SG(request_info).auth_user = NULL; + SG(request_info).auth_password = NULL; + if (authorization - && (!PG(safe_mode) || (PG(safe_mode) && !auth_type(r))) - && !strcasecmp(getword(r->pool, &authorization, ' '), "Basic")) { - tmp = uudecode(r->pool, authorization); - SG(request_info).auth_user = NULL; - tmp_user = getword_nulls_nc(r->pool, &tmp, ':'); - if (tmp_user) { - r->connection->user = pstrdup(r->connection->pool, tmp_user); - r->connection->ap_auth_type = "Basic"; - SG(request_info).auth_user = estrdup(tmp_user); - } - SG(request_info).auth_password = NULL; - if (tmp) { - SG(request_info).auth_password = estrdup(tmp); + && (!PG(safe_mode) || (PG(safe_mode) && !auth_type(r)))) { + if (!strcasecmp(getword(r->pool, &authorization, ' '), "Basic")) { + tmp = uudecode(r->pool, authorization); + tmp_user = getword_nulls_nc(r->pool, &tmp, ':'); + if (tmp_user) { + r->connection->user = pstrdup(r->connection->pool, tmp_user); + r->connection->ap_auth_type = "Basic"; + SG(request_info).auth_user = estrdup(tmp_user); + } + if (tmp) { + SG(request_info).auth_password = estrdup(tmp); + } + } else if (!strcasecmp(getword(r->pool, &authorization, ' '), "Digest")) { + r->connection->ap_auth_type = "Digest"; + SG(request_info).auth_digest = estrdup(authorization); } - } else { - SG(request_info).auth_user = NULL; - SG(request_info).auth_password = NULL; } } /* }}} */ diff --git a/sapi/apache_hooks/mod_php5.c b/sapi/apache_hooks/mod_php5.c index aafed496cd..93334f67c6 100644 --- a/sapi/apache_hooks/mod_php5.c +++ b/sapi/apache_hooks/mod_php5.c @@ -579,24 +579,26 @@ static void init_request_info(TSRMLS_D) if (r->headers_in) { authorization = table_get(r->headers_in, "Authorization"); } - if (authorization - && !auth_type(r) - && !strcasecmp(getword(r->pool, &authorization, ' '), "Basic")) { - tmp = uudecode(r->pool, authorization); - SG(request_info).auth_user = NULL; - tmp_user = getword_nulls_nc(r->pool, &tmp, ':'); - if (tmp_user) { - r->connection->user = pstrdup(r->connection->pool, tmp_user); - r->connection->ap_auth_type = "Basic"; - SG(request_info).auth_user = estrdup(tmp_user); - } - SG(request_info).auth_password = NULL; - if (tmp) { - SG(request_info).auth_password = estrdup(tmp); + + SG(request_info).auth_user = NULL; + SG(request_info).auth_password = NULL; + + if (authorization && !auth_type(r)) { + if (!strcasecmp(getword(r->pool, &authorization, ' '), "Basic")) { + tmp = uudecode(r->pool, authorization); + tmp_user = getword_nulls_nc(r->pool, &tmp, ':'); + if (tmp_user) { + r->connection->user = pstrdup(r->connection->pool, tmp_user); + r->connection->ap_auth_type = "Basic"; + SG(request_info).auth_user = estrdup(tmp_user); + } + if (tmp) { + SG(request_info).auth_password = estrdup(tmp); + } + } else if (!strcasecmp(getword(r->pool, &authorization, ' '), "Digest")) { + r->connection->ap_auth_type = "Digest"; + SG(request_info).auth_digest = estrdup(authorization); } - } else { - SG(request_info).auth_user = NULL; - SG(request_info).auth_password = NULL; } } /* }}} */ |