void ConnectionValidator::slotStatusFound(const QUrl&url, const QVariantMap &info) { // status.php was found. qDebug() << "** Application: ownCloud found: " << url << " with version " << CheckServerJob::versionString(info) << "(" << CheckServerJob::version(info) << ")"; QString version = CheckServerJob::version(info); _account->setServerVersion(version); if (version.contains('.') && version.split('.')[0].toInt() < 5) { _errors.append( tr("The configured server for this client is too old") ); _errors.append( tr("Please update to the latest server and restart the client.") ); reportResult( ServerVersionMismatch ); return; } // now check the authentication AbstractCredentials *creds = _account->credentials(); if (creds->ready()) { QTimer::singleShot( 0, this, SLOT( checkAuthentication() )); } else { // We can't proceed with the auth check because we don't have credentials. // Fetch them now! Once fetched, a new connectivity check will be // initiated anyway. creds->fetch(); // no result is reported deleteLater(); } }
// Обрабатываем новое сообщение int handleEvent(int fd) { struct Connection *connection = getConnection(fd); if (connection == NULL) { fprintf(stderr, "Error: connection from epoll wasn't found in list\n"); return -1; } if (checkConnectionTimeout(connection) == 1) { return 0; } if (checkAuthentication(connection) > 0) { passAuthentication(connection); } else { if (connection->ptm == -1) { if (createPty(connection) == -1) { fprintf(stderr, "Error: creating new pty\n"); return -1; } } if (fd == connection->connectionfd) { sendMessage(connection->ptm, connection->connectionfd); } else { sendMessage(connection->connectionfd, connection->ptm); } } return 0; }
void ConnectionValidator::slotStatusFound(const QUrl&url, const QVariantMap &info) { // status.php was found. qDebug() << "** Application: ownCloud found: " << url << " with version " << CheckServerJob::versionString(info) << "(" << CheckServerJob::version(info) << ")"; QString version = CheckServerJob::version(info); _account->setServerVersion(version); // We cannot deal with servers < 5.0.0 if (version.contains('.') && version.split('.')[0].toInt() < 5) { _errors.append( tr("The configured server for this client is too old") ); _errors.append( tr("Please update to the latest server and restart the client.") ); reportResult( ServerVersionMismatch ); return; } // We attempt to work with servers >= 5.0.0 but warn users. // Check usages of Account::serverVersionUnsupported() for details. // now check the authentication if (_account->credentials()->ready()) QTimer::singleShot( 0, this, SLOT( checkAuthentication() )); else reportResult( CredentialsMissingOrWrong ); }
int AccountAccessor::userLogin(const LoginInfo & info){ //0: ERROR //1: SUCCESS //1st check if that account has login if (!checkAuthentication(info)) return 0; if (!checkLogin(info.username)) return 0; //open file AccountOnline.txt to write new username ofstream outfile; outfile.open(_ONL_USR, ios::app); if (!outfile){ cerr << "WRITE INFO TO FILE ERROR!!!" << endl; outfile.close(); return 0; } //write username into OnlineAccount.txt outfile << info.username << endl; /////////////////////////////////////// cout << "LOGIN SUCCESSFUL!!!" << endl; outfile.close(); return 1; }
bool AdministrationServerConnection::executeCommand(socketMsg *smsg) { Parser *parseCommand; Parser *parseArgument; List<Memory<char> *> *tokensCommand; List<Memory<char> *> *tokensArgument; int **hashtablePtr; int hashtableSize; HashTableElt *hashtableElt; struct CatalogData *catalogData; socketMsg smsgSend; size_t sizeSent; char specialDelimiter[2]; char timeBuffer[64]; int counter = 0; bool wantToQuit = false; char *argument; int i; size_t catalogBufferSize; char *catalogBuffer; int returnCode; specialDelimiter[0] = ';'; specialDelimiter[1] = 0x00; parseCommand = new Parser(" "); parseArgument = new Parser(specialDelimiter); tokensCommand = parseCommand->tokenizeData(smsg->recvmsg, 1, smsg->brecv); while (commandsList[counter]) { if (! strncmp(tokensCommand->getFirstElement()->bloc, commandsList[counter], strlen(commandsList[counter]))) break; counter++; } if (! commandsList[counter]) { systemLog->sysLog(ERROR, "( %s:%d ) unrecognized administration command : %s\n", inet_ntoa(sourceAddress->sin_addr), ntohs(sourceAddress->sin_port), tokensCommand->getFirstElement()->bloc); counter = -1; } tokensCommand->removeFirst(); // Local Initializations serverAnswer->initialize(); bzero(timeBuffer, sizeof(timeBuffer)); switch (counter) { case 0: /* AUTH <user> <pass> - authentication */ tokensArgument = parseArgument->tokenizeData(tokensCommand->getFirstElement()->bloc, 2, tokensCommand->getFirstElement()->getBlocSize()); if ((! tokensArgument) || (tokensArgument->getListSize() != 2)) { serverMessage(300); break; } if (! strcmp(tokensArgument->getElement(1)->getBloc(), "admin")) { if (! strncmp(tokensArgument->getElement(2)->getBloc(), "a02sg32", 7)) { serverMessage(201); sessionAuthenticated = true; } else serverMessage(306); } else serverMessage(306); delete tokensArgument; break; case 1: /* DAEMONRELOAD - reload configuration */ if (checkAuthentication() == true) { configuration->parseConfigurationFile(); serverMessage(200); } break; case 2: /* DAEMONSTATS - get the stats */ if (checkAuthentication() == true) serverMessage(201); break; case 3: /* DAEMONPING - check if daemon is ok */ if (checkAuthentication() == true) serverMessage(305); break; case 4: /* DAEMONVERSION - return the daemon revision */ if (checkAuthentication() == true) serverMessage(203); break; case 5: /* QUIT - quit the administration interface */ serverMessage(101); wantToQuit = true; break; case 6: /* SET - set some startup parameters */ if (checkAuthentication() == false) break; tokensArgument = parseArgument->tokenizeData(tokensCommand->getFirstElement()->bloc, 2, tokensCommand->getFirstElement()->getBlocSize()); if ((! tokensArgument) || (tokensArgument->getListSize() != 2)) { serverMessage(301); break; } i = 0; argument = tokensArgument->getElement(2)->bloc; while (argument[i]) { if ((argument[i] == '\n') || (argument[i] == '\r')) argument[i] = '\0'; i++; } if (! strcmp(tokensArgument->getElement(1)->bloc, "nokeycheck")) { if (! strcmp(tokensArgument->getElement(2)->bloc, "true")) { configuration->noKeyCheck = true; serverMessage(204); } else if (! strcmp(tokensArgument->getElement(2)->bloc, "false")) { configuration->noKeyCheck = false; serverMessage(204); } else serverMessage(302); delete tokensArgument; break; } if (! strcmp(tokensArgument->getElement(1)->bloc, "keytimeout")) { int keyTimeout; keyTimeout = atoi(tokensArgument->getElement(2)->bloc); if (keyTimeout) { configuration->keyTimeout = keyTimeout; serverMessage(204); } else serverMessage(302); delete tokensArgument; break; } if (! strcmp(tokensArgument->getElement(1)->bloc, "readtimeout")) { int readTimeout; readTimeout = atoi(tokensArgument->getElement(2)->bloc); if (readTimeout) { configuration->readTimeout = readTimeout; serverMessage(204); } else serverMessage(302); delete tokensArgument; break; } if (! strcmp(tokensArgument->getElement(1)->bloc, "writetimeout")) { int writeTimeout; writeTimeout = atoi(tokensArgument->getElement(2)->bloc); if (writeTimeout) { configuration->writeTimeout = writeTimeout; serverMessage(204); } else serverMessage(302); delete tokensArgument; break; } if (! strcmp(tokensArgument->getElement(1)->bloc, "shappingtimeout")) { int shappingTimeout; shappingTimeout = atoi(tokensArgument->getElement(2)->bloc); if (shappingTimeout) { configuration->shappingTimeout = shappingTimeout; serverMessage(204); } else serverMessage(302); delete tokensArgument; break; } serverMessage(302); delete tokensArgument; break; case 7: catalogHashtable->lock(); hashtablePtr = catalogHashtable->getHashtable(); hashtableSize = catalogHashtable->getSize(); i = 0; if (! catalogHashtable->getNumberOfElements()) { serverMessage(401); catalogHashtable->unlock(); break; } catalogBufferSize = 0; catalogBuffer = (char *)malloc(1); catalogBuffer[0] = '\0'; while (i < hashtableSize) { if (hashtablePtr[i]) { hashtableElt = (HashTableElt *)hashtablePtr[i]; while (hashtableElt) { catalogData = (struct CatalogData *)hashtableElt->getData(); serverAnswer->snPrintf("%s|%s|%d\n", hashtableElt->getKey(), inet_ntoa(*((struct in_addr *)&catalogData->host)), catalogData->counter); catalogBufferSize += strlen(serverAnswer->bloc); catalogBuffer = (char *)realloc(catalogBuffer, catalogBufferSize+1); if (! catalogBuffer) { systemLog->sysLog(CRITICAL, "cannot reallocate catalogBuffer: %s", strerror(errno)); serverMessage(502); catalogHashtable->unlock(); break; } strcat(catalogBuffer, serverAnswer->bloc); hashtableElt = hashtableElt->getNext(); } } i++; } catalogHashtable->unlock(); serverMessage(205); usleep(500); serverAnswer->snPrintf("%d\n", catalogBufferSize); smsgSend.len = strlen(serverAnswer->bloc); smsgSend.sendmsg = serverAnswer->bloc; server->sendMessage(clientSocket, &smsgSend); usleep(500); sizeSent = 0; while (sizeSent != catalogBufferSize) { smsgSend.len = catalogBufferSize - sizeSent; smsgSend.sendmsg = &catalogBuffer[sizeSent]; returnCode = server->sendMessage(clientSocket, &smsgSend); if (returnCode < 0) { systemLog->sysLog(ERROR, "cannot send catalog buffer to client: %s", strerror(errno)); free(catalogBuffer); return -1; } sizeSent += smsgSend.bsent; } if (catalogBuffer) free(catalogBuffer); break; default: serverMessage(500); break; } delete tokensCommand; delete parseCommand; delete parseArgument; return wantToQuit; }