mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-18 12:56:56 +00:00
httpauth: Parse the stale field in digest auth
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
7103c8350a
commit
8a3360d18a
@ -57,6 +57,9 @@ static void handle_digest_params(HTTPAuthState *state, const char *key,
|
|||||||
} else if (!strncmp(key, "qop=", key_len)) {
|
} else if (!strncmp(key, "qop=", key_len)) {
|
||||||
*dest = digest->qop;
|
*dest = digest->qop;
|
||||||
*dest_len = sizeof(digest->qop);
|
*dest_len = sizeof(digest->qop);
|
||||||
|
} else if (!strncmp(key, "stale=", key_len)) {
|
||||||
|
*dest = digest->stale;
|
||||||
|
*dest_len = sizeof(digest->stale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,6 +96,7 @@ void ff_http_auth_handle_header(HTTPAuthState *state, const char *key,
|
|||||||
state->auth_type <= HTTP_AUTH_BASIC) {
|
state->auth_type <= HTTP_AUTH_BASIC) {
|
||||||
state->auth_type = HTTP_AUTH_BASIC;
|
state->auth_type = HTTP_AUTH_BASIC;
|
||||||
state->realm[0] = 0;
|
state->realm[0] = 0;
|
||||||
|
state->stale = 0;
|
||||||
ff_parse_key_value(p, (ff_parse_key_val_cb) handle_basic_params,
|
ff_parse_key_value(p, (ff_parse_key_val_cb) handle_basic_params,
|
||||||
state);
|
state);
|
||||||
} else if (av_stristart(value, "Digest ", &p) &&
|
} else if (av_stristart(value, "Digest ", &p) &&
|
||||||
@ -100,10 +104,13 @@ void ff_http_auth_handle_header(HTTPAuthState *state, const char *key,
|
|||||||
state->auth_type = HTTP_AUTH_DIGEST;
|
state->auth_type = HTTP_AUTH_DIGEST;
|
||||||
memset(&state->digest_params, 0, sizeof(DigestParams));
|
memset(&state->digest_params, 0, sizeof(DigestParams));
|
||||||
state->realm[0] = 0;
|
state->realm[0] = 0;
|
||||||
|
state->stale = 0;
|
||||||
ff_parse_key_value(p, (ff_parse_key_val_cb) handle_digest_params,
|
ff_parse_key_value(p, (ff_parse_key_val_cb) handle_digest_params,
|
||||||
state);
|
state);
|
||||||
choose_qop(state->digest_params.qop,
|
choose_qop(state->digest_params.qop,
|
||||||
sizeof(state->digest_params.qop));
|
sizeof(state->digest_params.qop));
|
||||||
|
if (!av_strcasecmp(state->digest_params.stale, "true"))
|
||||||
|
state->stale = 1;
|
||||||
}
|
}
|
||||||
} else if (!strcmp(key, "Authentication-Info")) {
|
} else if (!strcmp(key, "Authentication-Info")) {
|
||||||
ff_parse_key_value(value, (ff_parse_key_val_cb) handle_digest_update,
|
ff_parse_key_value(value, (ff_parse_key_val_cb) handle_digest_update,
|
||||||
@ -237,6 +244,9 @@ char *ff_http_auth_create_response(HTTPAuthState *state, const char *auth,
|
|||||||
{
|
{
|
||||||
char *authstr = NULL;
|
char *authstr = NULL;
|
||||||
|
|
||||||
|
/* Clear the stale flag, we assume the auth is ok now. It is reset
|
||||||
|
* by the server headers if there's a new issue. */
|
||||||
|
state->stale = 0;
|
||||||
if (!auth || !strchr(auth, ':'))
|
if (!auth || !strchr(auth, ':'))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -41,6 +41,9 @@ typedef struct {
|
|||||||
char opaque[300]; /**< A server-specified string that should be
|
char opaque[300]; /**< A server-specified string that should be
|
||||||
* included in authentication responses, not
|
* included in authentication responses, not
|
||||||
* included in the actual digest calculation. */
|
* included in the actual digest calculation. */
|
||||||
|
char stale[10]; /**< The server indicated that the auth was ok,
|
||||||
|
* but needs to be redone with a new, non-stale
|
||||||
|
* nonce. */
|
||||||
int nc; /**< Nonce count, the number of earlier replies
|
int nc; /**< Nonce count, the number of earlier replies
|
||||||
* where this particular nonce has been used. */
|
* where this particular nonce has been used. */
|
||||||
} DigestParams;
|
} DigestParams;
|
||||||
@ -62,6 +65,10 @@ typedef struct {
|
|||||||
* The parameters specifiec to digest authentication.
|
* The parameters specifiec to digest authentication.
|
||||||
*/
|
*/
|
||||||
DigestParams digest_params;
|
DigestParams digest_params;
|
||||||
|
/**
|
||||||
|
* Auth ok, but needs to be resent with a new nonce.
|
||||||
|
*/
|
||||||
|
int stale;
|
||||||
} HTTPAuthState;
|
} HTTPAuthState;
|
||||||
|
|
||||||
void ff_http_auth_handle_header(HTTPAuthState *state, const char *key,
|
void ff_http_auth_handle_header(HTTPAuthState *state, const char *key,
|
||||||
|
Loading…
Reference in New Issue
Block a user