ModSecurity Tools – OWASP ModSecurity Core Rule Set, with OpenCart v3.x

When we implemented ModSecurity™ Tools with vendor OWASP ModSecurity Core Rule Set, OpenCart site displayed strange behavior.

We had to disable three of the 21+ core rules to make our OpenCart site act and preform normal again. Below are the three rules we had to disable.

Hope this helps others who may have a VPS/server that has implemented ModSecurity™ Tools for Cpanel/WHM..

Rules we had to disable
rules/REQUEST-33-APPLICATION-ATTACK-PHP.conf
rules/REQUEST-41-APPLICATION-ATTACK-XSS.conf
rules/REQUEST-42-APPLICATION-ATTACK-SQLI.conf

Stephen Hawking Dies at 76

Stephen W. Hawking, the Cambridge University physicist and best-selling author who roamed the cosmos from a wheelchair, pondering the nature of gravity and the origin of the universe and becoming an emblem of human determination and curiosity, died early Wednesday at his home in Cambridge, England. He was 76.

His death was confirmed by a spokesman for Cambridge University.

“Not since Albert Einstein has a scientist so captured the public imagination and endeared himself to tens of millions of people around the world,” Michio Kaku, a professor of theoretical physics at the City University of New York, said in an interview.

Dr. Hawking did that largely through his book “A Brief History of Time: From the Big Bang to Black Holes,” published in 1988. It has sold more than 10 million copies and inspired a documentary film by Errol Morris. The 2014 film about his life, “The Theory of Everything,” was nominated for several Academy Awards and Eddie Redmayne, who played Dr. Hawking, won the Oscar for best actor.

Scientifically, Dr. Hawking will be best remembered for a discovery so strange that it might be expressed in the form of a Zen koan: When is a black hole not black? When it explodes.

What is equally amazing is that he had a career at all. As a graduate student in 1963, he learned he had amyotrophic lateral sclerosis, a neuromuscular wasting disease also known as Lou Gehrig’s disease. He was given only a few years to live.
The disease reduced his bodily control to the flexing of a finger and voluntary eye movements but left his mental faculties untouched.

He went on to become his generation’s leader in exploring gravity and the properties of black holes, the bottomless gravitational pits so deep and dense that not even light can escape them.

That work led to a turning point in modern physics, playing itself out in the closing months of 1973 on the walls of his brain when Dr. Hawking set out to apply quantum theory, the weird laws that govern subatomic reality, to black holes. In a long and daunting calculation, Dr. Hawking discovered to his befuddlement that black holes — those mythological avatars of cosmic doom — were not really black at all. In fact, he found, they would eventually fizzle, leaking radiation and particles, and finally explode and disappear over the eons.

Nobody, including Dr. Hawking, believed it at first — that particles could be coming out of a black hole. “I wasn’t looking for them at all,” he recalled in an interview in 1978. “I merely tripped over them. I was rather annoyed.”

That calculation, in a thesis published in 1974 in the journal Nature under the title “Black Hole Explosions?,” is hailed by scientists as the first great landmark in the struggle to find a single theory of nature — to connect gravity and quantum mechanics, those warring descriptions of the large and the small, to explain a universe that seems stranger than anybody had thought.

The discovery of Hawking radiation, as it is known, turned black holes upside down. It transformed them from destroyers to creators — or at least to recyclers — and wrenched the dream of a final theory in a strange, new direction.

“You can ask what will happen to someone who jumps into a black hole,” Dr. Hawking said in an interview in 1978. “I certainly don’t think he will survive it.

“On the other hand,” he added, “if we send someone off to jump into a black hole, neither he nor his constituent atoms will come back, but his mass energy will come back. Maybe that applies to the whole universe.”

Dennis W. Sciama, a cosmologist and Dr. Hawking’s thesis adviser at Cambridge, called Hawking’s thesis in Nature “the most beautiful paper in the history of physics.”

Official website : http://www.hawking.org.uk/

WIKI : https://en.wikipedia.org/wiki/Stephen_Hawking

Hawking (2013) documentary by Stephen Finnigan.

https://en.wikipedia.org/wiki/Gravity

Configuring CA or Certificate Authority with pfSence

NOTES: If you are using Firefox, you must import the ROOT-CA Certificate that you have generated on your pfSense firewall. I noticed using Chrome that you don’t need to import the ROOT CA Certificate to make it work on the Local Side!

In the menu of your Firefox Browser navigate here >

> Tools > Options > Privacy & Security > “Scroll down” click on View Certificate.

