blob: 2128bb4d28347149e7f6cece5a62d24e2a10c50f [file] [log] [blame]
diff -Naur libsecret-0.19.1.orig/configure.ac libsecret-0.19.1/configure.ac
--- libsecret-0.19.1.orig/configure.ac 2019-09-08 22:13:01.644668900 -0400
+++ libsecret-0.19.1/configure.ac 2019-09-08 22:14:13.969779900 -0400
@@ -96,7 +96,7 @@
PKG_CHECK_MODULES(GLIB,
glib-2.0 >= $GLIB_REQ
gio-2.0
- gio-unix-2.0)
+ gio-windows-2.0)
LIBS="$LIBS $GLIB_LIBS"
CFLAGS="$CFLAGS $GLIB_CFLAGS -DGLIB_VERSION_MIN_REQUIRED=$GLIB_MIN -DGLIB_VERSION_MAX_ALLOWED=$GLIB_MAX"
diff -Naur libsecret-0.19.1.orig/egg/egg-secure-memory.c libsecret-0.19.1/egg/egg-secure-memory.c
--- libsecret-0.19.1.orig/egg/egg-secure-memory.c 2019-09-08 22:13:01.660294400 -0400
+++ libsecret-0.19.1/egg/egg-secure-memory.c 2019-09-08 22:18:08.797436800 -0400
@@ -31,7 +31,11 @@
#include "egg-secure-memory.h"
#include <sys/types.h>
+#ifndef _WIN32
#include <sys/mman.h>
+#else
+#include <windows.h>
+#endif
#include <stddef.h>
#include <string.h>
#include <stdio.h>
@@ -139,6 +143,218 @@
return *stack;
}
+#ifdef _WIN32
+# ifndef _SC_PAGE_SIZE
+# define _SC_PAGE_SIZE 30
+# endif
+# define PROT_READ 0x1
+# define PROT_WRITE 0x2
+# define MAP_SHARED 0x1
+# define MAP_PRIVATE 0x2
+# define MAP_FIXED 0x10
+# define MAP_ANONYMOUS 0x20
+# define MAP_ANON MAP_ANONYMOUS
+# define MAP_FAILED ((void *) -1)
+
+long sysconf(int name);
+int getpagesize(void);
+void *mmap(void *start, size_t len, int access, int flags, int fd, unsigned long long off);
+void *mmap_impl(void *start, size_t len, int access, int flags, int fd, unsigned long long off, int inherited);
+int munmap (void *start, size_t length);
+int munmap_impl (void *start, size_t length, int anonymous);
+# define HAVE_MLOCK 1
+int mlock(const void *addr, size_t len);
+int munlock(const void *addr, size_t len);
+
+
+/**
+ * @brief get configurable system variables
+ * @param system variable to be queried
+ * @return -1 on error, current variable value on the system otherwise
+ */
+long
+sysconf (int name)
+{
+ switch(name)
+ {
+ case _SC_PAGE_SIZE:
+ {
+ SYSTEM_INFO sys_info;
+ GetSystemInfo(&sys_info);
+ return sys_info.dwAllocationGranularity;
+ }
+ default:
+ errno = EINVAL;
+ return -1;
+ }
+}
+
+int
+getpagesize (void)
+{
+ return sysconf (_SC_PAGE_SIZE);
+}
+
+void *
+mmap_impl (void *start, size_t len, int access, int flags, int fd,
+ unsigned long long off, int inheritable)
+{
+ DWORD protect;
+ DWORD access_param;
+ DWORD high, low;
+ HANDLE h, hFile;
+ SECURITY_ATTRIBUTES sec_none;
+ void *base;
+ errno = 0;
+
+ switch(access)
+ {
+ case PROT_WRITE:
+ protect = PAGE_READWRITE;
+ access_param = FILE_MAP_WRITE;
+ break;
+ case PROT_READ:
+ protect = PAGE_READONLY;
+ access_param = FILE_MAP_READ;
+ break;
+ default:
+ protect = PAGE_WRITECOPY;
+ access_param = FILE_MAP_COPY;
+ break;
+ }
+
+ h = NULL;
+ base = NULL;
+ if (fd >= 0)
+ {
+
+ sec_none.nLength = sizeof(SECURITY_ATTRIBUTES);
+ sec_none.bInheritHandle = inheritable ? TRUE : FALSE;
+ sec_none.lpSecurityDescriptor = NULL;
+
+ hFile = (HANDLE) _get_osfhandle(fd);
+
+ h = CreateFileMapping(hFile, &sec_none, protect, 0, 0, NULL);
+
+ if (! h)
+ {
+ errno = EINVAL;
+ return MAP_FAILED;
+ }
+
+ high = off >> 32;
+ low = off & ULONG_MAX;
+
+ /* If a non-zero start is given, try mapping using the given address first.
+ If it fails and flags is not MAP_FIXED, try again with NULL address. */
+ if (start)
+ base = MapViewOfFileEx(h, access_param, high, low, len, start);
+ if (!base && !(flags & MAP_FIXED))
+ base = MapViewOfFileEx(h, access_param, high, low, len, NULL);
+ }
+ else if ((flags & MAP_PRIVATE) && (flags & MAP_ANONYMOUS))
+ {
+ if (start)
+ base = VirtualAlloc (start, len, MEM_COMMIT | MEM_RESERVE,
+ protect);
+ if (!base && !(flags & MAP_FIXED))
+ base = VirtualAlloc (NULL, len, MEM_COMMIT | MEM_RESERVE,
+ protect);
+ }
+ else
+ {
+ errno = ENOSYS;
+ return MAP_FAILED;
+ }
+
+ if (!base || ((flags & MAP_FIXED) && base != start))
+ {
+ if (!base)
+ {
+ errno = EINVAL;
+ }
+ else
+ errno = EINVAL;
+
+ if (h)
+ CloseHandle(h);
+ return MAP_FAILED;
+ }
+
+ return base;
+}
+
+void *
+mmap(void *start, size_t len, int access, int flags, int fd, unsigned long long off)
+{
+ return mmap_impl (start, len, access, flags, fd, off, TRUE);
+}
+
+/**
+ * @brief Unmap files from memory
+ * @author Cygwin team
+ * @author Nils Durner
+ */
+int
+munmap_impl (void *start, size_t length, int anonymous)
+{
+ if (anonymous)
+ {
+ if (VirtualFree (start, 0, MEM_RELEASE))
+ {
+ errno = 0;
+ return 0;
+ }
+ else
+ {
+ errno = EINVAL;
+ return (int) MAP_FAILED;
+ }
+ }
+ else
+ {
+ if (UnmapViewOfFile(start))
+ {
+ errno = 0;
+ return 0;
+ }
+ else
+ {
+ errno = EINVAL;
+ return (int) MAP_FAILED;
+ }
+ }
+}
+
+int
+munmap (void *start, size_t length)
+{
+ return munmap_impl (start, length, TRUE);
+}
+
+
+int
+mlock (const void *addr, size_t len)
+{
+ BOOL b;
+ b = VirtualLock ((LPVOID) addr, len);
+ if (0 == b)
+ return EINVAL;
+ return 0;
+}
+
+int
+munlock (const void *addr, size_t len)
+{
+ BOOL b;
+ b = VirtualUnlock ((LPVOID) addr, len);
+ if (0 == b)
+ return EINVAL;
+ return 0;
+}
+#endif
+
+
/* -----------------------------------------------------------------------------
* POOL META DATA ALLOCATION
*
diff -Naur libsecret-0.19.1.orig/libsecret/mock-service.c libsecret-0.19.1/libsecret/mock-service.c
--- libsecret-0.19.1.orig/libsecret/mock-service.c 2019-09-08 22:13:01.722864500 -0400
+++ libsecret-0.19.1/libsecret/mock-service.c 2019-09-08 22:20:09.668492100 -0400
@@ -22,6 +22,9 @@
#include <errno.h>
#include <stdio.h>
#include <string.h>
+#ifdef G_OS_WIN32
+#include <windows.h>
+#endif
#ifdef __linux
#include <sys/prctl.h>
@@ -135,10 +138,16 @@
while (g_main_context_iteration (NULL, FALSE));
if (pid) {
+#ifndef G_OS_WIN32
if (kill (pid, SIGTERM) < 0) {
if (errno != ESRCH)
g_warning ("kill() failed: %s", g_strerror (errno));
}
+#else
+ if (!TerminateProcess ((HANDLE) pid, 0)) {
+ g_warning ("TerminateProcess() failed: %lu", GetLastError ());
+ }
+#endif
g_spawn_close_pid (pid);
pid = 0;
diff -Naur libsecret-0.19.1.orig/tool/secret-tool.c libsecret-0.19.1/tool/secret-tool.c
--- libsecret-0.19.1.orig/tool/secret-tool.c 2019-09-08 22:13:01.660294400 -0400
+++ libsecret-0.19.1/tool/secret-tool.c 2019-09-08 22:23:56.154326600 -0400
@@ -20,12 +20,17 @@
#include "libsecret/secret-value.h"
#include <glib/gi18n.h>
+#include <glib/gprintf.h>
#include <errno.h>
#include <locale.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
+#ifdef _WIN32
+#include <io.h>
+#include <conio.h>
+#endif
#define SECRET_ALIAS_PREFIX "/org/freedesktop/secrets/aliases/"
@@ -262,6 +267,39 @@
(GDestroyNotify)secret_password_free);
}
+#if defined(G_OS_WIN32) || defined(__BIONIC__)
+/* win32 doesn't have getpass() */
+#include <stdio.h>
+#ifndef BUFSIZ
+#define BUFSIZ 8192
+#endif
+static gchar *
+getpass (const gchar *prompt)
+{
+ static gchar buf[BUFSIZ];
+ gint i;
+
+ g_printf ("%s", prompt);
+ fflush (stdout);
+
+ for (i = 0; i < BUFSIZ - 1; ++i)
+ {
+#ifdef __BIONIC__
+ buf[i] = getc (stdin);
+#else
+ buf[i] = _getch ();
+#endif
+ if (buf[i] == '\r')
+ break;
+ }
+ buf[i] = '\0';
+
+ g_printf ("\n");
+
+ return &buf[0];
+}
+#endif
+
static SecretValue *
read_password_tty (void)
{