void ClipboardExchange::onRequest(UINT32 reqCode, RfbInputGate *input) { switch (reqCode) { case ClientMsgDefs::CLIENT_CUT_TEXT: input->readUInt8(); input->readUInt16(); { UINT32 length = input->readUInt32(); char *receivedText = new char[length + 1]; try { input->readFully(receivedText, length); } catch (...) { delete[] receivedText; throw; } if (!m_viewOnly) { receivedText[length] = '\0'; StringStorage clipText; clipText.fromAnsiString(receivedText); delete[] receivedText; m_desktop->setNewClipText(&clipText); } else { delete[] receivedText; } } break; default: StringStorage errMess; errMess.format(_T("Unknown %d protocol code received"), (int)reqCode); throw Exception(errMess.getString()); break; } }
void ControlMessage::authFromFile() { File passFile(m_passwordFile.getString()); FileInputStream passInput(&passFile); char ansiPassword[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; passInput.read(ansiPassword, 8); for (int i = 0; i < 8; i++) { if (ansiPassword[i] == '\r' || ansiPassword[i] == '\n') { ansiPassword[i] = '\0'; } } StringStorage password; password.fromAnsiString(ansiPassword); ControlAuth auth(m_gate, password.getString()); send(); }
void TvnServer::getServerInfo(TvnServerInfo *info) { bool rfbServerListening = true; { AutoLock l(&m_mutex); rfbServerListening = m_rfbServer != 0; } StringStorage statusString; bool vncAuthEnabled = m_config->isUsingAuthentication(); bool noVncPasswords = !m_config->hasPrimaryPassword() && !m_config->hasReadOnlyPassword(); bool vncPasswordsError = vncAuthEnabled && noVncPasswords; if (rfbServerListening) { if (vncPasswordsError) { statusString = StringTable::getString(IDS_NO_PASSWORDS_SET); } else { char localAddressString[1024]; getLocalIPAddrString(localAddressString, 1024); statusString.fromAnsiString(localAddressString); if (!vncAuthEnabled) { statusString.appendString(StringTable::getString(IDS_NO_AUTH_STATUS)); } } } else { statusString = StringTable::getString(IDS_SERVER_NOT_LISTENING); } UINT stringId = m_runAsService ? IDS_TVNSERVER_SERVICE : IDS_TVNSERVER_APP; info->m_statusText.format(_T("%s - %s"), StringTable::getString(stringId), statusString.getString()); info->m_acceptFlag = rfbServerListening && !vncPasswordsError; info->m_serviceFlag = m_runAsService; }
void ControlMessage::authFromRegistry() { HKEY rootKey = m_forService ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER; RegistrySettingsManager sm(rootKey, _T("Software\\TightVNC\\Server\\"), 0); unsigned char hidePassword[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; unsigned char plainPassword[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; size_t passSize = sizeof(hidePassword); if (sm.getBinaryData(_T("ControlPassword"), hidePassword, &passSize)) { VncPassCrypt::getPlainPass(plainPassword, hidePassword); StringStorage password; password.fromAnsiString((char *)plainPassword); memset(plainPassword, 0, sizeof(plainPassword)); ControlAuth auth(m_gate, password.getString()); send(); } else { } }
void HttpRequestHandler::processRequest() { HttpRequest httpRequest(m_dataInput); httpRequest.readHeader(); StringStorage request; request.fromAnsiString(httpRequest.getRequest()); if (!httpRequest.parseHeader()) { Log::warning(_T("invalid http request from %s"), m_peerHost.getString()); return ; } request.replaceChar(_T('\n'), _T(' ')); request.replaceChar(_T('\t'), _T(' ')); Log::message(_T("\"%s\" from %s"), request.getString(), m_peerHost.getString()); HttpReply reply(m_dataOutput); bool pageFound = false; if (strcmp(httpRequest.getFilename(), "/") == 0) { CharString paramsString("\n"); bool isAppletArgsValid = true; bool paramsInUrlIsEnabled = Configurator::getInstance()->getServerConfig()->isAppletParamInUrlEnabled(); if (httpRequest.hasArguments() && paramsInUrlIsEnabled) { ArgList *args = httpRequest.getArguments(); for (size_t i = 0; i < args->getCount(); i++) { const char *key = args->getKey(i); AppletParameter parameter(key, args->getValue(key)); if (!parameter.isValid()) { isAppletArgsValid = false; break; } paramsString.format("%s%s", paramsString.getString(), parameter.getFormattedString()); } } reply.send200(); if (!isAppletArgsValid) { m_dataOutput->writeFully(HTTP_MSG_BADPARAMS, strlen(HTTP_MSG_BADPARAMS)); } else { CharString page; StringStorage computerName(_T("TightVNC Server")); Environment::getComputerName(&computerName); size_t computerNameANSILength = computerName.getLength() + 1; char *computerNameANSI = new char[computerNameANSILength]; computerName.toAnsiString(computerNameANSI, computerNameANSILength); page.format(HTTP_INDEX_PAGE_FORMAT, computerNameANSI, Configurator::getInstance()->getServerConfig()->getRfbPort(), paramsString.getString()); delete[] computerNameANSI; m_dataOutput->writeFully(page.getString(), page.getLength()); } pageFound = true; } else if ((strcmp(httpRequest.getFilename(), "/VncViewer.jar") == 0)) { reply.send200(); m_dataOutput->writeFully(VNC_VIEWER_JAR_BODY, sizeof(VNC_VIEWER_JAR_BODY)); pageFound = true; } if (!pageFound) { reply.send404(); } }