Setting a Transaction Hook
If the request does not have the Proxy-Authorization
field set to Basic authorization or a valid username/password, then the plugin sends the 407 Proxy authorization required
status code back to the client. The client will then prompt the user for a username and password, and then resend the request.
In the handle_dns
routine, the following lines handle the authorization error case:
done:
TSHttpTxnHookAdd (txnp, TS_HTTP_SEND_RESPONSE_HDR_HOOK, contp);
TSHttpTxnReenable (txnp, TS_EVENT_HTTP_ERROR);
If handle_dns
does not find the Proxy-Authorization
field set to Basic authorization or a valid username/password, then it adds a SEND_RESPONSE_HDR_HOOK
to the transaction being processed. This means that Traffic Server will call the plugin back when sending the client response. handle_dns
reenables the transaction with TS_EVENT_HTTP_ERROR
, which means that the plugin wants Traffic Server to terminate the transaction.
When Traffic Server terminates the transaction, it sends the client an error message. Because of the SEND_RESPONSE_HDR_HOOK
, Traffic Server calls the plugin back. The auth-plugin
routine calls handle_response
to send the client a 407
status code. When the client resends the request with the Proxy-Authorization
field, a new transaction begins.
handle_dns
calls base64_decode
to decode the username and password; handle_dns
also calls authorized
to validate the username and password. In this plugin, sample NT code is provided for password validation. UNIX programmers can supply their own validation mechanism.