X-Git-Url: http://git.iain.cx/?a=blobdiff_plain;f=account.cpp;h=cb7fcdb20b6e6e7d14863bfd02cc1898f51f2016;hb=62f28c55d444d846579159133dbe091809a2c08b;hp=d16d51da634be47a0a79687872d5ecee77e8a780;hpb=71764fe41e37f36bcbc89ac62f664aeda4240790;p=nssm.git diff --git a/account.cpp b/account.cpp index d16d51d..cb7fcdb 100644 --- a/account.cpp +++ b/account.cpp @@ -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;