1N/A/*
1N/A * Copyright (c) 2001 Sendmail, Inc. and its suppliers.
1N/A * All rights reserved.
1N/A *
1N/A * By using this file, you agree to the terms and conditions set
1N/A * forth in the LICENSE file which can be found at the top level of
1N/A * the sendmail distribution.
1N/A */
1N/A
1N/A#pragma ident "%Z%%M% %I% %E% SMI"
1N/A
1N/A#include <sm/gen.h>
1N/ASM_RCSID("@(#)$Id: strexit.c,v 1.3 2001/01/15 18:39:11 ca Exp $")
1N/A#include <sm/string.h>
1N/A#include <sm/sysexits.h>
1N/A
1N/A/*
1N/A** SM_STREXIT -- convert EX_* value from <sm/sysexits.h> to a character string
1N/A**
1N/A** This function is analogous to strerror(), except that it
1N/A** operates on EX_* values from <sm/sysexits.h>.
1N/A**
1N/A** Parameters:
1N/A** ex -- EX_* value
1N/A**
1N/A** Results:
1N/A** pointer to a static message string
1N/A*/
1N/A
1N/Achar *
1N/Asm_strexit(ex)
1N/A int ex;
1N/A{
1N/A char *msg;
1N/A static char buf[64];
1N/A
1N/A msg = sm_sysexitmsg(ex);
1N/A if (msg == NULL)
1N/A {
1N/A (void) sm_snprintf(buf, sizeof buf, "Unknown exit status %d",
1N/A ex);
1N/A msg = buf;
1N/A }
1N/A return msg;
1N/A}
1N/A
1N/A/*
1N/A** SM_SYSEXITMSG -- convert an EX_* value to a character string, or NULL
1N/A**
1N/A** Parameters:
1N/A** ex -- EX_* value
1N/A**
1N/A** Results:
1N/A** If ex is a known exit value, then a pointer to a static
1N/A** message string is returned. Otherwise NULL is returned.
1N/A*/
1N/A
1N/Achar *
1N/Asm_sysexitmsg(ex)
1N/A int ex;
1N/A{
1N/A char *msg;
1N/A
1N/A msg = sm_sysexmsg(ex);
1N/A if (msg != NULL)
1N/A return &msg[11];
1N/A else
1N/A return msg;
1N/A}
1N/A
1N/A/*
1N/A** SM_SYSEXMSG -- convert an EX_* value to a character string, or NULL
1N/A**
1N/A** Parameters:
1N/A** ex -- EX_* value
1N/A**
1N/A** Results:
1N/A** If ex is a known exit value, then a pointer to a static
1N/A** string is returned. Otherwise NULL is returned.
1N/A** The string contains the following fixed width fields:
1N/A** [0] ':' if there is an errno value associated with this
1N/A** exit value, otherwise ' '.
1N/A** [1,3] 3 digit SMTP error code
1N/A** [4] ' '
1N/A** [5,9] 3 digit SMTP extended error code
1N/A** [10] ' '
1N/A** [11,] message string
1N/A*/
1N/A
1N/Achar *
1N/Asm_sysexmsg(ex)
1N/A int ex;
1N/A{
1N/A switch (ex)
1N/A {
1N/A case EX_USAGE:
1N/A return " 500 5.0.0 Command line usage error";
1N/A case EX_DATAERR:
1N/A return " 501 5.6.0 Data format error";
1N/A case EX_NOINPUT:
1N/A return ":550 5.3.0 Cannot open input";
1N/A case EX_NOUSER:
1N/A return " 550 5.1.1 User unknown";
1N/A case EX_NOHOST:
1N/A return " 550 5.1.2 Host unknown";
1N/A case EX_UNAVAILABLE:
1N/A return " 554 5.0.0 Service unavailable";
1N/A case EX_SOFTWARE:
1N/A return ":554 5.3.0 Internal error";
1N/A case EX_OSERR:
1N/A return ":451 4.0.0 Operating system error";
1N/A case EX_OSFILE:
1N/A return ":554 5.3.5 System file missing";
1N/A case EX_CANTCREAT:
1N/A return ":550 5.0.0 Can't create output";
1N/A case EX_IOERR:
1N/A return ":451 4.0.0 I/O error";
1N/A case EX_TEMPFAIL:
1N/A return " 450 4.0.0 Deferred";
1N/A case EX_PROTOCOL:
1N/A return " 554 5.5.0 Remote protocol error";
1N/A case EX_NOPERM:
1N/A return ":550 5.0.0 Insufficient permission";
1N/A case EX_CONFIG:
1N/A return " 554 5.3.5 Local configuration error";
1N/A default:
1N/A return NULL;
1N/A }
1N/A}