LINUX.ORG.RU

Сообщения user08

 

Как создать сервер на Debian для обмена файлами?

Форум — General

Какой самый простой способ создания сервера для обмена файлами с паролем и защищённым соединением на Debian?

 ,

user08
()

Шифрование Windows и Linux на одном жёстком диске

Форум — Linux-install

Возможно ли установить зашифрованные Windows и Kubuntu на один жёсткий диск?

 , , ,

user08
()

Не работает тачскрин в Debian

Форум — General

Установил Debian на HP Spectre x360. Не работает тачскрин, звук. fn клавиши. Это решаемая проблема?

 ,

user08
()

Не устанавливается Debian на hp spectre x360

Форум — Linux-install

В процессе установки возникает ошибка.

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

 , , ,

user08
()

Не могу загрузиться с флэшки

Форум — General

Приобрёл hp spectre x360. Пытаюсь установить Debian. Флэшка проверенная, работающая. Secure boot задизэблил. Нажимаю F9 при включении, Выбираю флэшку, затем bootmgr.efi и ничего не происходит просто обновляется boot manager. Что делать?

 ,

user08
()

Dell xps 13 2-in-1. Когда начнёт продаваться в России?

Форум — Linux-hardware

Хочу приобрести Dell xps 13 2-in-1, но даже не могу найти информацию, когда он начнёт продаваться в России. Кто-нибудь может подсказать?

 

user08
()

Клавиатура через Bluetooth в Debian

Форум — General

Приобрёл клавиатуру с мышью (Microsoft Sculpt Ergonomic Desktop) и обнаружил, что они подключаются через Bluetooth. Я блютузом почти не пользовался. Установил Blueman, когда выбираю Setup New Device получаю No adapters found. (Блютуз в ноутбуке присутствует, и когда-то давно я им немного пользовался в Windows). Возможно ли заставить работать эти клавиатуру с мышью в Debian?

 , ,

user08
()

Не получается отправить письмо

Форум — Development

Нашёл такой код отправки письма 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> >

Что надо поправить?

 , , , ,

user08
()

Как отправить почту?

Форум — Development

Мне надо, чтобы мой сервер отправлял регистрационные коды пользователям. Использую такую разработку

#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

Что мне надо поправить, чтобы отправка почты заработала?

 , , ,

user08
()

Как сделать из Qt pro проекта CMake?

Форум — General

Есть проект не зависимый от Qt, который собирается из Qt pro файла, но его файлы не зависят от Qt, поэтому хотелось бы избавить его от необходимости устанавливать Qt. Возможно ли это легко сделать, и будет ли работать QtCreator с этим форматом?

 ,

user08
()

Arch. startx завершается ошибкой no screens found

Форум — General

Безуспешно вызываю startx. В /var/log/Xorg.0.log выводится строка no screens found. Arch установлен в VirtualBox.

 , ,

user08
()

apt-get purge - no space left

Форум — General

Что делать, если во время установки пакета, оказалось недостаточно места, и это ничего бы страшного, я бы просто удалил его. Но вызов remove и purge тоже пишет no space left on device и перезагрузка не помогает.

 ,

user08
()

Не устанавливаются VirtualBox guest additions в Debian

Форум — General

VirtualBox 5.1.8. Гостевой дистрибутив Debian 8, 32 bit.

$sh ./autorun.sh
Linux guest additions installer not found -- try to start them manually.

 ,

user08
()

VirtualBox. Не работает shared folders в postreus

Форум — General

Не работает shared folders в postreus в VirtualBox. Добавил папку, но она не появляется.

 ,

user08
()

OpenSSL. SSL_read - ограничить время ожидания

Форум — Development

Мой сервер использует синхронные сокеты. Я бы хотел чтобы клиенты, долго не проявляющие активность, отсоединялись. Мне бы для этого подошла возможность установить время ожидания приёма данных - SSL_read. Есть ли возможность так сделать?

 

user08
()

Firefox - сгруппировались иконки

Форум — General

После обновления Firefox все иконки слева от гамбургера сгруппировались в кнопку «>>» и теперь, чтобы нажать иконку, вместо одного клика, мне надо нажать эту кнопку потом навести на иконку и ещё раз нажать, неудобно, а места много.

 

user08
()

Can't bind port

Форум — Admin

Если закрываю приложение Ctrl+Z, порт остаётся не доступен.

Я использую kill -9 `lsof -t -i:10000`

Это помогает, но надо около минуты подождать, чтобы он снова заработал. А пока не заработает, при новом запуске сервера получаю Can't bind port 10000. Как можно решить эту проблему? Использую Debian.

 ,

user08
()

Qt. Проверить влезает ли текст по горизонтали в QTextEdit

Форум — Development

В моём QTextEdit оба скроллбара всегда видны. По умолчанию текст двигается горизонтально. Но когда текст полностью влезает в QTextEdit по горизонтали, мне надо чтобы он двигался вертикально. Как можно сделать соответствующую проверку?

 , , ,

user08
()

Qt. Сохранить пароль

Форум — Development

Собираюсь добавить возможность сохранить пароль. Существует ли в Qt или Boost функция, возвращающая наилучшую директорию для сохранения пароля пользователя в Linux и Windows?

 , ,

user08
()

KDE Plasma 5 - виджет свернуть все окна. (Нужен скрипт)

Форум — General

Добавил в Kubuntu 16.04.1 виджет свернуть все окна, в настройках есть радиобаттон свернуть все окна или выполнить скрипт. Свернуть все окна - не работает, ничего не происходит. Зато работает пункт - выполнить скрипт. Может кто-нибудь подсказать скрипт - свернуть все окна и восстановить, как в виндоусе?

 , ,

user08
()

RSS подписка на новые темы