Check both options and import!

Et voilà!!!

Now in Firefox your pfSense will be secured using your CA Certificate on the local side 😉

You may check for the certificate in Firefox

Enjoy!

DNSBL LIST

Type Description Link
DNSBL AD_AdAway http://adaway.org/hosts.txt
DNSBL AD_Cameleon http://sysctl.org/cameleon/hosts
DNSBL AD_MalwareBytes_HpHosts_Ads https://hosts-file.net/ad_servers.txt
DNSBL ads http://hosts-file.net/ad_servers.txt
DNSBL ads http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext
DNSBL ads https://adaway.org/hosts.txt
DNSBL Ads/ncoin https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt
DNSBL BBCan178_DGA http://osint.bambenekconsulting.com/feeds/dga-feed.gz
DNSBL BBCan178_malware https://gist.githubusercontent.com/BBcan177/4a8bf37c131be4803cb2/raw
DNSBL BBCan178_MS-2 https://gist.githubusercontent.com/BBcan177/4a8bf37c131be4803cb2/raw/396eb85f00418569cd5e82f71b9d96275163d970/MS-2
DNSBL malicious_dshield_SD https://www.dshield.org/feeds/suspiciousdomains_High.txt
DNSBL malicious_hpHosts_zip http://hosts-file.net/download/hosts.zip
DNSBL malicious_malc1de https://malc0de.com/bl/BOOT
DNSBL malicious_MDL http://www.malwaredomainlist.com/hostslist/hosts.txt
DNSBL malicious_MVPS http://winhelp2003.mvps.org/hosts.txt
DNSBL malicious_SWC http://someonewhocares.org/hosts/hosts
DNSBL malicious_Zeus https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist
DNSBL Malware domains list https://www.malwaredomainlist.com/hostslist/hosts.txt
DNSBL Malware Exploit DNS Group https://lists.malwarepatrol.net/cgi/getfile?receipt=f1442112771&product=8&list=dansguardian
DNSBL Malware Exploit DNS Group https://s4.amazonaws.com/lists.disconnect.me/simple_malvertising.txt
DNSBL Malware Exploit DNS Group https://s4.amazonaws.com/lists.disconnect.me/simple_malware.txt
DNSBL Malware http://mirror2.malwaredomains.com/files/justdomains
DNSBL MW_MalwareBytes_HpHosts_Exploits https://hosts-file.net/exp.txt
DNSBL MW_MalwareBytes_HpHosts_Fraud https://hosts-file.net/fsa.txt
DNSBL MW_MalwareBytes_HpHosts_Hijacks https://hosts-file.net/hjk.txt
DNSBL MW_MalwareBytes_HpHosts_Malware https://hosts-file.net/emd.txt
DNSBL MW_MalwareBytes_HpHosts_Misleading https://hosts-file.net/mmt.txt
DNSBL MW_MalwareBytes_HpHosts_Phishing https://hosts-file.net/psh.txt
DNSBL MW_MalwareBytes_HpHosts_PUP https://hosts-file.net/pup.txt
DNSBL MW_MalwareBytes_HpHosts_Spam_2 https://hosts-file.net/grm.txt
DNSBL MW_MalwareBytes_HpHosts_Spam_3 https://hosts-file.net/hfs.txt
DNSBL MW_MalwareDomains https://mirror2.malwaredomains.com/files/justdomains
DNSBL MW_SuspiciousDomains_High https://dshield.org/feeds/suspiciousdomains_High.txt
DNSBL MW_SuspiciousDomains_Medium https://dshield.org/feeds/suspiciousdomains_Medium.txt
DNSBL phising http://hosts-file.net/psh.txt
DNSBL Privacy Fraud DNS Group http://hosts-file.net/pha.txt
DNSBL Ransomware Tracker Blacklists https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt
DNSBL Ransomware Tracker Blacklists https://ransomwaretracker.abuse.ch/downloads/RW_URLBL.txt
DNSBL Ransomwaretracker https://ransomwaretracker.abuse.ch/downloads/RW_IPBL.txt
DNSBL StevenBlacksList https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
DNSBL Windows Telemetry https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/win11/spy.txt
DNSBL Windows Telemetry https://raw.githubusercontent.com/WindowsLies/BlockWindows/master/hostslist
IPv4 Abuse_DYRE https://sslbl.abuse.ch/blacklist/dyre_sslipblacklist.csv
IPv4 Abuse_DYRE https://sslbl.abuse.ch/blacklist/dyre_sslipblacklist_aggressive.csv
IPv4 Abuse_SSLBL https://sslbl.abuse.ch/blacklist/sslipblacklist.csv
IPv4 Abuse_SSLBL https://sslbl.abuse.ch/blacklist/sslipblacklist_aggressive.csv
IPv4 Abuse_Zeus https://zeustracker.abuse.ch/blocklist.php?download=badips
IPv4 Abuse_Zeus https://zeustracker.abuse.ch/blocklist.php?download=ipblocklist
IPv4 BinaryDefense_BanList https://www.binarydefense.com/banlist.txt
IPv4 Emerging threats block IP’s https://rules.emergingthreats.net/fwrules/emerging-Block-IPs.txt
IPv4 Emerging Threats https://rules.emergingthreats.net/blockrules/compromised-ips.txt
IPv4 Feodotracker https://feodotracker.abuse.ch/blocklist/?download=badips
IPv4 Feodotracker https://feodotracker.abuse.ch/blocklist/?download=ipblocklist
IPv4 Firehol_Level3 https://raw.githubusercontent.com/firehol/blocklist-ipsets/master/firehol_level3.netset
IPv4 malc0de http://malc0de.com/bl/IP_Blacklist.txt
IPv4 TorNodes – helps with wannacry and alike https://www.dan.me.uk (get the list on his website)
IPv4 WindowsSpyBlocker_spy https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/firewall/win

