SMBlib_errno = -SMBlibE_CallFailed;
return NULL;
}
- strcpy(con -> desthost, host);
+ strncpy(con->desthost, host, sizeof(con->desthost));
+ con->desthost[sizeof(con->desthost)-1]='\0';
/* Now connect to the remote end, but first upper case the name of the
service we are going to call, sine some servers want it in uppercase */
}
} else {
/* cnonce and nc both require qop */
- if (digest_request->cnonce || digest_request->nc) {
+ if (digest_request->cnonce || digest_request->nc[0] != '\0') {
debugs(29, 2, "missing qop!");
rv = authDigestLogUsername(username, digest_request);
safe_free(username);
}
}
-/**
- * parseHttpRequest()
+/** Parse an HTTP request
*
- * Returns
- * NULL on incomplete requests
- * a ClientSocketContext structure on success or failure.
- * Sets result->flags.parsed_ok to 0 if failed to parse the request.
- * Sets result->flags.parsed_ok to 1 if we have a good request.
+ * \note Sets result->flags.parsed_ok to 0 if failed to parse the request,
+ * to 1 if the request was correctly parsed.
+ * \param[in] csd a ConnStateData. The caller must make sure it is not null
+ * \param[in] hp an HttpParser
+ * \param[out] mehtod_p will be set as a side-effect of the parsing.
+ * Pointed-to value will be set to Http::METHOD_NONE in case of
+ * parsing failure
+ * \param[out] http_ver will be set as a side-effect of the parsing
+ * \return NULL on incomplete requests,
+ * a ClientSocketContext structure on success or failure.
*/
static ClientSocketContext *
parseHttpRequest(ConnStateData *csd, HttpParser *hp, HttpRequestMethod * method_p, HttpVersion *http_ver)
*method_p = HttpRequestMethod(&hp->buf[hp->req.m_start], &hp->buf[hp->req.m_end]+1);
/* deny CONNECT via accelerated ports */
- if (*method_p == Http::METHOD_CONNECT && csd && csd->port && csd->port->accel) {
+ if (*method_p == Http::METHOD_CONNECT && csd->port && csd->port->accel) {
debugs(33, DBG_IMPORTANT, "WARNING: CONNECT method received on " << csd->port->protocol << " Accelerator port " << csd->port->s.GetPort() );
/* XXX need a way to say "this many character length string" */
debugs(33, DBG_IMPORTANT, "WARNING: for request: " << hp->buf);
#endif
calloutContext->error->detailError(errDetail);
calloutContext->readNextRequest = true;
- c->expectNoForwarding();
+ if (c != NULL)
+ c->expectNoForwarding();
doCallouts();
}
//else if(calloutContext == NULL) is it possible?
const char *aReason = i->error_reason.empty() ? NULL : i->error_reason.c_str();
errDetails = new Ssl::ErrorDetail(i->error_no, peerCert.get(), brokenCert, aReason);
}
- delete check->sslErrors;
- check->sslErrors = NULL;
+ if (check) {
+ delete check->sslErrors;
+ check->sslErrors = NULL;
+ }
}
if (!errs)
/* s is a new object */
s = htcpUnpackSpecifier(buf, sz);
- s->setFrom(from);
-
- s->setDataHeader(dhdr);
-
- if (NULL == s) {
+ if (s == NULL) {
debugs(31, 3, "htcpHandleTstRequest: htcpUnpackSpecifier failed");
htcpLogHtcp(from, dhdr->opcode, LOG_UDP_INVALID, dash_str);
return;
+ } else {
+ s->setFrom(from);
+ s->setDataHeader(dhdr);
}
if (!s->request) {
p = strchr(buf, ':');
if (p)
++p;
- if (keytab_filename)
- xfree(keytab_filename);
+ xfree(keytab_filename);
keytab_filename = xstrdup(p ? p : buf);
} else {
keytab_filename = xstrdup(kf);
mem_cache =
(char *) xmalloc(strlen("FILE:/tmp/peer_proxy_negotiate_auth_")
+ 16);
+ if (!mem_cache) {
+ debugs(11, 5, "Error while allocating memory");
+ return(1);
+ }
snprintf(mem_cache,
strlen("FILE:/tmp/peer_proxy_negotiate_auth_") + 16,
"FILE:/tmp/peer_proxy_negotiate_auth_%d", (int) getpid());
mem_cache =
(char *) xmalloc(strlen("MEMORY:peer_proxy_negotiate_auth_") +
16);
+ if (!mem_cache) {
+ debugs(11, 5, "Error while allocating memory");
+ return(1);
+ }
snprintf(mem_cache,
strlen("MEMORY:peer_proxy_negotiate_auth_") + 16,
"MEMORY:peer_proxy_negotiate_auth_%d", (int) getpid());
setenv("KRB5CCNAME", mem_cache, 1);
code = krb5_cc_resolve(kparam.context, mem_cache, &kparam.cc);
- if (mem_cache)
- xfree(mem_cache);
+ xfree(mem_cache);
if (code) {
debugs(11, 5,
HERE << "Error while resolving memory credential cache : "