~ubuntu-branches/ubuntu/maverick/postfix/maverick-security

« back to all changes in this revision

Viewing changes to src/smtp/smtp_proto.c

  • Committer: Bazaar Package Importer
  • Author(s): LaMont Jones, Matt Moen, Wietse Venema, LaMont Jones
  • Date: 2010-06-13 18:30:59 UTC
  • mfrom: (33.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20100613183059-1nooxfg5yjj3itux
Tags: 2.7.1-1
[Matt Moen]

* Create ca-certificates.crt for smtp{,d}_enforce_tls case, too. 
  Closes: #575464

[Wietse Venema]

* New upstream release.

[LaMont Jones]

* add freebsd 8 support.  Closes: #570327
* Drop tinycdb build-dep.  Closes: #577997

Show diffs side-by-side

added added

removed removed

Lines of Context:
1204
1204
             * Build the XFORWARD command. With properly sanitized
1205
1205
             * information, the command length stays within the 512 byte
1206
1206
             * command line length limit.
 
1207
             * 
 
1208
             * XXX smtpd_xforward_preset() initializes some fields as "unknown"
 
1209
             * and some as null; historically, pickup(8) does not send any of
 
1210
             * these, and the queue manager presets absent fields to "not
 
1211
             * available" except for the rewrite context which is preset to
 
1212
             * local by way of migration aid.  These definitions need to be
 
1213
             * centralized for maintainability.
1207
1214
             */
 
1215
#ifndef CAN_FORWARD_CLIENT_NAME
 
1216
#define _ATTR_AVAIL_AND_KNOWN_(val) \
 
1217
        (DEL_REQ_ATTR_AVAIL(val) && strcasecmp((val), "unknown"))
 
1218
#define CAN_FORWARD_CLIENT_NAME _ATTR_AVAIL_AND_KNOWN_
 
1219
#define CAN_FORWARD_CLIENT_ADDR _ATTR_AVAIL_AND_KNOWN_
 
1220
#define CAN_FORWARD_CLIENT_PORT _ATTR_AVAIL_AND_KNOWN_
 
1221
#define CAN_FORWARD_PROTO_NAME  _ATTR_AVAIL_AND_KNOWN_
 
1222
#define CAN_FORWARD_HELO_NAME   DEL_REQ_ATTR_AVAIL
 
1223
#define CAN_FORWARD_RWR_CONTEXT DEL_REQ_ATTR_AVAIL
 
1224
#endif
 
1225
 
1208
1226
        case SMTP_STATE_XFORWARD_NAME_ADDR:
1209
1227
            vstring_strcpy(next_command, XFORWARD_CMD);
1210
1228
            if ((session->features & SMTP_FEATURE_XFORWARD_NAME)
1211
 
                && DEL_REQ_ATTR_AVAIL(request->client_name)) {
 
1229
                && CAN_FORWARD_CLIENT_NAME(request->client_name)) {
1212
1230
                vstring_strcat(next_command, " " XFORWARD_NAME "=");
1213
1231
                xtext_quote_append(next_command, request->client_name, "");
1214
1232
            }
1215
1233
            if ((session->features & SMTP_FEATURE_XFORWARD_ADDR)
1216
 
                && DEL_REQ_ATTR_AVAIL(request->client_addr)) {
 
1234
                && CAN_FORWARD_CLIENT_ADDR(request->client_addr)) {
1217
1235
                vstring_strcat(next_command, " " XFORWARD_ADDR "=");
1218
1236
                xtext_quote_append(next_command, request->client_addr, "");
1219
1237
            }
1220
1238
            if ((session->features & SMTP_FEATURE_XFORWARD_PORT)
1221
 
                && DEL_REQ_ATTR_AVAIL(request->client_port)) {
 
1239
                && CAN_FORWARD_CLIENT_PORT(request->client_port)) {
1222
1240
                vstring_strcat(next_command, " " XFORWARD_PORT "=");
1223
1241
                xtext_quote_append(next_command, request->client_port, "");
1224
1242
            }
1231
1249
        case SMTP_STATE_XFORWARD_PROTO_HELO:
1232
1250
            vstring_strcpy(next_command, XFORWARD_CMD);
1233
1251
            if ((session->features & SMTP_FEATURE_XFORWARD_PROTO)
1234
 
                && DEL_REQ_ATTR_AVAIL(request->client_proto)) {
 
1252
                && CAN_FORWARD_PROTO_NAME(request->client_proto)) {
1235
1253
                vstring_strcat(next_command, " " XFORWARD_PROTO "=");
1236
1254
                xtext_quote_append(next_command, request->client_proto, "");
1237
1255
            }
1238
1256
            if ((session->features & SMTP_FEATURE_XFORWARD_HELO)
1239
 
                && DEL_REQ_ATTR_AVAIL(request->client_helo)) {
 
1257
                && CAN_FORWARD_HELO_NAME(request->client_helo)) {
1240
1258
                vstring_strcat(next_command, " " XFORWARD_HELO "=");
1241
1259
                xtext_quote_append(next_command, request->client_helo, "");
1242
1260
            }
1243
1261
            if ((session->features & SMTP_FEATURE_XFORWARD_DOMAIN)
1244
 
                && DEL_REQ_ATTR_AVAIL(request->rewrite_context)) {
 
1262
                && CAN_FORWARD_RWR_CONTEXT(request->rewrite_context)) {
1245
1263
                vstring_strcat(next_command, " " XFORWARD_DOMAIN "=");
1246
1264
                xtext_quote_append(next_command,
1247
1265
                     strcmp(request->rewrite_context, MAIL_ATTR_RWR_LOCAL) ?
1979
1997
    send_name_addr =
1980
1998
        var_smtp_send_xforward
1981
1999
        && (((session->features & SMTP_FEATURE_XFORWARD_NAME)
1982
 
             && DEL_REQ_ATTR_AVAIL(request->client_name))
 
2000
             && CAN_FORWARD_CLIENT_NAME(request->client_name))
1983
2001
            || ((session->features & SMTP_FEATURE_XFORWARD_ADDR)
1984
 
                && DEL_REQ_ATTR_AVAIL(request->client_addr))
 
2002
                && CAN_FORWARD_CLIENT_ADDR(request->client_addr))
1985
2003
            || ((session->features & SMTP_FEATURE_XFORWARD_PORT)
1986
 
                && DEL_REQ_ATTR_AVAIL(request->client_port)));
 
2004
                && CAN_FORWARD_CLIENT_PORT(request->client_port)));
1987
2005
    session->send_proto_helo =
1988
2006
        var_smtp_send_xforward
1989
2007
        && (((session->features & SMTP_FEATURE_XFORWARD_PROTO)
1990
 
             && DEL_REQ_ATTR_AVAIL(request->client_proto))
 
2008
             && CAN_FORWARD_PROTO_NAME(request->client_proto))
1991
2009
            || ((session->features & SMTP_FEATURE_XFORWARD_HELO)
1992
 
                && DEL_REQ_ATTR_AVAIL(request->client_helo))
 
2010
                && CAN_FORWARD_HELO_NAME(request->client_helo))
1993
2011
            || ((session->features & SMTP_FEATURE_XFORWARD_DOMAIN)
1994
 
                && DEL_REQ_ATTR_AVAIL(request->rewrite_context)));
 
2012
                && CAN_FORWARD_RWR_CONTEXT(request->rewrite_context)));
1995
2013
    if (send_name_addr)
1996
2014
        recv_state = send_state = SMTP_STATE_XFORWARD_NAME_ADDR;
1997
2015
    else if (session->send_proto_helo)