Request denied by pfSense proxy SquidGuard: 403 Forbidden

Request denied by pfSense v 2.4.x proxy SquidGuard: 403 Forbidden

To fix this…

Navigate to 

> Services > SquidGuard Proxy Filter >

> SquidGuard Proxy Filter > Common ACL >

Target Rules! Just type : all

Click the + Sign icon

Under Target Categories select > access “Allow”

Click Save!

When you make any changes to SquidGuard, you need to remember to go back to the General settings page and click the Apply button or nothing you did will take effect.

Also don’t forget to empty your browser cache.

STUN Awareness

Setting the Scene

Zepko Analysts decided to try to track down ransomware threat actors using a different approach.

Zepko were recently approached by a company who were hit with ransomware which was identified by Zepko Analysts as a variant of CrySiS ransomware using file extensions .dharma, .wallet or .zzzzz.

Analysts have had previous experience dealing with CrySiS ransomware and discovered that the Threat Actors often use RDP brute force attacks to login, kill the antivirus and monitoring processes, then execute the ransomware payload. To find out more regarding ransomware over RDP attacks visit https://news.zepko.com/ransomware-over-rdp/

Leading on from this, as we know, most ransomware types leave a contact email address in the ransom note or in the file extension, which is used as a direct point of contact with the Threat Actor. This is the email address to directly talk about the payment methods, usually in return for a decryption tool for the encrypted files. In this correspondence Threat Actors also sometimes offer to decrypt one or two files to prove they are able to decrypt files as promised.

Using the email address in the ransom note, Analysts attempted to see if it was possible to somehow use this direct contact with the Threat Actor as a way of tracking them down.

To do this they decided to use a method utilising the STUN protocol, otherwise known as Simple Traversal of User Datagram Protocol (UDP) through Network Address Translators (NAT’s)). Quite a mouthful.

The protocol has a number of different uses but simply put, STUN is a tool which can be used to detect and traverse NATs that are located between two endpoints. When a blinding request is sent over UDP from a client operating from a private network, the STUN server responds with the IP and port number of the client. A full, (and much better) explanation of the STUN Protocol can be found on Wikipedia at https://en.wikipedia.org/wiki/STUN

To perform a stun request on a ransomware Threat Actor, Analysts used a hidden PHP script in an image to perform the STUN request once a link is clicked by the Threat Actor.

To do this, Analysts created a website with a webpage that displayed an image. This image contained the hidden PHP script that when the image is visited in a web browser it loads the PHP script and would initiate the STUN request which the response was logged containing the IP address of the person who clicked the link. This IP address would be that of the threat actor.

Because this was being sent in the form of a suspicious looking link it was highly unlikely that the threat actor would click it. To entice the Threat Actor to click the link, Analysts posed as a finance company who had been hit with the ransomware who were ready to pay the ransom.
Emailing the Threat Actor

Below is the email chain between Analysts and the Threat Actors. The email address contacted was injury@india.com. Spelling mistakes and typos were purposely made throughout the email correspondence to make it appear as if the message had been sent by someone who is not especially familiar with using computers.

Source : https://news.zepko.com/ransomware-threat-actors-stun/

