Squid Web Cache master
Loading...
Searching...
No Matches
UserRequest.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 1996-2025 The Squid Software Foundation and contributors
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
9#ifndef SQUID_SRC_AUTH_USERREQUEST_H
10#define SQUID_SRC_AUTH_USERREQUEST_H
11
12#if USE_AUTH
13
14#include "AccessLogEntry.h"
15#include "auth/AuthAclState.h"
16#include "auth/Scheme.h"
17#include "auth/User.h"
18#include "dlink.h"
19#include "helper/forward.h"
20#include "HttpHeader.h"
21#include "ip/Address.h"
22
23class ConnStateData;
24class HttpReply;
25class HttpRequest;
26
30// XXX: Keep in sync with all others: bzr grep 'define MAX_AUTHTOKEN_LEN'
31#define MAX_AUTHTOKEN_LEN 65535
32
38{
40
41public:
42 AuthUserIP(const Ip::Address &ip, time_t t) : ipaddr(ip), ip_expiretime(t) {}
43
45
48
54};
55
56// TODO: make auth schedule AsyncCalls?
57typedef void AUTHCB(void*);
58
59namespace Auth
60{
61
62// NP: numeric values specified for old code backward compatibility.
63// remove after transition is complete
70
78{
79public:
81
83 ~UserRequest() override;
84 void *operator new(size_t byteCount);
85 void operator delete(void *address);
86
87public:
94
108
115 virtual bool authenticated() const;
116
127 bool valid() const;
128
129 virtual void authenticate(HttpRequest * request, ConnStateData * conn, Http::HdrType type) = 0;
130
131 /* template method - what needs to be done next? advertise schemes, challenge, handle error, nothing? */
133
134 /* add the [Proxy-]Authentication-Info header */
135 virtual void addAuthenticationInfoHeader(HttpReply * rep, int accel);
136
137 /* add the [Proxy-]Authentication-Info trailer */
138 virtual void addAuthenticationInfoTrailer(HttpReply * rep, int accel);
139
140 virtual void releaseAuthServer();
141
142 // User credentials object this UserRequest is managing
143 virtual User::Pointer user() {return _auth_user;}
144 virtual const User::Pointer user() const {return _auth_user;}
145 virtual void user(User::Pointer aUser) {_auth_user=aUser;}
146
166
168 static void AddReplyAuthHeader(HttpReply * rep, UserRequest::Pointer auth_user_request, HttpRequest * request, int accelerated, int internal);
169
180 void start(HttpRequest *request, AccessLogEntry::Pointer &al, AUTHCB *handler, void *data);
181
182 char const * denyMessage(char const * const default_message = nullptr) const;
183
185 void setDenyMessage(char const *);
186
188 char const * getDenyMessage() const;
189
198 char const *username() const;
199
200 Scheme::Pointer scheme() const;
201
202 virtual const char * connLastHeader();
203
207 virtual const char *credentialsStr() = 0;
208
210
212 void denyMessageFromHelper(char const *proto, const Helper::Reply &reply);
213
214protected:
220 virtual void startHelperLookup(HttpRequest *request, AccessLogEntry::Pointer &al, AUTHCB *handler, void *data) = 0;
221
222private:
223
224 static AuthAclState authenticate(UserRequest::Pointer * auth_user_request, Http::HdrType headertype, HttpRequest * request, ConnStateData * conn, Ip::Address &src_addr, AccessLogEntry::Pointer &al);
225
227 char *message;
228
235};
236
237} // namespace Auth
238
239/* AuthUserRequest */
240
247
251
252#endif /* USE_AUTH */
253#endif /* SQUID_SRC_AUTH_USERREQUEST_H */
254
AuthAclState
#define RefCountable
The locking interface for use on Reference-Counted classes.
Definition Lock.h:66
void authenticateAuthUserRequestRemoveIp(Auth::UserRequest::Pointer, Ip::Address const &)
bool authenticateUserAuthenticated(const Auth::UserRequest::Pointer &)
int authenticateAuthUserRequestIPCount(Auth::UserRequest::Pointer)
void authenticateAuthUserRequestClearIp(Auth::UserRequest::Pointer)
void AUTHCB(void *)
Definition UserRequest.h:57
Ip::Address ipaddr
IP address this user authenticated from.
Definition UserRequest.h:47
dlink_node node
Definition UserRequest.h:44
AuthUserIP(const Ip::Address &ip, time_t t)
Definition UserRequest.h:42
time_t ip_expiretime
Definition UserRequest.h:53
MEMPROXY_CLASS(AuthUserIP)
virtual void addAuthenticationInfoHeader(HttpReply *rep, int accel)
static AuthAclState tryToAuthenticateAndSetAuthUser(UserRequest::Pointer *aUR, Http::HdrType, HttpRequest *, ConnStateData *, Ip::Address &, AccessLogEntry::Pointer &)
const char * helperRequestKeyExtras(HttpRequest *, AccessLogEntry::Pointer &al)
static void AddReplyAuthHeader(HttpReply *rep, UserRequest::Pointer auth_user_request, HttpRequest *request, int accelerated, int internal)
Add the appropriate [Proxy-]Authenticate header to the given reply.
void setDenyMessage(char const *)
virtual bool authenticated() const
void denyMessageFromHelper(char const *proto, const Helper::Reply &reply)
Sets the reason of 'authentication denied' helper response.
virtual void startHelperLookup(HttpRequest *request, AccessLogEntry::Pointer &al, AUTHCB *handler, void *data)=0
Scheme::Pointer scheme() const
virtual const char * credentialsStr()=0
virtual void releaseAuthServer()
virtual const User::Pointer user() const
virtual void addAuthenticationInfoTrailer(HttpReply *rep, int accel)
virtual Direction module_direction()=0
bool valid() const
char const * denyMessage(char const *const default_message=nullptr) const
User::Pointer _auth_user
Definition UserRequest.h:93
void start(HttpRequest *request, AccessLogEntry::Pointer &al, AUTHCB *handler, void *data)
char const * getDenyMessage() const
Direction direction()
AuthAclState lastReply
virtual void user(User::Pointer aUser)
virtual const char * connLastHeader()
char const * username() const
virtual User::Pointer user()
virtual void authenticate(HttpRequest *request, ConnStateData *conn, Http::HdrType type)=0
RefCount< Auth::UserRequest > Pointer
Definition UserRequest.h:80
~UserRequest() override
HTTP Authentication.
Definition Config.h:19
@ CRED_ERROR
ERROR in the auth module. Cannot determine the state of this request.
Definition UserRequest.h:68
@ CRED_CHALLENGE
Client needs to be challenged. secure token.
Definition UserRequest.h:65
@ CRED_LOOKUP
Credentials need to be validated with the backend helper.
Definition UserRequest.h:67
@ CRED_VALID
Credentials are valid and a up to date. The OK/Failed state is accurate.
Definition UserRequest.h:66