ohnx / barid Goto Github PK
View Code? Open in Web Editor NEWSimple SMTP mail server
License: MIT License
Simple SMTP mail server
License: MIT License
i've tried 2 machines with the latest code and they both appear to fail to bind port 25 even though they are sudo... is this a problem with your software?
Pretty sure everything runs as root right now. This is definitely not ideal! The networking processes do not need root. Also, the way that I pass around addresses in a pipe feels super sketchy right now.
Is this expected behaviour? If the email size is truncated, I don't think we should serialize the piece that wasn't.
Unknown reasons. Trying to find the cause right now now by running the app with debug flags in valgrind.
A build time flag would work fine, but I really want some way to log the raw network packets being sent (ssl decrypted) in order to help deal with debugging issues like #21 .
afl created a bunch of useful test cases... Find some way to use them!
If I send an email with no data (i.e., never send DATA
command), it is still delivered.
If there are no recipients, STDOUT will still show stuff.
Make sure no memory leaks. Looks like it's leaking a bit of memory??
Can fix entire crashes
Why not
I thought i did this, but I guess not. This is very important for standards compliance.
I made a struct common_data
but didn't use it... should deal with it. use it.
Use something like https://tls.mbed.org/ to make mail
support SSL/TLS like real mail servers do! :D
or at least reset the expected status properly??
RSET should erase the transaction but leave the conn open.
Currently, once a RSET is sent, the server expects a EHLO/HELO back.
Issue description: caused by RSET, then trying to do MAIL stuff (thereby skipping storing the server name that EHLO/HELO would have done. The server expects a server name, but it is still null, so the strdup segfaults.
Test case:
EHLO
DATA
.org>
RSet
MAIL FROM:<[email protected]>
RCexam
RCPT st>
RCPT TO:<mar@e�ample.com>
DATA
Th.
.
QUIT
Fixes:
Perhaps allow the specification of a series of IP's that would automatically be blocked. The app can place a watch on the file containing IP's and automatically update the deny list when the file changes.
https://copyninja.info/blog/afl-and-network-programs.html
http://lcamtuf.coredump.cx/afl/
Will need to edit out threaded portions of the program and disable SSL.
no idea how, but apparently servers randomly close the connection after the initial HELO/EHLO...
The initial greeting sends fine and so does the reply to the EHLO, I think... wonder why?!?!
origin_ip
is unique to the listening thread, and when a thread is spawned to write to the disk (serialize), it also writes to origin_ip
, which is a race condition.
getnameinfo
apparently does some weird stuff.
==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x5457CD9 by thread #2
==35290== Locks held: none
==35290== at 0x4C38E24: __strlen_sse2 (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x50FE734: __libc_alloc_buffer_copy_string (alloc_buffer_copy_string.c:28)
==35290== by 0x51A89E4: alloc_buffer_copy_string (alloc_buffer.h:353)
==35290== by 0x51A89E4: update_from_conf (resolv_conf.c:546)
==35290== by 0x51A89E4: __resolv_conf_attach (resolv_conf.c:640)
==35290== by 0x51A5D9C: __res_vinit (res_init.c:613)
==35290== by 0x51A6F9F: maybe_init (resolv_context.c:122)
==35290== by 0x51A6F9F: context_get (resolv_context.c:184)
==35290== by 0x51A6F9F: __resolv_context_get (resolv_context.c:195)
==35290== by 0x5196321: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:217)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== Address 0x5457cd9 is 153 bytes inside a block of size 160 alloc'd
==35290== at 0x4C30F2F: malloc (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x50FE640: __libc_alloc_buffer_allocate (alloc_buffer_allocate.c:26)
==35290== by 0x51A8097: alloc_buffer_allocate (alloc_buffer.h:143)
==35290== by 0x51A8097: __resolv_conf_allocate (resolv_conf.c:410)
==35290== by 0x51A5093: __resolv_conf_load (res_init.c:587)
==35290== by 0x51A75A8: __resolv_conf_get_current (resolv_conf.c:162)
==35290== by 0x51A5DFC: __res_vinit (res_init.c:609)
==35290== by 0x51A6F9F: maybe_init (resolv_context.c:122)
==35290== by 0x51A6F9F: context_get (resolv_context.c:184)
==35290== by 0x51A6F9F: __resolv_context_get (resolv_context.c:195)
==35290== by 0x5196321: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:217)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== Block was alloc'd by thread #4
==35290==
==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x785ED94 by thread #2
==35290== Locks held: none
==35290== at 0x4C3C81A: __strstr_sse2 (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x50ED610: _IO_file_fopen@@GLIBC_2.2.5 (fileops.c:287)
==35290== by 0x50DFEA9: __fopen_internal (iofopen.c:78)
==35290== by 0x50DFEA9: fopen@@GLIBC_2.2.5 (iofopen.c:89)
==35290== by 0x785A544: internal_setent (files-XXX.c:77)
==35290== by 0x785A544: _nss_files_gethostbyaddr_r (files-hosts.c:112)
==35290== by 0x5196460: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:315)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Address 0x785ed94 is in a r-x mapped file /lib/x86_64-linux-gnu/libnss_files-2.27.so segment
==35290==
==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x785ED95 by thread #2
==35290== Locks held: none
==35290== at 0x4C3C834: __strstr_sse2 (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x50ED610: _IO_file_fopen@@GLIBC_2.2.5 (fileops.c:287)
==35290== by 0x50DFEA9: __fopen_internal (iofopen.c:78)
==35290== by 0x50DFEA9: fopen@@GLIBC_2.2.5 (iofopen.c:89)
==35290== by 0x785A544: internal_setent (files-XXX.c:77)
==35290== by 0x785A544: _nss_files_gethostbyaddr_r (files-hosts.c:112)
==35290== by 0x5196460: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:315)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Address 0x785ed95 is in a r-x mapped file /lib/x86_64-linux-gnu/libnss_files-2.27.so segment
==35290==
==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x785ED90 by thread #2
==35290== Locks held: none
==35290== at 0x4C3C903: strpbrk (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x785948D: parse_line (files-hosts.c:51)
==35290== by 0x785948D: internal_getent (files-XXX.c:222)
==35290== by 0x785A586: _nss_files_gethostbyaddr_r (files-hosts.c:112)
==35290== by 0x5196460: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:315)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Address 0x785ed90 is in a r-x mapped file /lib/x86_64-linux-gnu/libnss_files-2.27.so segment
==35290==
==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x785ED91 by thread #2
==35290== Locks held: none
==35290== at 0x4C3C91C: strpbrk (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x785948D: parse_line (files-hosts.c:51)
==35290== by 0x785948D: internal_getent (files-XXX.c:222)
==35290== by 0x785A586: _nss_files_gethostbyaddr_r (files-hosts.c:112)
==35290== by 0x5196460: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:315)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Address 0x785ed91 is in a r-x mapped file /lib/x86_64-linux-gnu/libnss_files-2.27.so segment
==35290==
[!][2018-12-07 19:21:51] ==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x5457EF0 by thread #2
==35290== Locks held: none
==35290== at 0x4C3B67A: __memcmp_sse4_1 (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x5134077: __tzstring_len (tzset.c:94)
==35290== by 0x5134077: parse_tzname (tzset.c:177)
==35290== by 0x5134598: __tzset_parse_tz (tzset.c:329)
==35290== by 0x5136C5F: __tzfile_compute (tzfile.c:684)
==35290== by 0x513551D: __tz_convert (tzset.c:587)
==35290== by 0x110DCE: mail_serialize (mail_serialize.c:20)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Address 0x5457ef0 is 16 bytes inside a block of size 20 alloc'd
==35290== at 0x4C30F2F: malloc (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x51344F8: __tzstring_len (tzset.c:99)
==35290== by 0x51344F8: __tzstring (tzset.c:122)
==35290== by 0x513631B: __tzfile_read (tzfile.c:463)
==35290== by 0x51355C7: tzset_internal (tzset.c:406)
==35290== by 0x51355C7: __tz_convert (tzset.c:584)
==35290== by 0x110DCE: mail_serialize (mail_serialize.c:20)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Block was alloc'd by thread #4
==35290==
==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x5457EF1 by thread #2
==35290== Locks held: none
==35290== at 0x4C3B695: __memcmp_sse4_1 (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x5134077: __tzstring_len (tzset.c:94)
==35290== by 0x5134077: parse_tzname (tzset.c:177)
==35290== by 0x5134598: __tzset_parse_tz (tzset.c:329)
==35290== by 0x5136C5F: __tzfile_compute (tzfile.c:684)
==35290== by 0x513551D: __tz_convert (tzset.c:587)
==35290== by 0x110DCE: mail_serialize (mail_serialize.c:20)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Address 0x5457ef1 is 17 bytes inside a block of size 20 alloc'd
==35290== at 0x4C30F2F: malloc (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x51344F8: __tzstring_len (tzset.c:99)
==35290== by 0x51344F8: __tzstring (tzset.c:122)
==35290== by 0x513631B: __tzfile_read (tzfile.c:463)
==35290== by 0x51355C7: tzset_internal (tzset.c:406)
==35290== by 0x51355C7: __tz_convert (tzset.c:584)
==35290== by 0x110DCE: mail_serialize (mail_serialize.c:20)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Block was alloc'd by thread #4
==35290==
==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x545507C by thread #2
==35290== Locks held: none
==35290== at 0x4C3C454: rawmemchr (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x50F1351: _IO_str_init_static_internal (strops.c:41)
==35290== by 0x50E278C: vsscanf (iovsscanf.c:40)
==35290== by 0x50DC1A3: sscanf (sscanf.c:32)
==35290== by 0x5134695: parse_offset (tzset.c:208)
==35290== by 0x5134695: __tzset_parse_tz (tzset.c:329)
==35290== by 0x5136C5F: __tzfile_compute (tzfile.c:684)
==35290== by 0x513551D: __tz_convert (tzset.c:587)
==35290== by 0x110DCE: mail_serialize (mail_serialize.c:20)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Address 0x545507c is 44 bytes inside a block of size 45 alloc'd
==35290== at 0x4C30F2F: malloc (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x5135B99: __tzfile_read (tzfile.c:279)
==35290== by 0x51355C7: tzset_internal (tzset.c:406)
==35290== by 0x51355C7: __tz_convert (tzset.c:584)
==35290== by 0x110DCE: mail_serialize (mail_serialize.c:20)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Block was alloc'd by thread #4
==35290==
[!][2018-12-07 19:21:51] [!][2018-12-07 19:21:51] Mail from localhost (127.0.0.1)Mail from localhost (127.0.0.1) (not secure)
(not secure)
[!][2018-12-07 19:21:51] Mail from localhost (127.0.0.1)Mail from localhost (127.0.0.1) (not secure)
(not secure)
==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x5457CD8 by thread #2
==35290== Locks held: none
==35290== at 0x4C39AC3: strcmp (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x51A7B2C: resolv_conf_matches (resolv_conf.c:323)
==35290== by 0x51A7B2C: __resolv_conf_get (resolv_conf.c:362)
==35290== by 0x51A6F2F: context_alloc (resolv_context.c:137)
==35290== by 0x51A6F2F: context_get (resolv_context.c:181)
==35290== by 0x51A6F2F: __resolv_context_get (resolv_context.c:195)
==35290== by 0x5196321: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:217)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Address 0x5457cd8 is 152 bytes inside a block of size 160 alloc'd
==35290== at 0x4C30F2F: malloc (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x50FE640: __libc_alloc_buffer_allocate (alloc_buffer_allocate.c:26)
==35290== by 0x51A8097: alloc_buffer_allocate (alloc_buffer.h:143)
==35290== by 0x51A8097: __resolv_conf_allocate (resolv_conf.c:410)
==35290== by 0x51A5093: __resolv_conf_load (res_init.c:587)
==35290== by 0x51A75A8: __resolv_conf_get_current (resolv_conf.c:162)
==35290== by 0x51A5DFC: __res_vinit (res_init.c:609)
==35290== by 0x51A6F9F: maybe_init (resolv_context.c:122)
==35290== by 0x51A6F9F: context_get (resolv_context.c:184)
==35290== by 0x51A6F9F: __resolv_context_get (resolv_context.c:195)
==35290== by 0x5196321: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:217)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== Block was alloc'd by thread #4
==35290==
==35290== ----------------------------------------------------------------
==35290==
==35290== Possible data race during read of size 1 at 0x5457CD9 by thread #2
==35290== Locks held: none
==35290== at 0x4C39AE7: strcmp (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x51A7B2C: resolv_conf_matches (resolv_conf.c:323)
==35290== by 0x51A7B2C: __resolv_conf_get (resolv_conf.c:362)
==35290== by 0x51A6F2F: context_alloc (resolv_context.c:137)
==35290== by 0x51A6F2F: context_get (resolv_context.c:181)
==35290== by 0x51A6F2F: __resolv_context_get (resolv_context.c:195)
==35290== by 0x5196321: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:217)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== by 0x4C36C26: ??? (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x4E496DA: start_thread (pthread_create.c:463)
==35290== by 0x518288E: clone (clone.S:95)
==35290== Address 0x5457cd9 is 153 bytes inside a block of size 160 alloc'd
==35290== at 0x4C30F2F: malloc (in /usr/lib/valgrind/vgpreload_helgrind-amd64-linux.so)
==35290== by 0x50FE640: __libc_alloc_buffer_allocate (alloc_buffer_allocate.c:26)
==35290== by 0x51A8097: alloc_buffer_allocate (alloc_buffer.h:143)
==35290== by 0x51A8097: __resolv_conf_allocate (resolv_conf.c:410)
==35290== by 0x51A5093: __resolv_conf_load (res_init.c:587)
==35290== by 0x51A75A8: __resolv_conf_get_current (resolv_conf.c:162)
==35290== by 0x51A5DFC: __res_vinit (res_init.c:609)
==35290== by 0x51A6F9F: maybe_init (resolv_context.c:122)
==35290== by 0x51A6F9F: context_get (resolv_context.c:184)
==35290== by 0x51A6F9F: __resolv_context_get (resolv_context.c:195)
==35290== by 0x5196321: gethostbyaddr_r@@GLIBC_2.2.5 (getXXbyYY_r.c:217)
==35290== by 0x519F14F: gni_host_inet_name.isra.1 (getnameinfo.c:232)
==35290== by 0x519F7C1: gni_host_inet (getnameinfo.c:380)
==35290== by 0x519F7C1: gni_host (getnameinfo.c:422)
==35290== by 0x519F7C1: getnameinfo (getnameinfo.c:539)
==35290== by 0x110DAC: mail_serialize (mail_serialize.c:16)
==35290== by 0x110062: server_child (server.c:149)
==35290== Block was alloc'd by thread #4
==35290==
This might be kinda hard to do, but having an option to enable DKIM/SPF would prevent a lot of spam.
Looks like barid is accepting the first 286188 bytes of a mail and then dying, but still serializing the mail. On the sender's side, it looks like barid died, so it will try a re-send, but on barid's side, it accepted the email and will write it out. Hmm...
Instead of 1 or all, there should be configurable number of accepted domains.
I think that getopt would be best to use, so that we can do something like this:
e.g. ./mail -o STDOUT -p 25 -k <SSL key> -c <more SSL stuff...> example.com example.net
Using getopt, it's easy to figure out the remaining args.
it would be nice to have the output file owned by the correct user, if the username exists.
It would be nice if barid could reload its configuration on-the-fly. Not sure if I would want to implement some sort of atomicity for config and how I would propagate the changes, though.
use something like libev or libuv or libevent to do actual non-blocking io...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.