products/Sources/formale Sprachen/C/Postgres/src/common/   (Postfix Mailserver Version 3.11©)  Datei vom 11.4.2026 mit Größe 7 kB image not shown  

Quelle  split_addr.c

  Sprache: C
 

/*++
/* NAME
/* split_addr 3
/* SUMMARY
/* recipient localpart address splitter
/* SYNOPSIS
/* #include <split_addr.h>
/*
/* char *split_addr_internal(localpart, delimiter_set)
/* char *localpart;
/* const char *delimiter_set;
/* LEGACY SUPPORT
/* char *split_addr(localpart, delimiter_set)
/* char *localpart;
/* const char *delimiter_set;
/* DESCRIPTION
/* split_addr*() null-terminates \fIlocalpart\fR at the first
/* occurrence of the \fIdelimiter\fR character(s) found, and
/* returns a pointer to the remainder.
/*
/* With split_addr_internal(), the address must be in internal
/* (unquoted) form.
/*
/* split_addr() is a backwards-compatible form for legacy code.
/*
/* Reserved addresses are not split: postmaster, mailer-daemon,
/* double-bounce. Addresses that begin with owner-, or addresses
/* that end in -request are not split when the owner_request_special
/* parameter is set.
/* LICENSE
/* .ad
/* .fi
/* The Secure Mailer license must be distributed with this software.
/* AUTHOR(S)
/* Wietse Venema
/* IBM T.J. Watson Research
/* P.O. Box 704
/* Yorktown Heights, NY 10598, USA
/*
/* Wietse Venema
/* Google, Inc.
/* 111 8th Avenue
/* New York, NY 10011, USA
/*--*/


/* System library. */

#include <sys_defs.h>
#include <string.h>

#ifdef STRCASECMP_IN_STRINGS_H
#include <strings.h>
#endif

/* Utility library. */

#include <split_at.h>
#include <stringops.h>

/* Global library. */

#include <mail_params.h>
#include <mail_addr.h>
#include <split_addr.h>

/* split_addr_internal - split address with extreme prejudice */

char   *split_addr_internal(char *localpart, const char *delimiter_set)
{
    ssize_t len;

    /*
     * Don't split these, regardless of what the delimiter is.
     */

    if (strcasecmp(localpart, MAIL_ADDR_POSTMASTER) == 0)
 return (0);
    if (strcasecmp(localpart, MAIL_ADDR_MAIL_DAEMON) == 0)
 return (0);
    if (strcasecmp_utf8(localpart, var_double_bounce_sender) == 0)
 return (0);

    /*
     * Backwards compatibility: don't split owner-foo or foo-request.
     */

    if (strchr(delimiter_set, '-') != 0 && var_ownreq_special != 0) {
 if (strncasecmp(localpart, "owner-"6) == 0)
     return (0);
 if ((len = strlen(localpart) - 8) > 0
     && strcasecmp(localpart + len, "-request") == 0)
     return (0);
    }

    /*
     * Safe to split this address. Do not split the address if the result
     * would have a null localpart.
     */

    if ((len = strcspn(localpart, delimiter_set)) == 0 || localpart[len] == 0) {
 return (0);
    } else {
 localpart[len] = 0;
 return (localpart + len + 1);
    }
}

Messung V0.5 in Prozent
C=71 H=95 G=83

¤ Dauer der Verarbeitung: 0.3 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.