|
@@ -234,19 +234,26 @@ int is_localsystem(const TCHAR *username) {
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+/* Build the virtual account name. */
|
|
|
+TCHAR *virtual_account(const TCHAR *service_name) {
|
|
|
+ size_t len = _tcslen(NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN) + _tcslen(service_name) + 2;
|
|
|
+ TCHAR *name = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, len * sizeof(TCHAR));
|
|
|
+ if (! name) {
|
|
|
+ print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("name"), _T("virtual_account"));
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ _sntprintf_s(name, len, _TRUNCATE, _T("%s\\%s"), NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN, service_name);
|
|
|
+ return name;
|
|
|
+}
|
|
|
+
|
|
|
/* Does the username represent a virtual account for the service? */
|
|
|
int is_virtual_account(const TCHAR *service_name, const TCHAR *username) {
|
|
|
if (! imports.IsWellKnownSid) return 0;
|
|
|
if (! service_name) return 0;
|
|
|
if (! username) return 0;
|
|
|
|
|
|
- size_t len = _tcslen(NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN) + _tcslen(service_name) + 2;
|
|
|
- TCHAR *canon = (TCHAR *) HeapAlloc(GetProcessHeap(), 0, len * sizeof(TCHAR));
|
|
|
- if (! canon) {
|
|
|
- print_message(stderr, NSSM_MESSAGE_OUT_OF_MEMORY, _T("canon"), _T("is_virtual_account"));
|
|
|
- return 0;
|
|
|
- }
|
|
|
- _sntprintf_s(canon, len, _TRUNCATE, _T("%s\\%s"), NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN, service_name);
|
|
|
+ TCHAR *canon = virtual_account(service_name);
|
|
|
int ret = str_equiv(canon, username);
|
|
|
HeapFree(GetProcessHeap(), 0, canon);
|
|
|
return ret;
|