int connectMailServer() { int sock; struct sockaddr_in addr; if((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); return -1; } memset(&addr, 0, sizeof(addr)); #ifdef FreeBSD addr.sin_len = sizeof(addr); #endif addr.sin_family = AF_INET; addr.sin_port = htons(SMTPPORT); addr.sin_addr.s_addr = inet_addr(RELAY_SERVER_IP); if(connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { perror(RELAY_SERVER_IP); close(sock); return -1; } if(waitReply(sock) != 2) { close(sock); return -1; } if(sendRequest(sock, "helo " MYHOSTNAME "\n") || waitReply(sock) != 2) { close(sock); return -1; } else return sock; }
void doSendMail(int sock, FILE *fp, char *from, char *to, char *subject) { char buf[256]; snprintf(buf, sizeof(buf), "mail from: %s\n", from); if(sendRequest(sock, buf) || waitReply(sock) != 2) return; snprintf(buf, sizeof(buf), "rcpt to: %s\n", to); if(sendRequest(sock, buf) || waitReply(sock) != 2) return; if(sendRequest(sock, "data\n") || waitReply(sock) != 3) return; doSendBody(sock, fp, from, to, subject); if(sendRequest(sock, "\n.\n") || waitReply(sock) != 2) return; }
void regutil_storeCertificates(Plugin *plugin, const char *certs) { PipeInfo pipeinfo; openPipes(&pipeinfo, plugin); sendHeader(&pipeinfo, plugin, PC_StoreCertificates); pipe_sendOptionalString(pipeinfo.out, certs); plugin->lastError = waitReply(&pipeinfo); closePipes(&pipeinfo); }
int sign_performAction_Authenticate(Plugin *plugin) { PipeInfo pipeinfo; openPipes(&pipeinfo, plugin); sendHeader(&pipeinfo, plugin, PC_Authenticate); sendSignCommon(&pipeinfo, plugin); plugin->lastError = waitReply(&pipeinfo); plugin->info.auth.signature = pipe_readString(pipeinfo.in); closePipes(&pipeinfo); return plugin->lastError; }
int sign_performAction_Sign(Plugin *plugin) { PipeInfo pipeinfo; openPipes(&pipeinfo, plugin); sendHeader(&pipeinfo, plugin, PC_Sign); sendSignCommon(&pipeinfo, plugin); pipe_sendString(pipeinfo.out, plugin->info.sign.message); pipe_sendOptionalString(pipeinfo.out, plugin->info.sign.invisibleMessage); plugin->lastError = waitReply(&pipeinfo); plugin->info.auth.signature = pipe_readString(pipeinfo.in); closePipes(&pipeinfo); return plugin->lastError; }
char *regutil_createRequest(Plugin *plugin) { PipeInfo pipeinfo; openPipes(&pipeinfo, plugin); sendHeader(&pipeinfo, plugin, PC_CreateRequest); // Send password policy pipe_sendInt(pipeinfo.out, plugin->info.regutil.input.minPasswordLength); pipe_sendInt(pipeinfo.out, plugin->info.regutil.input.minPasswordNonDigits); pipe_sendInt(pipeinfo.out, plugin->info.regutil.input.minPasswordDigits); // Send PKCS10 info RegutilPKCS10 *pkcs10 = plugin->info.regutil.input.pkcs10; while (pkcs10) { pipe_sendInt(pipeinfo.out, PLS_MoreData); pipe_sendInt(pipeinfo.out, pkcs10->keyUsage); pipe_sendInt(pipeinfo.out, pkcs10->keySize); pipe_sendOptionalString(pipeinfo.out, pkcs10->subjectDN); pipe_sendInt(pipeinfo.out, pkcs10->includeFullDN); pkcs10 = pkcs10->next; } pipe_sendInt(pipeinfo.out, PLS_End); // Send CMC info RegutilCMC *cmc = &plugin->info.regutil.input.cmc; pipe_sendOptionalString(pipeinfo.out, cmc->oneTimePassword); pipe_sendOptionalString(pipeinfo.out, cmc->rfc2729cmcoid); plugin->lastError = waitReply(&pipeinfo); char *request = pipe_readString(pipeinfo.in); if (plugin->lastError) { free(request); request = NULL; } closePipes(&pipeinfo); return request; }
void RequestManager::dispatchAndWait(RequestID request) { dispatch(request); waitReply(request); }