From 2270775d8c17ce040818887cf8e3b288182660b6 Mon Sep 17 00:00:00 2001 From: james Date: Wed, 8 Nov 2006 04:02:56 +0000 Subject: Added #ifdefed out AUTO_USERID feature. git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@1436 e7ae566f-a301-0410-adde-c780ea21d3b5 --- config-win32.h.in | 3 +++ misc.c | 5 +++++ tun.c | 42 ++++++++++++++++++++++++++++++++++++++---- tun.h | 2 ++ 4 files changed, 48 insertions(+), 4 deletions(-) diff --git a/config-win32.h.in b/config-win32.h.in index 502c6ae..fcf4b69 100644 --- a/config-win32.h.in +++ b/config-win32.h.in @@ -65,6 +65,9 @@ typedef unsigned long in_addr_t; /* Allow --askpass and --auth-user-pass passwords to be read from a file */ /* #undef ENABLE_PASSWORD_SAVE */ +/* Enable AUTO_USERID feature */ +/* #define AUTO_USERID */ + /* Enable client/server capability */ #define ENABLE_CLIENT_SERVER 1 diff --git a/misc.c b/misc.c index fb18448..ed3960c 100644 --- a/misc.c +++ b/misc.c @@ -1277,6 +1277,11 @@ get_user_pass (struct user_pass *up, msg (M_FATAL, "Error reading username and password (must be on two consecutive lines) from %s authfile: %s", prefix, auth_file); + +#if defined(AUTO_USERID) && defined(WIN32) + if (!strncmp (up->username, "AUTO_USERID", 11)) + get_auto_userid (up->username, USER_PASS_LEN); +#endif } fclose (fp); diff --git a/tun.c b/tun.c index 7fd876e..3166b32 100644 --- a/tun.c +++ b/tun.c @@ -62,7 +62,7 @@ static void netsh_ifconfig (const struct tuntap_options *to, const in_addr_t netmask, unsigned int flags); -static const char *netsh_get_id (const char *dev_node, struct gc_arena *gc); +static const char *netsh_get_id (const char *dev_node, const bool force_guid, struct gc_arena *gc); #endif @@ -144,7 +144,7 @@ guess_tuntap_dev (const char *dev, const int dt = dev_type_enum (dev, dev_type); if (dt == DEV_TYPE_TUN || dt == DEV_TYPE_TAP) { - return netsh_get_id (dev_node, gc); + return netsh_get_id (dev_node, false, gc); } #endif @@ -3390,7 +3390,7 @@ netsh_enable_dhcp (const struct tuntap_options *to, * Return a TAP name for netsh commands. */ static const char * -netsh_get_id (const char *dev_node, struct gc_arena *gc) +netsh_get_id (const char *dev_node, const bool force_guid, struct gc_arena *gc) { const struct tap_reg *tap_reg = get_tap_reg (gc); const struct panel_reg *panel_reg = get_panel_reg (gc); @@ -3413,12 +3413,46 @@ netsh_get_id (const char *dev_node, struct gc_arena *gc) if (!guid) return "NULL"; /* not found */ - else if (strcmp (BPTR (&actual), "NULL")) + else if (!force_guid && strcmp (BPTR (&actual), "NULL")) return BPTR (&actual); /* control panel name */ else return guid; /* no control panel name, return GUID instead */ } +#ifdef AUTO_USERID + +static const char * +debrace (const char *str, struct gc_arena *gc) +{ + char *s = string_alloc (str, gc); + int l; + if (*s == '{') + ++s; + l = strlen (s); + if (l > 0) + { + char *e = s + (l - 1); + if (*e == '}') + *e = '\0'; + } + return s; +} + +void +get_auto_userid (char *username, const int capacity) +{ + struct gc_arena gc = gc_new (); + const char *nid = netsh_get_id (NULL, true, &gc); + if (nid && strcmp (nid, "NULL") && strlen (nid) > 3) + { + const char *nid1 = debrace (nid, &gc); + openvpn_snprintf (username, capacity, "W%s", nid1); + } + gc_free (&gc); +} + +#endif + /* * Called iteratively on TAP-Win32 wait-for-initialization polling loop */ diff --git a/tun.h b/tun.h index 082a6fc..508e4a5 100644 --- a/tun.h +++ b/tun.h @@ -332,6 +332,8 @@ int tun_read_queue (struct tuntap *tt, int maxsize); int tun_write_queue (struct tuntap *tt, struct buffer *buf); int tun_finalize (HANDLE h, struct overlapped_io *io, struct buffer *buf); +void get_auto_userid (char *username, const int capacity); + static inline bool tuntap_stop (int status) { -- cgit v1.2.3