70b63cddd0
Cntlm is an http proxy server, written in pure C, that allows you to authenticate via the proprietary NTLM protocol, so you can use web sites and web proxies that require NTLM/NTLMv2 authorization.
65 lines
2.0 KiB
Plaintext
65 lines
2.0 KiB
Plaintext
$OpenBSD: patch-proxy_c,v 1.1.1.1 2009/10/08 19:13:09 sthen Exp $
|
|
--- proxy.c.orig Thu Nov 15 18:08:06 2007
|
|
+++ proxy.c Thu Oct 8 08:08:07 2009
|
|
@@ -530,6 +530,7 @@ bailout:
|
|
int make_connect(int sd, const char *thost) {
|
|
rr_data_t data1, data2;
|
|
int ret, closed;
|
|
+ hlist_t tl;
|
|
|
|
if (!sd || !thost || !strlen(thost))
|
|
return -1;
|
|
@@ -540,9 +541,18 @@ int make_connect(int sd, const char *thost) {
|
|
data1->req = 1;
|
|
data1->method = strdup("CONNECT");
|
|
data1->url = strdup(thost);
|
|
- data1->http = strdup("0");
|
|
+ data1->http = strdup("1");
|
|
data1->headers = hlist_mod(data1->headers, "Proxy-Connection", "Keep-Alive", 1);
|
|
|
|
+ /*
|
|
+ * Header replacement
|
|
+ */
|
|
+ tl = header_list;
|
|
+ while (tl) {
|
|
+ data1->headers = hlist_mod(data1->headers, tl->key, tl->value, 1);
|
|
+ tl = tl->next;
|
|
+ }
|
|
+
|
|
if (debug)
|
|
printf("Starting authentication...\n");
|
|
|
|
@@ -916,7 +926,7 @@ void *proxy_thread(void *client) {
|
|
char *tmp, *buf, *pos, *dom;
|
|
struct auth_s *tcreds; /* Per-thread credentials; for NTLM-to-basic */
|
|
|
|
- int cd = (int)client;
|
|
+ int cd = (int)(uintptr_t)client;
|
|
int authok = 0;
|
|
int sd = 0;
|
|
|
|
@@ -1387,7 +1397,7 @@ void *tunnel_thread(void *client) {
|
|
}
|
|
|
|
void *socks5_thread(void *client) {
|
|
- int cd = (int)client;
|
|
+ int cd = (int)(uintptr_t)client;
|
|
char *tmp, *thost, *tport, *uname, *upass;
|
|
unsigned char *bs, *auths, *addr;
|
|
unsigned short port;
|
|
@@ -2618,11 +2628,11 @@ int main(int argc, char **argv) {
|
|
|
|
if (plist_in(proxyd_list, i)) {
|
|
if (!serialize)
|
|
- tid = pthread_create(&pthr, &pattr, proxy_thread, (void *)cd);
|
|
+ tid = pthread_create(&pthr, &pattr, proxy_thread, (void *)(uintptr_t)cd);
|
|
else
|
|
- proxy_thread((void *)cd);
|
|
+ proxy_thread((void *)(uintptr_t)cd);
|
|
} else if (plist_in(socksd_list, i)) {
|
|
- tid = pthread_create(&pthr, &pattr, socks5_thread, (void *)cd);
|
|
+ tid = pthread_create(&pthr, &pattr, socks5_thread, (void *)(uintptr_t)cd);
|
|
} else {
|
|
data = (struct thread_arg_s *)new(sizeof(struct thread_arg_s));
|
|
data->fd = cd;
|