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