summaryrefslogtreecommitdiff
path: root/usr.sbin/smtpd/util.c
AgeCommit message (Collapse)Author
2014-04-19(void) cast a strlcpy that cannot truncateGilles Chehade
2014-02-04extend allowed charset for email address, escape all potentially dangerous ones.Eric Faurot
2014-02-04add base64_encode/base64_decode helpersEric Faurot
2014-02-04get rid of fdlimit()Eric Faurot
2014-01-08ctype cleanup; ok gillesTheo de Raadt
2013-12-26bcopy -> memmoveEric Faurot
bzero -> memset
2013-11-28unsigned char casts for ctypeEric Faurot
ok gilles@
2013-11-19Allow '*' in the user part of mailaddresses. By default, potentially dangerousEric Faurot
characters are replaced when expanding for local deliveries, unless the "raw" modifier is specified.
2013-10-29use "/etc/mail/mailname" instead of "/etc/mailname" and make it a define.Eric Faurot
2013-10-29randomize counter part of generated uidsEric Faurot
2013-10-27use log_* functions instead of err*/warn*Eric Faurot
2013-10-25local enqueuer improvements:Eric Faurot
- parse the whole input before trying to establish the connection to the local socket: fixes timeout problems when reading the output of a long running program. - use sendmail(8)-like exit status.
2013-07-19add '!' in email addresses supported charsetEric Faurot
2013-07-19Introduce expand string modifiersEric Faurot
2013-07-19get rid of sa_set_port() and its awfully contorted implementationEric Faurot
2013-05-24sync with OpenSMTPD 5.3.2Eric Faurot
ok gilles@
2013-04-12replace MAX_LINE_SIZE and SMTP_LINE_MAX with SMTPD_MAXLINESIZE forEric Faurot
consistency and clarity. Remove useless and confusing extra byte in a few arrays based on this define. ok gilles@
2013-02-05- handle getaddrinfo() error as LKA_TEMPFAILGilles Chehade
- handle getsockname() error in smtp_connected() - accept '/' as part of user-part, expand to ':' as done by qmail - fix wrong check in mda leading to bogus Return-Path header - fix aliases parsing when there's a white space between key and separator - some cosmethic cleanup
2013-01-31assorted fixes spotted by Coverity.Eric Faurot
some log message updates. ok gilles@
2013-01-26Sync with our smtpd repo:Gilles Chehade
* first bricks of ldap and sqlite support (not finished but both working) * new table API to replace map API, all lookups are done through tables * improved handling of temporary errors throughout the daemon * improved scheduler and mta logic: connection reuse, optimizes batches * improved queue: more tolerant to admin errors, new layout, less disk-IO * improved memory usage under high load * SSL certs/keys isolated to lookup process to avoid facing network * VIRTUAL support improved, fully virtual setups possible now * runtime tracing of processes through smtpctl trace * ssl_privsep.c sync-ed with relayd * ssl.c no longer contains smtpd specific interfaces * smtpd-specific ssl bits moved to ssl_smtpd.c * update mail address in copyright FLUSH YOUR QUEUE. FLUSH YOUR QUEUE. FLUSH YOUR QUEUE. FLUSH YOUR QUEUE. smtpd.conf(5) simplified, it will require adaptations ok eric@
2012-11-23knfEric Faurot
ok gilles@
2012-11-12Cleanups and improvements:Eric Faurot
* Log more events (especially client session) and use a better scheme for that: each messages is prefixed with a token to easily identify its class: - info/warn/debug: general server messages - smtp-in: smtp client connections - relay: status update for relayed messages - delivery: status update for local deliveries * Implement "smtpctl monitor" to display updates of selected internal counters. * When reloading the on-disk queue at startup do not commit a message if no envelope was submitted for that message. * Remove unused stuff in the config parser. ok gilles@
2012-10-10teach smtpctl how to display envelopes and messages using their id.Gilles Chehade
this allows an admin to inspect the queue without having to manually extract bucket and find the path to an envelope or message. diff by Sunil Nimmagadda <sunil@poolp.org> ok eric@, chl@ and I
2012-10-07convert iobuf_queue()'s to iobuf_fqueue(). (idea from gilles@)Charles Longeau
introduce iobuf_xinit() and iobuf_xfqueue(). (idea from eric@) ok gilles@
2012-10-04change to from=<...>, to=<...> instead of to=<...> for loggingTodd T. Fries
from gilles@ ok eric@
2012-09-26Stop using the delivery_data union (field "to") in delivery_mda.Eric Faurot
It's confusing and not necessary as it's only used for "buffer". Instead, just add a "buffer" member in the structure and rename "as_user" to "user". The delivery_data union becomes an anonymous union in expandnode, which is the only other place where it's used. ok gilles@
2012-09-26log final user and method used for local deliveries.Eric Faurot
ok gilles@
2012-09-25need inttypes.hEric Faurot
from millert@
2012-09-21Add a log_envelope() function that log envelope status in a uniform way.Eric Faurot
It automagically adds an rcpt=<user@domain> field if "dest" differs from the original "rcpt". The function takes an "extra" parameter that allows to add some specific info depending on the context. ok gilles@
2012-09-21Move ruleset_match() prototype to smtpd.h and make the envelope const.Eric Faurot
Adapt a lot of functions in chain to use const args where required. ok gilles@
2012-09-20constify parameters that are supposed to be const.Eric Faurot
ok gilles@
2012-09-18- add xmemdup() helper.Eric Faurot
- remove useless block in switch. ok gilles@
2012-09-16replace BSD-licensed mkdir_p() with ISC-licensed mkdirs(), this allows usGilles Chehade
to avoid a dual-licensed util.c for no reason ok chl@
2012-09-15When enqueueing from the local socket, the input address is faked as "::1".Eric Faurot
This is confusing and even broken, as systems running with ipv6 disabled on lo0 will not be able to enqueue mails using the local socket. So instead, use AF_LOCAL and print it as "local" in envelopes/maps. Add it to the "localhost" and "all" maps accordingly, and fix the ruleset matching. ok gilles@ chl@
2012-08-27don't call ckdir() on each mktmpfile() call.Charles Longeau
ok gilles@
2012-08-26- define ZLIB_BUFFER_SIZE instead of hardcoding 8192Gilles Chehade
- check gzdopen() failure - call gzclose() whenever a failure occurs after gzdopen() - simplify slightly some checks in compress/uncompress - create PATH_TEMPORARY in /var/spool/smtpd, chmod 700, owned by _smtpd - compress_zlib should use PATH_TEMPORARY instread of /tmp as we're chrooted and this will otherwise lead to a fatal() ok chl@
2012-08-25Add compress_backend, allowing compression of messages and envelopes in the ↵Charles Longeau
queue. To use it, just add "queue compress" in smtpd.conf. For now, only zlib is used. lots of feedback from eric@ and gilles@ ok eric@ gilles@
2012-08-25- add myself to the copyright in control.c, i've done quite a few changesGilles Chehade
there in the last few years ;-) - get rid of availdesc(): getdtablecount() is so much more reliable - get rid of env->sc_maxconn, we can be much smarter with getdtablecount() and getdtablesize() - disable accept when we hit the control process fd reserve - disable accept when we fail - enable accept when we're back below the limit this is not the full fd exhaustion diff, i'll merge changes from relayd tomorrow, this was only required to get rid of the env->sc_maxconn and availdesc() mess "reads alright" eric@
2012-08-19coding style: replace all occurences of u_int* with uint*Charles Longeau
ok eric@
2012-08-11make sure generated id is never 0.Eric Faurot
ok gilles@
2012-08-08Improve the scheduler backend API.Eric Faurot
New envelopes are pushed into the scheduler through the insert() commit() rollback() transactional interface functions. Worklists are pulled from the scheduler through a single batch() interface function, which returns a list of envelope ids and the type of processing. Envelopes returned in this batch are said to be "in-flight", as opposed to "pending". They are supposed to be processed in some way, and either updated() or deleted() at some point. The schedule()/remove() functions are used to alter the internal state of "pending" envelopes to make them schedulable. The enve- lopes will be part of a worklist on the next call to batch(). Rewrite the scheduler_ramqueue backend. The initial queue loading in now done by the queue. ok gilles@
2012-08-07Implement a set of tree_* functions for storing arbitrary pointers in splayEric Faurot
trees with uint64_t keys. Also add x{m,c}alloc and xstrdup helpers. ok gilles@
2012-07-29- introduce xlowercase() and allow lowercase() to fail gracefullyGilles Chehade
- replace all calls to lowercase() with calls to xlowercase() - in the format string expansion, lowercase() all formats we will have to reassess all calls to xlowercase() even though it has never triggered as far as I know, we can probably gracefully fail some of them. right now we're just keeping former behaviour. this commit fixes issue reported by Hugo Osvaldo Barrera where a %u format could lead to a delivery failure (ie: GILLES@openbsd.org should be expanded to gilles, not GILLES ... only for local deliveries). ok chl@ on the idea, ok eric@ on the diff
2012-07-12add support for maildir tagging/folders.Charles Longeau
ok gilles@ ok eric@ on previous versions of this patch
2012-07-11enable back = char in address localpart, that is sometimes used by mailing ↵Charles Longeau
lists. ok gilles@ eric@
2012-07-11Don't respect RFC 5322, that allows some crazy characters in emailCharles Longeau
localpart, like !#$&'*/=?^`{|}~ ... and all the other ones that can be double quoted, just refuse them. ok gilles@ eric@
2012-07-10accept address literal for the recipient domain.Charles Longeau
while there, change valid_{local,domain}part() prototypes to use const char *. with input from gilles@ and eric@ ok gilles@ eric@
2012-07-08- plug text_to_relayhost() in parse.y to support relay URLs.Gilles Chehade
- document the new URL syntax in smtpd.conf.5 - replace starttls:// schema with tls:// Beware, "relay via" rules should now be expressed with a relay URL: accept [...] relay via "mx1.example.org" smtps port 465 becomes accept [...] relay via "smtps://mx1.example.org" This will allow using mappings of relays with different protocols and options. Make sure to update your smtpd.conf if you relay via ! ok eric, ok chl
2012-07-02Sleeping here is definitely not what we want to do. Use a cyclingEric Faurot
counter with some randomness to generate short-lived unique ids. ok gilles@
2012-05-29- introduce text_to_relayhost() which converts an url into a relayhost.Gilles Chehade
urls are of the form: [schema://]host[:ip] not used, yet other commits are following ;-)