You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by Bert Huijben <be...@vmoo.com> on 2012/08/09 12:10:12 UTC

RE: svn commit: r1371087 - in /subversion/trunk: build.conf

 subversion/libsvn_subr/opt.c subversion/libsvn_subr/sysinfo.c
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

In which cases would it help to detect system library versions?

Security updates usually don't update this number (as that breaks on a
multiple branch approach) and they are only serviced as part of system
updates (and if not there is no way to install a specific version for
testing). This will only provide pages of unneeded information in error
reports when we have an accurate os version.
(win64 +-doubles the number of dlls loaded per process and on win8 many
system dlls are split up in smaller components)

The exact version of things like openssl are much more interesting and
you don't get these this way.(Reason: not a numeric version scheme and
not a separate library if linked stayically)

Bert Huijben (Cell phone)
From: brane@apache.org
Sent: 9-8-2012 10:28
To: commits@subversion.apache.org
Subject: svn commit: r1371087 - in /subversion/trunk: build.conf
subversion/libsvn_subr/opt.c subversion/libsvn_subr/sysinfo.c
Author: brane
Date: Thu Aug  9 08:27:53 2012
New Revision: 1371087

URL: http://svn.apache.org/viewvc?rev=3D1371087&view=3Drev
Log:
Display list of loaded DLLs with "svn --version --verbose" on Windows.

* subversion/libsvn_subr/opt.c (svn_opt__print_version_info):
  Update output for loaded module list.

* subversion/libsvn_subr/sysinfo.c [WIN32]: Import psapi.h
  Import apr_file_info.h.
  (win32_shared_libs, enum_loaded_modules, FNENUMPROCESSMODULES): New.
  (svn_sysinfo__loaded_libs) [WIN32]: Call win32_shared_libs.

Modified:
    subversion/trunk/build.conf
    subversion/trunk/subversion/libsvn_subr/opt.c
    subversion/trunk/subversion/libsvn_subr/sysinfo.c

Modified: subversion/trunk/build.conf
URL: http://svn.apache.org/viewvc/subversion/trunk/build.conf?rev=3D1371087=
&r1=3D1371086&r2=3D1371087&view=3Ddiff
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- subversion/trunk/build.conf (original)
+++ subversion/trunk/build.conf Thu Aug  9 08:27:53 2012
@@ -296,7 +296,8 @@ type =3D lib
 install =3D fsmod-lib
 path =3D subversion/libsvn_subr
 libs =3D aprutil apriconv apr xml zlib apr_memcache sqlite magic
-msvc-libs =3D kernel32.lib advapi32.lib shfolder.lib ole32.lib crypt32.lib=
 version.lib
+msvc-libs =3D kernel32.lib advapi32.lib shfolder.lib ole32.lib
+            crypt32.lib version.lib psapi.lib
 msvc-export =3D=20
         svn_auth.h svn_base64.h svn_cache_config.h svn_checksum.h svn_cmdl=
ine.h
         svn_compat.h svn_config.h svn_ctype.h svn_dirent_uri.h svn_dso.h=
=20