STUN server ports : UDP 3478, TCP/TLS 5349

notes

libcurl error codes

NAME

libcurl-errors – error codes in libcurl

DESCRIPTION

This man page includes most, if not all, available error codes in libcurl. Why they occur and possibly what you can do to fix the problem are also included.

CURLcode

Almost all “easy” interface functions return a CURLcode error code. No matter what, using the curl_easy_setopt option CURLOPT_ERRORBUFFER is a good idea as it will give you a human readable error string that may offer more details about the cause of the error than just the error code. curl_easy_strerror can be called to get an error string from a given CURLcode number.

CURLcode is one of the following:

CURLE_OK (0)

All fine. Proceed as usual.

CURLE_UNSUPPORTED_PROTOCOL (1)

The URL you passed to libcurl used a protocol that this libcurl does not support. The support might be a compile-time option that you didn’t use, it can be a misspelled protocol string or just a protocol libcurl has no code for.

CURLE_FAILED_INIT (2)

Very early initialization code failed. This is likely to be an internal error or problem, or a resource problem where something fundamental couldn’t get done at init time.

CURLE_URL_MALFORMAT (3)

The URL was not properly formatted.

CURLE_NOT_BUILT_IN (4)

A requested feature, protocol or option was not found built-in in this libcurl due to a build-time decision. This means that a feature or option was not enabled or explicitly disabled when libcurl was built and in order to get it to function you have to get a rebuilt libcurl.

CURLE_COULDNT_RESOLVE_PROXY (5)

Couldn’t resolve proxy. The given proxy host could not be resolved.

CURLE_COULDNT_RESOLVE_HOST (6)

Couldn’t resolve host. The given remote host was not resolved.

CURLE_COULDNT_CONNECT (7)

Failed to connect() to host or proxy.

CURLE_FTP_WEIRD_SERVER_REPLY (8)

The server sent data libcurl couldn’t parse. This error code is used for more than just FTP and is aliased as CURLE_WEIRD_SERVER_REPLY since 7.51.0.

CURLE_REMOTE_ACCESS_DENIED (9)

We were denied access to the resource given in the URL. For FTP, this occurs while trying to change to the remote directory.

CURLE_FTP_ACCEPT_FAILED (10)

While waiting for the server to connect back when an active FTP session is used, an error code was sent over the control connection or similar.

CURLE_FTP_WEIRD_PASS_REPLY (11)

After having sent the FTP password to the server, libcurl expects a proper reply. This error code indicates that an unexpected code was returned.

CURLE_FTP_ACCEPT_TIMEOUT (12)

During an active FTP session while waiting for the server to connect, the CURLOPT_ACCEPTTIMEOUT_MS (or the internal default) timeout expired.

CURLE_FTP_WEIRD_PASV_REPLY (13)

libcurl failed to get a sensible result back from the server as a response to either a PASV or a EPSV command. The server is flawed.

CURLE_FTP_WEIRD_227_FORMAT (14)

FTP servers return a 227-line as a response to a PASV command. If libcurl fails to parse that line, this return code is passed back.

CURLE_FTP_CANT_GET_HOST (15)

An internal failure to lookup the host used for the new connection.

CURLE_HTTP2 (16)

A problem was detected in the HTTP2 framing layer. This is somewhat generic and can be one out of several problems, see the error buffer for details.

CURLE_FTP_COULDNT_SET_TYPE (17)

Received an error when trying to set the transfer mode to binary or ASCII.

CURLE_PARTIAL_FILE (18)

A file transfer was shorter or larger than expected. This happens when the server first reports an expected transfer size, and then delivers data that doesn’t match the previously given size.

CURLE_FTP_COULDNT_RETR_FILE (19)

This was either a weird reply to a ‘RETR’ command or a zero byte transfer complete.

CURLE_QUOTE_ERROR (21)

When sending custom “QUOTE” commands to the remote server, one of the commands returned an error code that was 400 or higher (for FTP) or otherwise indicated unsuccessful completion of the command.

CURLE_HTTP_RETURNED_ERROR (22)

This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server returns an error code that is >= 400.

CURLE_WRITE_ERROR (23)

An error occurred when writing received data to a local file, or an error was returned to libcurl from a write callback.

CURLE_UPLOAD_FAILED (25)

Failed starting the upload. For FTP, the server typically denied the STOR command. The error buffer usually contains the server’s explanation for this.

CURLE_READ_ERROR (26)

There was a problem reading a local file or an error returned by the read callback.

CURLE_OUT_OF_MEMORY (27)

