Как создать сервер на Debian для обмена файлами?
Какой самый простой способ создания сервера для обмена файлами с паролем и защищённым соединением на Debian?
Какой самый простой способ создания сервера для обмена файлами с паролем и защищённым соединением на Debian?
Возможно ли установить зашифрованные Windows и Kubuntu на один жёсткий диск?
Установил Debian на HP Spectre x360. Не работает тачскрин, звук. fn клавиши. Это решаемая проблема?
В процессе установки возникает ошибка.
An installation step failed. You can try to run the failing item again from the menu, or skip it and choose something else. The failing step is: Install the GRUB boot loader on a hard disk
Приобрёл hp spectre x360. Пытаюсь установить Debian. Флэшка проверенная, работающая. Secure boot задизэблил. Нажимаю F9 при включении, Выбираю флэшку, затем bootmgr.efi и ничего не происходит просто обновляется boot manager. Что делать?
Хочу приобрести Dell xps 13 2-in-1, но даже не могу найти информацию, когда он начнёт продаваться в России. Кто-нибудь может подсказать?
Приобрёл клавиатуру с мышью (Microsoft Sculpt Ergonomic Desktop) и обнаружил, что они подключаются через Bluetooth. Я блютузом почти не пользовался. Установил Blueman, когда выбираю Setup New Device получаю No adapters found. (Блютуз в ноутбуке присутствует, и когда-то давно я им немного пользовался в Windows). Возможно ли заставить работать эти клавиатуру с мышью в Debian?
Нашёл такой код отправки письма https://codingways.blogspot.ru/2012/08/send-email-in-c-smtp-client-in-c.html
У меня в итоге он выглядит так
#include <iostream>
#include <istream>
#include <ostream>
#include <string>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/transform_width.hpp>
#include <boost/archive/iterators/ostream_iterator.hpp>
using boost::asio::ip::tcp;
using namespace boost::archive::iterators;
typedef base64_from_binary<transform_width<const char *, 6, 8> > base64_text;
class SMTPClient
{
public:
enum AUTH_STATUS { AUTH_NONE, AUTHENTICATING, AUTHENTICATED, AUTHENTICATIONFAILED } mauth_status;
SMTPClient(std::string pServer, unsigned int pPort, std::string pUser, std::string pPassword) :
mServer(pServer), mPort(pPort), mUserName(pUser), mPassword(pPassword), mSocket(mIOService), mResolver(mIOService)
{
mauth_status = AUTH_NONE;
}
void Authenticate()
{
mauth_status = AUTHENTICATING;
tcp::resolver::query qry(mServer, boost::lexical_cast<std::string>(mPort));
mResolver.async_resolve(qry, boost::bind(&SMTPClient::handleResolve, this, boost::asio::placeholders::error, boost::asio::placeholders::iterator));
mIOService.run();
}
void Quit()
{
writeLine("QUIT");
mIOService.stop();
}
bool Send(std::string pFrom, std::string pTo, std::string pSubject, std::string pMessage)
{
if (mauth_status != AUTHENTICATED || mHasError) {
std::cout << "not authenticated ('" << mErrorMsg << "'). returning...";
return false; // has error
}
std::cout << "SENDING ....";
writeLine("MAIL FROM: \"ProWeb Alert\"<" + pFrom + ">");
writeLine("RCPT TO:" + pTo);
writeLine("DATA");
writeLine("FROM:<" + pFrom + ">");
writeLine("SUBJECT:" + pSubject);
writeLine("");
writeLine(pMessage);
writeLine("");
writeLine(".");
return true;//TODO: smtp server response must be checked.
}
private:
std::string encodeBase64(std::string pData)
{
std::stringstream os;
size_t sz = pData.size();
std::copy(base64_text(pData.c_str()), base64_text(pData.c_str() + sz), ostream_iterator<char>(os));
return os.str();
}
void handleResolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator)
{
if (!err) {
std::cout << " resolving done\n";
tcp::endpoint endpoint = *endpoint_iterator;
mSocket.async_connect(endpoint, boost::bind(&SMTPClient::handleConnect, this,
boost::asio::placeholders::error, ++endpoint_iterator));
}
else {
std::cout << " can't resolve\n";
mHasError = true;
mErrorMsg = err.message();
}
}
void writeLine(std::string pData)
{
std::ostream req_strm(&mRequest);
req_strm << pData << "\r\n";
//std::cout << pData << "\r\n";
boost::asio::write(mSocket, mRequest);
req_strm.clear();
}
void handleConnect(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator)
{
if (!err) {
std::cout << " connected \n";
// The connection was successful. Send the request.
mHasError = false;
std::ostream req_strm(&mRequest);
writeLine("EHLO " + mServer);
writeLine("AUTH LOGIN");
writeLine(encodeBase64(mUserName));
writeLine(encodeBase64(mPassword));
mauth_status = AUTHENTICATED;
}
else {
std::cout << " can not connect\n";
mauth_status = AUTHENTICATIONFAILED;
mHasError = true;
mErrorMsg = err.message();
}
}
std::string mServer;
std::string mUserName;
std::string mPassword;
unsigned int mPort;
boost::asio::io_service mIOService;
tcp::resolver mResolver;
tcp::socket mSocket;
boost::asio::streambuf mRequest;
boost::asio::streambuf mResponse;
bool mHasError;
std::string mErrorMsg;
std::ostringstream mResponseData;
std::ostringstream mResponseHeader;
};
int main()
{
SMTPClient mailc("smtp.mail.ru", 25, "LOGIN", "PASSWORD");
mailc.Authenticate();
mailc.Send("LOGIN@mail.ru", "LOGIN@mail.ru", "subject", "Hello from C++ SMTP Client!");
}
Когда доходит до writeLine(«FROM:<» + pFrom + «>»); Получается исключение boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >
Что надо поправить?
Мне надо, чтобы мой сервер отправлял регистрационные коды пользователям. Использую такую разработку
#include <string>
#include <sstream>
#include <iostream>
#include <ctime>
#include <algorithm>
#include <random>
#include <curl/curl.h>
class EmailAddress
{
public:
EmailAddress(const char *email)
: email_{email}
{
}
EmailAddress(const std::string &email)
: email_{email}
{
}
EmailAddress(const std::string &email, const std::string &displayName)
: email_{email.empty() ? "" : "<"+email+">"},
name_{"\"" + displayName + "\""}
{
}
std::string domain() const
{
return email_.substr(email_.find('@') + 1);
}
explicit operator const char *() const
{
return email_.c_str();
}
friend std::ostream &operator<<(std::ostream &out, const EmailAddress &email)
{
return out << email.name_ << " " << email.email_;
}
private:
std::string email_;
std::string name_;
};
typedef std::vector<EmailAddress> EmailAddresses;
std::ostream &operator<<(std::ostream &out, const EmailAddresses &emailAddresses);
class Email
{
public:
Email(const EmailAddress &from,
const EmailAddress &to,
const std::string &subject,
const std::string &body,
const EmailAddresses &cc = EmailAddresses())
: from_{from}
, to_{to}
, cc_{cc.empty() ? EmailAddresses(1, to) : cc}
, subject_{subject}
, body_{body}
{
}
CURLcode send(const std::string &url,
const std::string &userName,
const std::string &password);
private:
struct StringData {
std::string msg;
size_t bytesLeft;
StringData(std::string &&m) : msg{m}, bytesLeft{msg.size()} {}
StringData(std::string &m) = delete;
};
static std::string dateTimeNow_();
static size_t payloadSource_(void *ptr, size_t size, size_t nmemb, void *userp);
std::string generateMessageId_() const;
std::string setPayloadText_();
EmailAddress from_, to_;
EmailAddresses cc_;
std::string subject_, body_;
};
CURLcode Email::send(const std::string &url,
const std::string &userName,
const std::string &password)
{
CURLcode ret = CURLE_OK;
struct curl_slist *recipients = NULL;
CURL *curl = curl_easy_init();
StringData textData { setPayloadText_() };
if (curl) {
std::ostringstream cc;
cc << cc_;
curl_easy_setopt(curl, CURLOPT_USERNAME, userName.c_str());
curl_easy_setopt(curl, CURLOPT_PASSWORD, password.c_str());
curl_easy_setopt(curl, CURLOPT_URL, url .c_str());
curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
//curl_easy_setopt(curl, CURLOPT_CAINFO, "/path/to/certificate.pem");
curl_easy_setopt(curl, CURLOPT_MAIL_FROM, (const char *)from_);
recipients = curl_slist_append(recipients, (const char *)to_);
recipients = curl_slist_append(recipients, cc.str().c_str());
curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, payloadSource_);
curl_easy_setopt(curl, CURLOPT_READDATA, &textData);
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
ret = curl_easy_perform(curl);
if (ret != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: "
<< curl_easy_strerror(ret)
<< std::endl;
}
curl_slist_free_all(recipients);
curl_easy_cleanup(curl);
}
return ret;
}
std::string Email::dateTimeNow_()
{
const int RFC5322_TIME_LEN = 32;
std::string ret;
ret.resize(RFC5322_TIME_LEN);
time_t tt;
#ifdef _MSC_VER
time(&tt);
tm *t = localtime(&tt);
#else
tm tv, *t = &tv;
tt = time(&tt);
localtime_r(&tt, t);
#endif
strftime(&ret[0], RFC5322_TIME_LEN, "%a, %d %b %Y %H:%M:%S %z", t);
return ret;
}
inline std::string Email::generateMessageId_() const
{
const size_t MESSAGE_ID_LEN = 37;
tm t;
time_t tt;
time(&tt);
#ifdef _MSC_VER
gmtime_s(&t, &tt);
#else
gmtime_r(&tt, &t);
#endif
std::string ret;
ret.resize(MESSAGE_ID_LEN);
size_t dateLen = std::strftime(&ret[0], MESSAGE_ID_LEN, "%Y%m%d%H%M%S", &t);
static const std::string alphaNum {
"0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz" };
std::mt19937 gen;
std::uniform_int_distribution<> distr(0, alphaNum.length() - 1);
std::generate_n(ret.begin() + dateLen,
MESSAGE_ID_LEN - dateLen,
[&]() { return alphaNum[distr(gen)]; });
return ret;
}
size_t Email::payloadSource_(void *ptr, size_t size, size_t nmemb, void *userp)
{
StringData *text = reinterpret_cast<StringData *>(userp);
if ((size == 0) || (nmemb == 0) || ((size * nmemb) < 1) || (text->bytesLeft == 0)) {
return 0;
}
if ((nmemb * size) >= text->msg.size()) {
text->bytesLeft = 0;
return text->msg.copy(reinterpret_cast<char *>(ptr), text->msg.size());
}
return 0;
}
std::string Email::setPayloadText_()
{
std::string ret = "Date: " + dateTimeNow_() + "\r\n";
std::ostringstream oss;
oss << "To: " << to_ << "\r\n"
"From: " << from_ << "\r\n";
if (cc_.size() > 1) {
oss << "Cc: " << cc_ << "\r\n";
}
ret += oss.str();
ret +=
"Message-ID: <" + generateMessageId_() + "@" + from_.domain() + ">\r\n"
"Subject: " + subject_ + "\r\n"
"\r\n" +
body_ + "\r\n"
"\r\n";
return ret;
}
std::ostream &operator<<(std::ostream &out, const EmailAddresses &emailAddresses)
{
if (!emailAddresses.empty()) {
auto it = emailAddresses.begin();
out << *it;
while (++it != emailAddresses.end()) {
out << "," << *it;
}
}
return out;
}
Если я отправляю с mail.ru тогда всё работает хорошо, например:
Email email({ "...@mail.ru", "Name" },
"...@mail.ru",
"Subject",
"Body" );
email.send ( "smtp://smtp.mail.ru:25",
"...",
"Password" );
Но если я отправляю с gmail
Email email({ "...@gmail.com", "Name" },
"...@gmail.com",
"Subj",
"Body");
email.send( "smtp://smtp.gmail.com:465",
"...@gmail.com",
"Password");
я получаю ошибку
* Rebuilt URL to: smtp://smtp.gmail.com:587/ * Hostname was NOT found in DNS cache * Trying 173.194.221.109... * Connected to smtp.gmail.com (173.194.221.109) port 587 (#0) < 220 smtp.gmail.com ESMTP 125sm1125430ljj.26 - gsmtp
EHLO DNPC
< 250-smtp.gmail.com at your service, [xx.xx.xxx.xx] < 250-SIZE 35882577 < 250-8BITMIME < 250-STARTTLS < 250-ENHANCEDSTATUSCODES < 250-PIPELINING < 250-CHUNKING < 250 SMTPUTF8
STARTTLS
< 220 2.0.0 Ready to start TLS * found 174 certificates in /etc/ssl/certs/ca-certificates.crt * server certificate verification OK * common name: smtp.gmail.com (matched) * server certificate expiration date OK * server certificate activation date OK * certificate public key: RSA * certificate version: #3 * subject: C=US,ST=California,L=Mountain View,O=Google Inc,CN=smtp.gmail.com * start date: Thu, 08 Dec 2016 10:53:19 GMT
* expire date: Thu, 02 Mar 2017 10:18:00 GMT
* issuer: C=US,O=Google Inc,CN=Google Internet Authority G2 * compression: NULL * cipher: AES-128-GCM * MAC: AEAD
EHLO DNPC
< 250-smtp.gmail.com at your service, [xx.xx.xxx.xx] < 250-SIZE 35882577 < 250-8BITMIME < 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH < 250-ENHANCEDSTATUSCODES < 250-PIPELINING < 250-CHUNKING < 250 SMTPUTF8
AUTH LOGIN
< 334 VXNlcm5hbWU6
Z2lnaWN1Y3UwODhAZ21haWwuY29t
< 334 UGFzc3dvcmQ6
ZGt0Y2Voamxia2ZjbXRranhyZg==
< 235 2.7.0 Accepted
MAIL FROM:<...@gmail.com>
< 250 2.1.0 OK 125sm1125430ljj.26 - gsmtp
RCPT TO:<...@gmail.com>
< 250 2.1.5 OK 125sm1125430ljj.26 - gsmtp
RCPT TO:< ...@gmail.com>
< 553-5.1.2 The recipient address < ...@gmail.com> is not a valid RFC-5321 < 553 5.1.2 address. 125sm1125430ljj.26 - gsmtp * RCPT failed: 553
QUIT
< 221 2.0.0 closing connection 125sm1125430ljj.26 - gsmtp * Closing connection 0 curl_easy_perform() failed: Failed sending data to the peer
Что мне надо поправить, чтобы отправка почты заработала?
Есть проект не зависимый от Qt, который собирается из Qt pro файла, но его файлы не зависят от Qt, поэтому хотелось бы избавить его от необходимости устанавливать Qt. Возможно ли это легко сделать, и будет ли работать QtCreator с этим форматом?
Безуспешно вызываю startx. В /var/log/Xorg.0.log выводится строка no screens found. Arch установлен в VirtualBox.
Что делать, если во время установки пакета, оказалось недостаточно места, и это ничего бы страшного, я бы просто удалил его. Но вызов remove и purge тоже пишет no space left on device и перезагрузка не помогает.
VirtualBox 5.1.8. Гостевой дистрибутив Debian 8, 32 bit.
$sh ./autorun.sh
Linux guest additions installer not found -- try to start them manually.
Не работает shared folders в postreus в VirtualBox. Добавил папку, но она не появляется.
Мой сервер использует синхронные сокеты. Я бы хотел чтобы клиенты, долго не проявляющие активность, отсоединялись. Мне бы для этого подошла возможность установить время ожидания приёма данных - SSL_read. Есть ли возможность так сделать?
После обновления Firefox все иконки слева от гамбургера сгруппировались в кнопку «>>» и теперь, чтобы нажать иконку, вместо одного клика, мне надо нажать эту кнопку потом навести на иконку и ещё раз нажать, неудобно, а места много.
Если закрываю приложение Ctrl+Z, порт остаётся не доступен.
Я использую kill -9 `lsof -t -i:10000`
Это помогает, но надо около минуты подождать, чтобы он снова заработал. А пока не заработает, при новом запуске сервера получаю Can't bind port 10000. Как можно решить эту проблему? Использую Debian.
В моём QTextEdit оба скроллбара всегда видны. По умолчанию текст двигается горизонтально. Но когда текст полностью влезает в QTextEdit по горизонтали, мне надо чтобы он двигался вертикально. Как можно сделать соответствующую проверку?
Собираюсь добавить возможность сохранить пароль. Существует ли в Qt или Boost функция, возвращающая наилучшую директорию для сохранения пароля пользователя в Linux и Windows?
Добавил в Kubuntu 16.04.1 виджет свернуть все окна, в настройках есть радиобаттон свернуть все окна или выполнить скрипт. Свернуть все окна - не работает, ничего не происходит. Зато работает пункт - выполнить скрипт. Может кто-нибудь подсказать скрипт - свернуть все окна и восстановить, как в виндоусе?
← предыдущие | следующие → |