Modified: subversion/trunk/subversion/libsvn_subr/opt.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/o=
pt.c?rev=3D1371087&r1=3D1371086&r2=3D1371087&view=3Ddiff
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- subversion/trunk/subversion/libsvn_subr/opt.c (original)
+++ subversion/trunk/subversion/libsvn_subr/opt.c Thu Aug  9 08:27:53 2012
@@ -1146,9 +1146,9 @@ svn_opt__print_version_info(const char *
=20
       if (dlibs)
         {
-          SVN_ERR(svn_cmdline_fputs(_("\nLoaded shared libraries:\n"),
+          SVN_ERR(svn_cmdline_fputs(_("* loaded shared libraries:\n"),
                                     stdout, pool));
-          SVN_ERR(svn_cmdline_printf(pool, "\n%s\n", dlibs));
+          SVN_ERR(svn_cmdline_fputs(dlibs, stdout, pool));
         }
     }
=20

Modified: subversion/trunk/subversion/libsvn_subr/sysinfo.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/s=
ysinfo.c?rev=3D1371087&r1=3D1371086&r2=3D1371087&view=3Ddiff
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- subversion/trunk/subversion/libsvn_subr/sysinfo.c (original)
+++ subversion/trunk/subversion/libsvn_subr/sysinfo.c Thu Aug  9 08:27:53 2=
012
@@ -25,7 +25,9 @@
 =0C
 #ifdef WIN32
 #define WIN32_LEAN_AND_MEAN
+#define PSAPI_VERSION 1
 #include <windows.h>
+#include <psapi.h>
 #endif
=20
 #define APR_WANT_STRFUNC
@@ -33,6 +35,7 @@
=20
 #include <apr_lib.h>
 #include <apr_pools.h>
+#include <apr_file_info.h>
=20
 #include "svn_ctype.h"
 #include "svn_error.h"
@@ -52,6 +55,7 @@ static const char* canonical_host_from_u
 #ifdef WIN32
 static const char * win32_canonical_host(apr_pool_t *pool);
 static const char * win32_release_name(apr_pool_t *pool);
+static const char * win32_shared_libs(apr_pool_t *pool);
 #endif /* WIN32 */
=20
=20
@@ -82,7 +86,11 @@ svn_sysinfo__release_name(apr_pool_t *po
 const char *
 svn_sysinfo__loaded_libs(apr_pool_t *pool)
 {
+#ifdef WIN32
+  return win32_shared_libs(pool);
+#else
   return NULL;
+#endif
 }
=20
 =0C
@@ -140,6 +148,7 @@ canonical_host_from_uname(apr_pool_t *po
 =0C
 #ifdef WIN32
 typedef DWORD (WINAPI *FNGETNATIVESYSTEMINFO)(LPSYSTEM_INFO);
+typedef BOOL (WINAPI *FNENUMPROCESSMODULES) (HANDLE, HMODULE, DWORD, LPDWO=
RD);
=20
 /* Get sysstem and version info, and try to tell the difference
    between the native system type and the runtime environment of the
@@ -349,4 +358,61 @@ win32_release_name(apr_pool_t *pool)
                       (unsigned int)osinfo.dwMinorVersion,
                       (unsigned int)osinfo.dwBuildNumber);
 }
+
+
+/* Get a list of handles of shared libs loaded by the current
+   process. Returns a NULL-terminated array alocated from POOL. */
+static HMODULE *
+enum_loaded_modules(apr_pool_t *pool)
+{
+  HANDLE current =3D GetCurrentProcess();
+  HMODULE dummy[1];
+  HMODULE *handles;
+  DWORD size;
+
+  if (!EnumProcessModules(current, dummy, sizeof(dummy), &size))
+    return NULL;
+
+  handles =3D apr_palloc(pool, size + sizeof *handles);
+  if (!EnumProcessModules(current, handles, size, &size))
+    return NULL;
+  handles[size / sizeof *handles] =3D NULL;
+  return handles;
+}
+
+
+/* List the shared libraries loaded by the current process. */
+const char *
+win32_shared_libs(apr_pool_t *pool)
+{
+  wchar_t buffer[MAX_PATH + 1];
+  HMODULE *handles =3D enum_loaded_modules(pool);
+  char *libinfo =3D "";
+  HMODULE *module;
+
+  for (module =3D handles; module && *module; ++module)
+    {
+      const char *filename;
+      if (GetModuleFileNameW(*module, buffer, MAX_PATH))
+        {
+          buffer[MAX_PATH] =3D 0;
+          filename =3D wcs_to_utf8(buffer, pool);
+          if (filename)
+            {
+              char *truename;
+              if (0 =3D=3D apr_filepath_merge(&truename, "", filename,
+                                          APR_FILEPATH_NATIVE
+                                          | APR_FILEPATH_TRUENAME,
+                                          pool))
+                filename =3D truename;
+              libinfo =3D apr_pstrcat(pool, libinfo, "  - ",
+                                    filename, "\n", NULL);
+            }
+        }
+    }
+
+  if (*libinfo)
+    return libinfo;
+  return NULL;
+}
 #endif /* WIN32 */

Re: svn commit: r1371087 - in /subversion/trunk: build.conf

Posted by Branko Čibej <br...@wandisco.com>.
On 09.08.2012 12:10, Bert Huijben wrote:
> In which cases would it help to detect system library versions?
>
> Security updates usually don't update this number (as that breaks on a
> multiple branch approach) and they are only serviced as part of system
> updates (and if not there is no way to install a specific version for
> testing). This will only provide pages of unneeded information in error
> reports when we have an accurate os version.
> (win64 +-doubles the number of dlls loaded per process and on win8 many
> system dlls are split up in smaller components)

I'm considering ignoring any library that gets loaded from anywhere in
$(WINDIR). But one step at a time. (That'll be a bit more interesting on
Unix, but there typically aren't that many shared libs involved there.)

> The exact version of things like openssl are much more interesting and
> you don't get these this way.(Reason: not a numeric version scheme and
> not a separate library if linked stayically)

Yes, there are a lot of "interesting" issues to solve, and I don't
pretend that I'll have them all done by 1.8. But I often noticed that
version and system info are absent or incomplete in many bug reports and
I thought it might help if Subversion provided the required information
itself.

-- Brane

-- 
Certified & Supported Apache Subversion Downloads:
http://www.wandisco.com/subversion/download