A memory allocation request failed. This is serious badness and things are severely screwed up if this ever occurs.

CURLE_OPERATION_TIMEDOUT (28)

Operation timeout. The specified time-out period was reached according to the conditions.

CURLE_FTP_PORT_FAILED (30)

The FTP PORT command returned error. This mostly happens when you haven’t specified a good enough address for libcurl to use. See CURLOPT_FTPPORT.

CURLE_FTP_COULDNT_USE_REST (31)

The FTP REST command returned error. This should never happen if the server is sane.

CURLE_RANGE_ERROR (33)

The server does not support or accept range requests.

CURLE_HTTP_POST_ERROR (34)

This is an odd error that mainly occurs due to internal confusion.

CURLE_SSL_CONNECT_ERROR (35)

A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be certificates (file formats, paths, permissions), passwords, and others.

CURLE_BAD_DOWNLOAD_RESUME (36)

The download could not be resumed because the specified offset was out of the file boundary.

CURLE_FILE_COULDNT_READ_FILE (37)

A file given with FILE:// couldn’t be opened. Most likely because the file path doesn’t identify an existing file. Did you check file permissions?

CURLE_LDAP_CANNOT_BIND (38)

LDAP cannot bind. LDAP bind operation failed.

CURLE_LDAP_SEARCH_FAILED (39)

LDAP search failed.

CURLE_FUNCTION_NOT_FOUND (41)

Function not found. A required zlib function was not found.

CURLE_ABORTED_BY_CALLBACK (42)

Aborted by callback. A callback returned “abort” to libcurl.

CURLE_BAD_FUNCTION_ARGUMENT (43)

Internal error. A function was called with a bad parameter.

CURLE_INTERFACE_FAILED (45)

Interface error. A specified outgoing interface could not be used. Set which interface to use for outgoing connections’ source IP address with CURLOPT_INTERFACE.

CURLE_TOO_MANY_REDIRECTS (47)

Too many redirects. When following redirects, libcurl hit the maximum amount. Set your limit with CURLOPT_MAXREDIRS.

CURLE_UNKNOWN_OPTION (48)

An option passed to libcurl is not recognized/known. Refer to the appropriate documentation. This is most likely a problem in the program that uses libcurl. The error buffer might contain more specific information about which exact option it concerns.

CURLE_TELNET_OPTION_SYNTAX (49)

A telnet option string was Illegally formatted.

CURLE_PEER_FAILED_VERIFICATION (51)

The remote server’s SSL certificate or SSH md5 fingerprint was deemed not OK.

CURLE_GOT_NOTHING (52)

Nothing was returned from the server, and under the circumstances, getting nothing is considered an error.

CURLE_SSL_ENGINE_NOTFOUND (53)

The specified crypto engine wasn’t found.

CURLE_SSL_ENGINE_SETFAILED (54)

Failed setting the selected SSL crypto engine as default!

CURLE_SEND_ERROR (55)

Failed sending network data.

CURLE_RECV_ERROR (56)

Failure with receiving network data.

CURLE_SSL_CERTPROBLEM (58)

problem with the local client certificate.

CURLE_SSL_CIPHER (59)

Couldn’t use specified cipher.

CURLE_SSL_CACERT (60)

Peer certificate cannot be authenticated with known CA certificates.

CURLE_BAD_CONTENT_ENCODING (61)

Unrecognized transfer encoding.

CURLE_LDAP_INVALID_URL (62)

Invalid LDAP URL.

CURLE_FILESIZE_EXCEEDED (63)

Maximum file size exceeded.

CURLE_USE_SSL_FAILED (64)

Requested FTP SSL level failed.

CURLE_SEND_FAIL_REWIND (65)

When doing a send operation curl had to rewind the data to retransmit, but the rewinding operation failed.

CURLE_SSL_ENGINE_INITFAILED (66)

Initiating the SSL Engine failed.

CURLE_LOGIN_DENIED (67)

The remote server denied curl to login (Added in 7.13.1)

CURLE_TFTP_NOTFOUND (68)

File not found on TFTP server.

CURLE_TFTP_PERM (69)

Permission problem on TFTP server.

CURLE_REMOTE_DISK_FULL (70)

Out of disk space on the server.

CURLE_TFTP_ILLEGAL (71)

Illegal TFTP operation.

CURLE_TFTP_UNKNOWNID (72)

Unknown TFTP transfer ID.

CURLE_REMOTE_FILE_EXISTS (73)

File already exists and will not be overwritten.

