140266059SGregory Neil Shapiro /*
25dd76dd0SGregory Neil Shapiro * Copyright (c) 2001 Proofpoint, Inc. and its suppliers.
340266059SGregory Neil Shapiro * All rights reserved.
440266059SGregory Neil Shapiro *
540266059SGregory Neil Shapiro * By using this file, you agree to the terms and conditions set
640266059SGregory Neil Shapiro * forth in the LICENSE file which can be found at the top level of
740266059SGregory Neil Shapiro * the sendmail distribution.
840266059SGregory Neil Shapiro */
940266059SGregory Neil Shapiro
1040266059SGregory Neil Shapiro #include <sm/gen.h>
11*4313cc83SGregory Neil Shapiro SM_RCSID("@(#)$Id: strexit.c,v 1.6 2013-11-22 20:51:43 ca Exp $")
1240266059SGregory Neil Shapiro #include <sm/string.h>
1340266059SGregory Neil Shapiro #include <sm/sysexits.h>
1440266059SGregory Neil Shapiro
1540266059SGregory Neil Shapiro /*
1640266059SGregory Neil Shapiro ** SM_STREXIT -- convert EX_* value from <sm/sysexits.h> to a character string
1740266059SGregory Neil Shapiro **
1840266059SGregory Neil Shapiro ** This function is analogous to strerror(), except that it
1940266059SGregory Neil Shapiro ** operates on EX_* values from <sm/sysexits.h>.
2040266059SGregory Neil Shapiro **
2140266059SGregory Neil Shapiro ** Parameters:
2240266059SGregory Neil Shapiro ** ex -- EX_* value
2340266059SGregory Neil Shapiro **
2440266059SGregory Neil Shapiro ** Results:
2540266059SGregory Neil Shapiro ** pointer to a static message string
2640266059SGregory Neil Shapiro */
2740266059SGregory Neil Shapiro
2840266059SGregory Neil Shapiro char *
2940266059SGregory Neil Shapiro sm_strexit(ex)
3040266059SGregory Neil Shapiro int ex;
3140266059SGregory Neil Shapiro {
3240266059SGregory Neil Shapiro char *msg;
3340266059SGregory Neil Shapiro static char buf[64];
3440266059SGregory Neil Shapiro
3540266059SGregory Neil Shapiro msg = sm_sysexitmsg(ex);
3640266059SGregory Neil Shapiro if (msg == NULL)
3740266059SGregory Neil Shapiro {
3840266059SGregory Neil Shapiro (void) sm_snprintf(buf, sizeof buf, "Unknown exit status %d",
3940266059SGregory Neil Shapiro ex);
4040266059SGregory Neil Shapiro msg = buf;
4140266059SGregory Neil Shapiro }
4240266059SGregory Neil Shapiro return msg;
4340266059SGregory Neil Shapiro }
4440266059SGregory Neil Shapiro
4540266059SGregory Neil Shapiro /*
4640266059SGregory Neil Shapiro ** SM_SYSEXITMSG -- convert an EX_* value to a character string, or NULL
4740266059SGregory Neil Shapiro **
4840266059SGregory Neil Shapiro ** Parameters:
4940266059SGregory Neil Shapiro ** ex -- EX_* value
5040266059SGregory Neil Shapiro **
5140266059SGregory Neil Shapiro ** Results:
5240266059SGregory Neil Shapiro ** If ex is a known exit value, then a pointer to a static
5340266059SGregory Neil Shapiro ** message string is returned. Otherwise NULL is returned.
5440266059SGregory Neil Shapiro */
5540266059SGregory Neil Shapiro
5640266059SGregory Neil Shapiro char *
sm_sysexitmsg(ex)5740266059SGregory Neil Shapiro sm_sysexitmsg(ex)
5840266059SGregory Neil Shapiro int ex;
5940266059SGregory Neil Shapiro {
6040266059SGregory Neil Shapiro char *msg;
6140266059SGregory Neil Shapiro
6240266059SGregory Neil Shapiro msg = sm_sysexmsg(ex);
6340266059SGregory Neil Shapiro if (msg != NULL)
6440266059SGregory Neil Shapiro return &msg[11];
6540266059SGregory Neil Shapiro else
6640266059SGregory Neil Shapiro return msg;
6740266059SGregory Neil Shapiro }
6840266059SGregory Neil Shapiro
6940266059SGregory Neil Shapiro /*
7040266059SGregory Neil Shapiro ** SM_SYSEXMSG -- convert an EX_* value to a character string, or NULL
7140266059SGregory Neil Shapiro **
7240266059SGregory Neil Shapiro ** Parameters:
7340266059SGregory Neil Shapiro ** ex -- EX_* value
7440266059SGregory Neil Shapiro **
7540266059SGregory Neil Shapiro ** Results:
7640266059SGregory Neil Shapiro ** If ex is a known exit value, then a pointer to a static
7740266059SGregory Neil Shapiro ** string is returned. Otherwise NULL is returned.
7840266059SGregory Neil Shapiro ** The string contains the following fixed width fields:
7940266059SGregory Neil Shapiro ** [0] ':' if there is an errno value associated with this
8040266059SGregory Neil Shapiro ** exit value, otherwise ' '.
8140266059SGregory Neil Shapiro ** [1,3] 3 digit SMTP error code
8240266059SGregory Neil Shapiro ** [4] ' '
8340266059SGregory Neil Shapiro ** [5,9] 3 digit SMTP extended error code
8440266059SGregory Neil Shapiro ** [10] ' '
8540266059SGregory Neil Shapiro ** [11,] message string
8640266059SGregory Neil Shapiro */
8740266059SGregory Neil Shapiro
8840266059SGregory Neil Shapiro char *
sm_sysexmsg(ex)8940266059SGregory Neil Shapiro sm_sysexmsg(ex)
9040266059SGregory Neil Shapiro int ex;
9140266059SGregory Neil Shapiro {
9240266059SGregory Neil Shapiro switch (ex)
9340266059SGregory Neil Shapiro {
9440266059SGregory Neil Shapiro case EX_USAGE:
9540266059SGregory Neil Shapiro return " 500 5.0.0 Command line usage error";
9640266059SGregory Neil Shapiro case EX_DATAERR:
9740266059SGregory Neil Shapiro return " 501 5.6.0 Data format error";
9840266059SGregory Neil Shapiro case EX_NOINPUT:
9940266059SGregory Neil Shapiro return ":550 5.3.0 Cannot open input";
10040266059SGregory Neil Shapiro case EX_NOUSER:
10140266059SGregory Neil Shapiro return " 550 5.1.1 User unknown";
10240266059SGregory Neil Shapiro case EX_NOHOST:
10340266059SGregory Neil Shapiro return " 550 5.1.2 Host unknown";
10440266059SGregory Neil Shapiro case EX_UNAVAILABLE:
10540266059SGregory Neil Shapiro return " 554 5.0.0 Service unavailable";
10640266059SGregory Neil Shapiro case EX_SOFTWARE:
10740266059SGregory Neil Shapiro return ":554 5.3.0 Internal error";
10840266059SGregory Neil Shapiro case EX_OSERR:
10940266059SGregory Neil Shapiro return ":451 4.0.0 Operating system error";
11040266059SGregory Neil Shapiro case EX_OSFILE:
11140266059SGregory Neil Shapiro return ":554 5.3.5 System file missing";
11240266059SGregory Neil Shapiro case EX_CANTCREAT:
11340266059SGregory Neil Shapiro return ":550 5.0.0 Can't create output";
11440266059SGregory Neil Shapiro case EX_IOERR:
11540266059SGregory Neil Shapiro return ":451 4.0.0 I/O error";
11640266059SGregory Neil Shapiro case EX_TEMPFAIL:
11740266059SGregory Neil Shapiro return " 450 4.0.0 Deferred";
11840266059SGregory Neil Shapiro case EX_PROTOCOL:
11940266059SGregory Neil Shapiro return " 554 5.5.0 Remote protocol error";
12040266059SGregory Neil Shapiro case EX_NOPERM:
12140266059SGregory Neil Shapiro return ":550 5.0.0 Insufficient permission";
12240266059SGregory Neil Shapiro case EX_CONFIG:
12340266059SGregory Neil Shapiro return " 554 5.3.5 Local configuration error";
12440266059SGregory Neil Shapiro default:
12540266059SGregory Neil Shapiro return NULL;
12640266059SGregory Neil Shapiro }
12740266059SGregory Neil Shapiro }
128