#include "squid.h"
#include "anyp/PortCfg.h"
#include "base/Subscription.h"
#include "client_side.h"
#include "fatal.h"
#include "fde.h"
#include "fqdncache.h"
#include "fs_io.h"
#include "htcp.h"
#include "http/Stream.h"
#include "ICP.h"
#include "ip/Intercept.h"
#include "ip/QosConfig.h"
#include "ipc/Coordinator.h"
#include "ipc/Kids.h"
#include "ipcache.h"
#include "MemBuf.h"
#include "sbuf/Stream.h"
#include "SquidConfig.h"
#include "SquidMath.h"
#include "store/Disks.h"
#include "tools.h"
#include "wordlist.h"
#include <cerrno>

Go to the source code of this file.
Macros | |
#define | DEAD_MSG "\The Squid Cache (version %s) died.\n\\n\You've encountered a fatal error in the Squid Cache version %s.\n\If a core file was created (possibly in the swap directory),\n\please execute 'gdb squid core' or 'dbx squid core', then type 'where',\n\and report the trace back to squid-bugs@lists.squid-cache.org.\n\\n\Thanks!\n" |
#define | HAVE_GETPAGESIZE 0 |
Functions | |
static void | mail_warranty (void) |
static void | restoreCapabilities (bool keep) |
void | releaseServerSockets (void) |
static char * | dead_msg (void) |
void | dumpMallocStats (void) |
void | squid_getrusage (struct rusage *r) |
double | rusage_cputime (struct rusage *r) |
int | rusage_maxrss (struct rusage *r) |
int | rusage_pagefaults (struct rusage *r) |
static void | makeTraceable () |
static void | setTraceability () |
void | PrintRusage (void) |
void | death (int sig) |
void | BroadcastSignalIfAny (int &sig) |
void | sigusr2_handle (int sig) |
void | debug_trap (const char *message) |
const char * | getMyHostname (void) |
const char * | uniqueHostname (void) |
void | leave_suid (void) |
void | enter_suid (void) |
void | no_suid (void) |
bool | IamMasterProcess () |
whether the current process is the parent of all other Squid processes More... | |
bool | IamWorkerProcess () |
whether the current process handles HTTP transactions and such More... | |
bool | IamDiskProcess () |
whether the current process is dedicated to managing a cache_dir More... | |
bool | InDaemonMode () |
Whether we are running in daemon mode. More... | |
bool | UsingSmp () |
Whether there should be more than one worker process running. More... | |
bool | IamCoordinatorProcess () |
whether the current process coordinates worker processes More... | |
bool | IamPrimaryProcess () |
int | NumberOfKids () |
number of Kid processes as defined in src/ipc/Kid.h More... | |
SBuf | ProcessRoles () |
a string describing this process roles such as worker or coordinator More... | |
void | setMaxFD (void) |
void | setSystemLimits (void) |
void | squid_signal (int sig, SIGHDLR *func, int flags) |
void | logsFlush (void) |
void | debugObj (int section, int level, const char *label, void *obj, ObjPackMethod pm) |
void | parseEtcHosts (void) |
int | getMyPort (void) |
void | setUmask (mode_t mask) |
void | strwordquote (MemBuf *mb, const char *str) |
void | keepCapabilities (void) |
pid_t | WaitForOnePid (pid_t pid, PidStatus &status, int flags) |
Variables | |
int | DebugSignal = -1 |
SBuf | service_name (APP_SHORTNAME) |
static char | tmp_error_buf [32768] |
Macro Definition Documentation
◆ DEAD_MSG
#define DEAD_MSG "\The Squid Cache (version %s) died.\n\\n\You've encountered a fatal error in the Squid Cache version %s.\n\If a core file was created (possibly in the swap directory),\n\please execute 'gdb squid core' or 'dbx squid core', then type 'where',\n\and report the trace back to squid-bugs@lists.squid-cache.org.\n\\n\Thanks!\n" |
◆ HAVE_GETPAGESIZE
Function Documentation
◆ BroadcastSignalIfAny()
void BroadcastSignalIfAny | ( | int & | sig | ) |
Definition at line 415 of file tools.cc.
References Kids::count(), Kids::get(), IamMasterProcess(), and TheKids.
Referenced by masterCheckAndBroadcastSignals().
◆ dead_msg()
|
static |
Definition at line 104 of file tools.cc.
References DEAD_MSG, LOCAL_ARRAY, and version_string.
Referenced by death(), and mail_warranty().
◆ death()
void death | ( | int | sig | ) |
Definition at line 342 of file tools.cc.
References SquidConfig::adminEmail, Config, DBG_CRITICAL, dead_msg(), debug_log, debugs, dumpMallocStats(), ForceAlert(), mail_warranty(), Debug::PrepareToDie(), PrintRusage(), releaseServerSockets(), shutting_down, squid_curtime, SQUID_RELEASE_TIME, and storeDirWriteCleanLogs().
Referenced by mainInitialize().
◆ debug_trap()
void debug_trap | ( | const char * | message | ) |
Definition at line 455 of file tools.cc.
References DBG_CRITICAL, debugs, fatal_dump(), and opt_catch_signals.
Referenced by EventScheduler::cancel(), clientdbEstablished(), clientdbUpdate(), neighborsUdpAck(), netdbHashDelete(), and unlinkdUnlink().
◆ debugObj()
void debugObj | ( | int | section, |
int | level, | ||
const char * | label, | ||
void * | obj, | ||
ObjPackMethod | pm | ||
) |
Definition at line 935 of file tools.cc.
References assert, MemBuf::buf, MemBuf::clean(), debugs, and MemBuf::init().
Referenced by clientInterpretRequestHeaders(), and internalStart().
◆ dumpMallocStats()
void dumpMallocStats | ( | void | ) |
Definition at line 163 of file tools.cc.
References debug_log, and Math::intPercent().
Referenced by death(), fatal_common(), and SquidShutdown().
◆ enter_suid()
void enter_suid | ( | void | ) |
Definition at line 620 of file tools.cc.
References debugs, setTraceability(), and xstrerr().
Referenced by comm_set_transparent(), htcpOpenPorts(), icpOpenPorts(), mainReconfigureFinish(), File::open(), Ipc::Coordinator::openListenSocket(), Ip::Intercept::ProbeForTproxy(), RemoveInstance(), squid_getrusage(), SquidMain(), Ipc::StartListening(), StartUsingConfig(), and watch_child().
◆ getMyHostname()
const char* getMyHostname | ( | void | ) |
Definition at line 464 of file tools.cc.
References addrinfo::ai_addr, addrinfo::ai_addrlen, AI_CANONNAME, addrinfo::ai_flags, Config, DBG_CRITICAL, DBG_IMPORTANT, debugs, Ip::Address::FreeAddr(), freeaddrinfo(), getaddrinfo(), Ip::Address::getAddrInfo(), getnameinfo(), HttpPortList, Ip::Address::isAnyAddr(), LOCAL_ARRAY, NI_NAMEREQD, NULL, SQUIDHOSTNAMELEN, SquidConfig::visibleHostname, and xstrerr().
Referenced by ErrorState::compileLegacyCode(), configDoConfigure(), ErrorState::Dump(), gopherHTMLFooter(), idnsParseResolvConf(), internalHostname(), internalLocalUri(), neighbors_init(), send_announce(), uniqueHostname(), and urnHandleReply().
◆ getMyPort()
int getMyPort | ( | void | ) |
Definition at line 1038 of file tools.cc.
References DBG_CRITICAL, debugs, FtpPortList, HttpPortList, and NULL.
Referenced by clientProcessRequest(), ErrorState::compileLegacyCode(), internalLocalUri(), and send_announce().
◆ IamCoordinatorProcess()
bool IamCoordinatorProcess | ( | ) |
Definition at line 699 of file tools.cc.
References pkCoordinator, and TheProcessKind.
Referenced by IamPrimaryProcess(), ProcessRoles(), and SquidMain().
◆ IamDiskProcess()
bool IamDiskProcess | ( | ) |
Definition at line 681 of file tools.cc.
References pkDisker, and TheProcessKind.
Referenced by ProcessRoles().
◆ IamMasterProcess()
bool IamMasterProcess | ( | ) |
Definition at line 665 of file tools.cc.
References KidIdentifier.
Referenced by BroadcastSignalIfAny(), SignalEngine::doShutdown(), ProcessRoles(), SquidMain(), StartUsingConfig(), and Ipc::Mem::RegisteredRunner::useConfig().
◆ IamPrimaryProcess()
bool IamPrimaryProcess | ( | ) |
whether the current process is dedicated to doing things that only a single process should do, such as PID file maintenance and WCCP
Definition at line 705 of file tools.cc.
References Config, IamCoordinatorProcess(), IamWorkerProcess(), NumberOfKids(), opt_no_daemon, and SquidConfig::workers.
Referenced by Mgr::InfoAction::dump(), mainInitialize(), mainReconfigureFinish(), serverConnectionsClose(), serverConnectionsOpen(), and SquidMain().
◆ IamWorkerProcess()
bool IamWorkerProcess | ( | ) |
Definition at line 671 of file tools.cc.
References Config, opt_no_daemon, pkWorker, TheProcessKind, and SquidConfig::workers.
Referenced by IamPrimaryProcess(), and ProcessRoles().
◆ InDaemonMode()
bool InDaemonMode | ( | ) |
Definition at line 687 of file tools.cc.
References Config, opt_no_daemon, and SquidConfig::workers.
Referenced by Store::Disks::configure(), CpuAffinityCheck(), CpuAffinityInit(), Rock::SwapDir::needsDiskStrand(), NumberOfKids(), SquidMain(), StartUsingConfig(), Ipc::Mem::RegisteredRunner::useConfig(), and UsingSmp().
◆ keepCapabilities()
void keepCapabilities | ( | void | ) |
Definition at line 1119 of file tools.cc.
References Ip::Interceptor, and Ip::Intercept::StopTransparency().
◆ leave_suid()
void leave_suid | ( | void | ) |
leave a privileged section. (Give up any privilegies) Routines that need privilegies can rap themselves in enter_suid() and leave_suid() To give upp all posibilites to gain privilegies use no_suid()
Definition at line 556 of file tools.cc.
References Config, Config2, DBG_CRITICAL, debugs, SquidConfig::effectiveGroup, SquidConfig2::effectiveGroupID, SquidConfig::effectiveUser, SquidConfig2::effectiveUserID, fatalf(), initgroups(), NULL, restoreCapabilities(), setTraceability(), and xstrerr().
Referenced by comm_set_transparent(), fatal(), fatal_dump(), htcpOpenPorts(), icpOpenPorts(), no_suid(), File::open(), Ipc::Coordinator::openListenSocket(), Ip::Intercept::ProbeForTproxy(), RemoveInstance(), setEffectiveUser(), squid_getrusage(), SquidMain(), Ipc::StartListening(), StartUsingConfig(), and watch_child().
◆ logsFlush()
◆ mail_warranty()
|
static |
Definition at line 112 of file tools.cc.
References SquidConfig::adminEmail, APP_SHORTNAME, Config, dead_msg(), SquidConfig::EmailFrom, SquidConfig::EmailProgram, NULL, tempnam(), uniqueHostname(), and xfree.
Referenced by death().
◆ makeTraceable()
|
static |
Make the process traceable if possible. Call setTraceability() instead! Traceable processes may support attachment via ptrace(2) or ktrace(2), debugging sysctls, hwpmc(4), dtrace(1) and core dumping.
Definition at line 285 of file tools.cc.
References debugs, Here, ToSBuf(), and xstrerr().
Referenced by setTraceability().
◆ no_suid()
void no_suid | ( | void | ) |
Definition at line 643 of file tools.cc.
References DBG_IMPORTANT, debugs, leave_suid(), restoreCapabilities(), setTraceability(), and xstrerr().
Referenced by ipcCreate(), mainInitialize(), and SquidMain().
◆ NumberOfKids()
int NumberOfKids | ( | ) |
Definition at line 721 of file tools.cc.
References SquidConfig::cacheSwap, Config, InDaemonMode(), Store::DiskConfig::n_strands, and SquidConfig::workers.
Referenced by CpuAffinityCheck(), IamPrimaryProcess(), Kids::init(), and UsingSmp().
◆ parseEtcHosts()
void parseEtcHosts | ( | void | ) |
Definition at line 946 of file tools.cc.
References SquidConfig::appendDomain, Config, DBG_IMPORTANT, debugs, SquidConfig::etcHostsPath, fqdncacheAddEntryFromHosts(), ipcacheAddEntryFromHosts(), NULL, O_TEXT, w_space, and xstrerr().
◆ PrintRusage()
void PrintRusage | ( | void | ) |
Definition at line 326 of file tools.cc.
References debug_log, rusage::ru_stime, rusage::ru_utime, rusage_cputime(), rusage_maxrss(), rusage_pagefaults(), and squid_getrusage().
Referenced by death(), fatal_common(), and SquidShutdown().
◆ ProcessRoles()
SBuf ProcessRoles | ( | ) |
Definition at line 736 of file tools.cc.
References SBuf::append(), IamCoordinatorProcess(), IamDiskProcess(), IamMasterProcess(), and IamWorkerProcess().
Referenced by mainInitialize().
◆ releaseServerSockets()
void releaseServerSockets | ( | void | ) |
Definition at line 89 of file tools.cc.
References clientConnectionsClose(), and icpClosePorts().
Referenced by death().
◆ restoreCapabilities()
|
static |
Definition at line 1130 of file tools.cc.
References Ip::Interceptor, Ip::Intercept::StopTransparency(), and Ip::Qos::TheConfig.
Referenced by leave_suid(), and no_suid().
◆ rusage_cputime()
Definition at line 235 of file tools.cc.
References double, rusage::ru_stime, and rusage::ru_utime.
Referenced by GetCountersStats(), GetInfo(), PrintRusage(), snmp_prfSysFn(), and statAvgTick().
◆ rusage_maxrss()
Definition at line 250 of file tools.cc.
References rusage::ru_maxrss.
Referenced by GetInfo(), PrintRusage(), and snmp_prfSysFn().
◆ rusage_pagefaults()
Definition at line 271 of file tools.cc.
References rusage::ru_majflt.
Referenced by GetCountersStats(), GetInfo(), PrintRusage(), snmp_prfSysFn(), and statAvgTick().
◆ setMaxFD()
void setMaxFD | ( | void | ) |
Figure out the number of supported filedescriptors
Definition at line 759 of file tools.cc.
References Config, DBG_CRITICAL, debugs, SquidConfig::max_filedescriptors, Squid_MaxFD, and xstrerr().
Referenced by StartUsingConfig().
◆ setSystemLimits()
void setSystemLimits | ( | void | ) |
Definition at line 808 of file tools.cc.
References Config, DBG_CRITICAL, DBG_IMPORTANT, debugs, fatal_dump(), SquidConfig::max_filedescriptors, Squid_MaxFD, tmp_error_buf, and xstrerr().
Referenced by mainInitialize().
◆ setTraceability()
|
static |
Make the process traceable if necessary.
- See also
- makeTraceable()
Definition at line 311 of file tools.cc.
References Config, SquidConfig::coredump_dir, CurrentException(), DBG_IMPORTANT, debugs, Debug::Extra(), and makeTraceable().
Referenced by enter_suid(), leave_suid(), and no_suid().
◆ setUmask()
void setUmask | ( | mode_t | mask | ) |
Definition at line 1066 of file tools.cc.
Referenced by mainReconfigureFinish(), and SquidMain().
◆ sigusr2_handle()
void sigusr2_handle | ( | int | sig | ) |
Definition at line 430 of file tools.cc.
References DBG_CRITICAL, Debug::debugOptions, debugs, DebugSignal, Debug::parseOptions(), sigusr2_handle(), and xstrerr().
Referenced by mainHandleCommandLineOption(), mainInitialize(), sigusr2_handle(), watch_child(), and WIN32_svcHandler().
◆ squid_getrusage()
void squid_getrusage | ( | struct rusage * | r | ) |
Definition at line 177 of file tools.cc.
References enter_suid(), FALSE, leave_suid(), rusage::ru_majflt, rusage::ru_maxrss, rusage::ru_stime, and rusage::ru_utime.
Referenced by GetCountersStats(), GetInfo(), PrintRusage(), snmp_prfSysFn(), and statAvgTick().
◆ squid_signal()
Definition at line 870 of file tools.cc.
References DBG_CRITICAL, debugs, NULL, and xstrerr().
Referenced by mainInitialize(), and watch_child().
◆ strwordquote()
void strwordquote | ( | MemBuf * | mb, |
const char * | str | ||
) |
Definition at line 1077 of file tools.cc.
References MemBuf::append().
Referenced by Format::Format::assemble(), and makeExternalAclKey().
◆ uniqueHostname()
const char* uniqueHostname | ( | void | ) |
Definition at line 544 of file tools.cc.
References Config, debugs, getMyHostname(), and SquidConfig::uniqueHostname.
Referenced by clientReplyContext::buildReplyHeader(), configDoConfigure(), mail_warranty(), and snmp_confFn().
◆ UsingSmp()
bool UsingSmp | ( | ) |
Definition at line 693 of file tools.cc.
References InDaemonMode(), and NumberOfKids().
Referenced by Rock::SwapDir::create(), Rock::SwapDir::doReportStat(), Mgr::FunAction::dump(), Mgr::InfoAction::dump(), Ipc::Mem::Segment::Enabled(), Transients::EntryLimit(), MemStoreRr::finalizeConfig(), CollapsedForwarding::Init(), Rock::Rebuild::IsResponsible(), snmpConstructReponse(), SquidMain(), CacheManager::start(), Ipc::StartListening(), and statObjects().
◆ WaitForOnePid()
Compatibility wrapper function for waitpid \pid the pid of child process to wait for.
- Parameters
-
status the exit status returned by waitpid flags WNOHANG or 0
Definition at line 1177 of file tools.cc.
References pid.
Referenced by mainStartScript(), and WaitForAnyPid().
Variable Documentation
◆ DebugSignal
int DebugSignal = -1 |
Definition at line 70 of file tools.cc.
Referenced by sigusr2_handle().
◆ service_name
SBuf service_name(APP_SHORTNAME) |
The Squid -n parameter service name. Default is APP_SHORTNAME ('squid').
◆ tmp_error_buf
|
static |
Definition at line 86 of file tools.cc.
Referenced by setSystemLimits().