CURLE_TFTP_NOSUCHUSER (74)

This error should never be returned by a properly functioning TFTP server.

CURLE_CONV_FAILED (75)

Character conversion failed.

CURLE_CONV_REQD (76)

Caller must register conversion callbacks.

CURLE_SSL_CACERT_BADFILE (77)

Problem with reading the SSL CA cert (path? access rights?)

CURLE_REMOTE_FILE_NOT_FOUND (78)

The resource referenced in the URL does not exist.

CURLE_SSH (79)

An unspecified error occurred during the SSH session.

CURLE_SSL_SHUTDOWN_FAILED (80)

Failed to shut down the SSL connection.

CURLE_AGAIN (81)

Socket is not ready for send/recv wait till it’s ready and try again. This return code is only returned from curl_easy_recv and curl_easy_send (Added in 7.18.2)

CURLE_SSL_CRL_BADFILE (82)

Failed to load CRL file (Added in 7.19.0)

CURLE_SSL_ISSUER_ERROR (83)

Issuer check failed (Added in 7.19.0)

CURLE_FTP_PRET_FAILED (84)

The FTP server does not understand the PRET command at all or does not support the given argument. Be careful when using CURLOPT_CUSTOMREQUEST, a custom LIST command will be sent with PRET CMD before PASV as well. (Added in 7.20.0)

CURLE_RTSP_CSEQ_ERROR (85)

Mismatch of RTSP CSeq numbers.

CURLE_RTSP_SESSION_ERROR (86)

Mismatch of RTSP Session Identifiers.

CURLE_FTP_BAD_FILE_LIST (87)

Unable to parse FTP file list (during FTP wildcard downloading).

CURLE_CHUNK_FAILED (88)

Chunk callback reported error.

CURLE_NO_CONNECTION_AVAILABLE (89)

(For internal use only, will never be returned by libcurl) No connection available, the session will be queued. (added in 7.30.0)

CURLE_SSL_PINNEDPUBKEYNOTMATCH (90)

Failed to match the pinned key specified with CURLOPT_PINNEDPUBLICKEY.

CURLE_SSL_INVALIDCERTSTATUS (91)

Status returned failure when asked with CURLOPT_SSL_VERIFYSTATUS.

CURLE_HTTP2_STREAM (92)

Stream error in the HTTP/2 framing layer.

CURLE_RECURSIVE_API_CALL (93)

An API function was called from inside a callback.

CURLE_OBSOLETE*

These error codes will never be returned. They were used in an old libcurl version and are currently unused.

CURLMcode

This is the generic return code used by functions in the libcurl multi interface. Also consider curl_multi_strerror.

CURLM_CALL_MULTI_PERFORM (-1)

This is not really an error. It means you should call curl_multi_perform again without doing select() or similar in between. Before version 7.20.0 this could be returned by curl_multi_perform, but in later versions this return code is never used.

CURLM_OK (0)

Things are fine.

CURLM_BAD_HANDLE (1)

The passed-in handle is not a valid CURLM handle.

CURLM_BAD_EASY_HANDLE (2)

An easy handle was not good/valid. It could mean that it isn’t an easy handle at all, or possibly that the handle already is in used by this or another multi handle.

CURLM_OUT_OF_MEMORY (3)

You are doomed.

CURLM_INTERNAL_ERROR (4)

This can only be returned if libcurl bugs. Please report it to us!

CURLM_BAD_SOCKET (5)

The passed-in socket is not a valid one that libcurl already knows about. (Added in 7.15.4)

CURLM_UNKNOWN_OPTION (6)

curl_multi_setopt() with unsupported option (Added in 7.15.4)

CURLM_ADDED_ALREADY (7)

An easy handle already added to a multi handle was attempted to get added a second time. (Added in 7.32.1)

CURLM_RECURSIVE_API_CALL (8)

An API function was called from inside a callback.

CURLSHcode

The “share” interface will return a CURLSHcode to indicate when an error has occurred. Also consider curl_share_strerror.

CURLSHE_OK (0)

All fine. Proceed as usual.

CURLSHE_BAD_OPTION (1)

An invalid option was passed to the function.

CURLSHE_IN_USE (2)

The share object is currently in use.

CURLSHE_INVALID (3)

An invalid share object was passed to the function.

CURLSHE_NOMEM (4)

Not enough memory was available. (Added in 7.12.0)

CURLSHE_NOT_BUILT_IN (5)

The requested sharing could not be done because the library you use don’t have that particular feature enabled. (Added in 7.23.0)