tAdded code to get username (for SOCKS4 CONNECT requests) under Win32 - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit a281eabbbacadf5343bd655f36a5e5c300e5696b
(DIR) parent 013c93d79269fed4dfce4b2aa3f6ab1af1d8ba07
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Fri, 12 Oct 2001 16:24:13 +0000
Added code to get username (for SOCKS4 CONNECT requests) under Win32
Diffstat:
M configure | 2 +-
M configure.in | 2 +-
M src/network.c | 28 ++++++++++++++++++++++------
3 files changed, 24 insertions(+), 8 deletions(-)
---
(DIR) diff --git a/configure b/configure
t@@ -3231,7 +3231,7 @@ EOF
CFLAGS="$CFLAGS -mwindows -fnative-struct -mno-cygwin"
- LIBS="$LIBS -lwsock32 -lcomctl32"
+ LIBS="$LIBS -lwsock32 -lcomctl32 -lmpr"
LDFLAGS="$LDFLAGS -lglib-1.3"
(DIR) diff --git a/configure.in b/configure.in
t@@ -50,7 +50,7 @@ if test "$CYGWIN" = "yes" ; then
dnl that can happen is that "make" fails later on.
CFLAGS="$CFLAGS -mwindows -fnative-struct -mno-cygwin"
- LIBS="$LIBS -lwsock32 -lcomctl32"
+ LIBS="$LIBS -lwsock32 -lcomctl32 -lmpr"
dnl Glib stuff
LDFLAGS="$LDFLAGS -lglib-1.3"
(DIR) diff --git a/src/network.c b/src/network.c
t@@ -776,7 +776,10 @@ gboolean StartSocksNegotiation(NetworkBuffer *NetBuf,gchar *RemoteHost,
guint addlen,i;
struct in_addr *h_addr;
unsigned short int netport;
-#ifndef CYGWIN
+#ifdef CYGWIN
+ gchar *username=NULL;
+ DWORD bufsize;
+#else
struct passwd *pwd;
#endif
t@@ -814,16 +817,28 @@ gboolean StartSocksNegotiation(NetworkBuffer *NetBuf,gchar *RemoteHost,
he = LookupHostname(RemoteHost,&NetBuf->error);
if (!he) return FALSE;
-#ifndef CYGWIN
+#ifdef CYGWIN
+ bufsize=0;
+ WNetGetUser(NULL,username,&bufsize);
+ if (GetLastError()!=ERROR_MORE_DATA) {
+ SetError(&NetBuf->error,ET_WIN32,GetLastError());
+ return FALSE;
+ } else {
+ username=g_malloc(bufsize);
+ if (WNetGetUser(NULL,username,&bufsize)!=NO_ERROR) {
+ SetError(&NetBuf->error,ET_WIN32,GetLastError());
+ return FALSE;
+ }
+ }
+g_print("username %s\n",username);
+ addlen=9+strlen(username);
+#else
pwd = getpwuid(getuid());
if (!pwd || !pwd->pw_name) return FALSE;
g_print("username %s\n",pwd->pw_name);
addlen=9+strlen(pwd->pw_name);
-#else
- addlen=13;
#endif
-
h_addr = (struct in_addr *)he->h_addr;
g_assert(sizeof(struct in_addr)==4);
t@@ -840,7 +855,8 @@ g_print("username %s\n",pwd->pw_name);
memcpy(&addpt[2],&netport,sizeof(netport));
memcpy(&addpt[4],h_addr,sizeof(struct in_addr));
#ifdef CYGWIN
- strcpy(&addpt[8],"user");
+ strcpy(&addpt[8],username);
+ g_free(username);
#else
strcpy(&addpt[8],pwd->pw_name);
#endif