Merge from vendor branch SENDMAIL:
[dragonfly.git] / contrib / sendmail-8.13.4 / libsm / strexit.c
1 /*
2  * Copyright (c) 2001 Sendmail, Inc. and its suppliers.
3  *      All rights reserved.
4  *
5  * By using this file, you agree to the terms and conditions set
6  * forth in the LICENSE file which can be found at the top level of
7  * the sendmail distribution.
8  */
9
10 #include <sm/gen.h>
11 SM_RCSID("@(#)$Id: strexit.c,v 1.5 2001/09/11 04:04:49 gshapiro Exp $")
12 #include <sm/string.h>
13 #include <sm/sysexits.h>
14
15 /*
16 **  SM_STREXIT -- convert EX_* value from <sm/sysexits.h> to a character string
17 **
18 **      This function is analogous to strerror(), except that it
19 **      operates on EX_* values from <sm/sysexits.h>.
20 **
21 **      Parameters:
22 **              ex -- EX_* value
23 **
24 **      Results:
25 **              pointer to a static message string
26 */
27
28 char *
29 sm_strexit(ex)
30         int ex;
31 {
32         char *msg;
33         static char buf[64];
34
35         msg = sm_sysexitmsg(ex);
36         if (msg == NULL)
37         {
38                 (void) sm_snprintf(buf, sizeof buf, "Unknown exit status %d",
39                                    ex);
40                 msg = buf;
41         }
42         return msg;
43 }
44
45 /*
46 **  SM_SYSEXITMSG -- convert an EX_* value to a character string, or NULL
47 **
48 **      Parameters:
49 **              ex -- EX_* value
50 **
51 **      Results:
52 **              If ex is a known exit value, then a pointer to a static
53 **              message string is returned.  Otherwise NULL is returned.
54 */
55
56 char *
57 sm_sysexitmsg(ex)
58         int ex;
59 {
60         char *msg;
61
62         msg = sm_sysexmsg(ex);
63         if (msg != NULL)
64                 return &msg[11];
65         else
66                 return msg;
67 }
68
69 /*
70 **  SM_SYSEXMSG -- convert an EX_* value to a character string, or NULL
71 **
72 **      Parameters:
73 **              ex -- EX_* value
74 **
75 **      Results:
76 **              If ex is a known exit value, then a pointer to a static
77 **              string is returned.  Otherwise NULL is returned.
78 **              The string contains the following fixed width fields:
79 **               [0]    ':' if there is an errno value associated with this
80 **                      exit value, otherwise ' '.
81 **               [1,3]  3 digit SMTP error code
82 **               [4]    ' '
83 **               [5,9]  3 digit SMTP extended error code
84 **               [10]   ' '
85 **               [11,]  message string
86 */
87
88 char *
89 sm_sysexmsg(ex)
90         int ex;
91 {
92         switch (ex)
93         {
94           case EX_USAGE:
95                 return " 500 5.0.0 Command line usage error";
96           case EX_DATAERR:
97                 return " 501 5.6.0 Data format error";
98           case EX_NOINPUT:
99                 return ":550 5.3.0 Cannot open input";
100           case EX_NOUSER:
101                 return " 550 5.1.1 User unknown";
102           case EX_NOHOST:
103                 return " 550 5.1.2 Host unknown";
104           case EX_UNAVAILABLE:
105                 return " 554 5.0.0 Service unavailable";
106           case EX_SOFTWARE:
107                 return ":554 5.3.0 Internal error";
108           case EX_OSERR:
109                 return ":451 4.0.0 Operating system error";
110           case EX_OSFILE:
111                 return ":554 5.3.5 System file missing";
112           case EX_CANTCREAT:
113                 return ":550 5.0.0 Can't create output";
114           case EX_IOERR:
115                 return ":451 4.0.0 I/O error";
116           case EX_TEMPFAIL:
117                 return " 450 4.0.0 Deferred";
118           case EX_PROTOCOL:
119                 return " 554 5.5.0 Remote protocol error";
120           case EX_NOPERM:
121                 return ":550 5.0.0 Insufficient permission";
122           case EX_CONFIG:
123                 return " 554 5.3.5 Local configuration error";
124           default:
125                 return NULL;
126         }
127 }