public inbox for cygwin-apps@cygwin.com
 help / color / mirror / Atom feed
From: Jon Turney <jon.turney@dronecode.org.uk>
To: cygwin-apps@cygwin.com
Cc: Jon Turney <jon.turney@dronecode.org.uk>
Subject: [PATCH setup 07/11] Add symlink capabilities to user-agent telemetry
Date: Tue, 10 Aug 2021 18:02:24 +0100	[thread overview]
Message-ID: <20210810170228.1690-8-jon.turney@dronecode.org.uk> (raw)
In-Reply-To: <20210810170228.1690-1-jon.turney@dronecode.org.uk>

Report if (i) we have the symlink creation privilege, and (ii) if
developer mode is on, so unprivileged symlink creation is allowed.
---
 nio-ie5.cc | 12 +++++++++++-
 win32.cc   | 18 ++++++++++++++++++
 win32.h    |  1 +
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/nio-ie5.cc b/nio-ie5.cc
index e93d6d4..8fd7008 100644
--- a/nio-ie5.cc
+++ b/nio-ie5.cc
@@ -89,7 +89,17 @@ determine_default_useragent(void)
       langid << std::hex << std::setw(4) << std::setfill('0') << l;
     }
 
-  default_useragent = std::string("Cygwin-Setup/") + setup_version + " (" + os.str() + ";" + bitness + ";" + langid.str() + ")";
+  std::string symlinks = "";
+  if (nt_sec.hasSymlinkCreationRights())
+    symlinks.append("SymLinkPriv");
+  if (is_developer_mode())
+    {
+      if (!symlinks.empty())
+        symlinks.append("+");
+      symlinks.append("UnprivilegedSymLink");
+    }
+
+  default_useragent = std::string("Cygwin-Setup/") + setup_version + " (" + os.str() + ";" + bitness + ";" + langid.str() + ";" + symlinks + ")";
   Log (LOG_BABBLE) << "User-Agent: default is \"" << default_useragent << "\"" << endLog;
 
   return default_useragent;
diff --git a/win32.cc b/win32.cc
index 6455384..db79fd7 100644
--- a/win32.cc
+++ b/win32.cc
@@ -492,3 +492,21 @@ LoadStringW(unsigned int uID)
 
   return L"";
 }
+
+bool
+is_developer_mode(void)
+{
+  HKEY hKey;
+  LSTATUS err = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\AppModelUnlock", 0, KEY_READ, &hKey);
+  if (err != ERROR_SUCCESS)
+    return false;
+
+  DWORD value;
+  DWORD size = sizeof(DWORD);
+  err = RegQueryValueExW(hKey, L"AllowDevelopmentWithoutDevLicense", NULL, NULL, reinterpret_cast<LPBYTE>(&value), &size);
+  RegCloseKey(hKey);
+  if (err != ERROR_SUCCESS)
+    return false;
+
+  return value != 0;
+}
diff --git a/win32.h b/win32.h
index e498077..5874d8b 100644
--- a/win32.h
+++ b/win32.h
@@ -196,5 +196,6 @@ SetDlgItemRect (HWND h, int item, LPRECT r)
 }
 
 const std::wstring LoadStringW(unsigned int uID);
+bool is_developer_mode(void);
 
 #endif /* SETUP_WIN32_H */
-- 
2.32.0


  parent reply	other threads:[~2021-08-10 17:04 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-10 17:02 [PATCH setup 00/11] Add options to choose symlink type (v2) Jon Turney
2021-08-10 17:02 ` [PATCH setup 01/11] Add support for creating WSL symlinks Jon Turney
2021-08-10 17:02 ` [PATCH setup 02/11] Add support for creating native symlinks Jon Turney
2021-08-10 17:02 ` [PATCH setup 03/11] Factor out the iteration over archive files to install Jon Turney
2021-08-10 17:02 ` [PATCH setup 04/11] Add seek() method to archive and compress file classes Jon Turney
2021-08-10 17:02 ` [PATCH setup 05/11] Add separate symlink-creation phase when extracting archive Jon Turney
2021-08-10 17:02 ` [PATCH setup 06/11] Enable SeCreateSymbolicLink privilege Jon Turney
2021-08-11  8:46   ` Corinna Vinschen
2021-09-14 11:53     ` Jon Turney
2021-08-10 17:02 ` Jon Turney [this message]
2021-08-10 17:02 ` [PATCH setup 08/11] Factor out StringChoiceOption Jon Turney
2021-08-10 17:02 ` [PATCH setup 09/11] Add a command line option to choose symlink type used Jon Turney
2021-08-10 17:02 ` [PATCH setup 10/11] Propagate --symlink-type setting to post-install scripts Jon Turney
2021-08-10 17:02 ` [PATCH setup 11/11] Default symlink mode from CYGWIN env var Jon Turney
2021-09-14 11:53 ` [PATCH setup 00/11] Add options to choose symlink type (v2) Jon Turney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210810170228.1690-8-jon.turney@dronecode.org.uk \
    --to=jon.turney@dronecode.org.uk \
    --cc=cygwin-apps@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).