00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "spf_sys_config.h"
00018
00019 #ifdef STDC_HEADERS
00020 # include <stdlib.h>
00021 # include <ctype.h>
00022 #endif
00023
00024 #ifdef HAVE_MEMORY_H
00025 #include <memory.h>
00026 #endif
00027
00028
00029
00030 #include "spf.h"
00031 #include "spf_internal.h"
00032
00033
00037 void
00038 SPF_get_lib_version(int *major, int *minor, int *patch)
00039 {
00040 *major = SPF_LIB_VERSION_MAJOR;
00041 *minor = SPF_LIB_VERSION_MINOR;
00042 *patch = SPF_LIB_VERSION_PATCH;
00043 }
00044
00045
00046
00053 char *
00054 SPF_sanitize(SPF_server_t *spf_server, char *str)
00055 {
00056 char *p;
00057
00058 SPF_ASSERT_NOTNULL(spf_server);
00059
00060 if (! spf_server->sanitize)
00061 return str;
00062
00063 if (str == NULL)
00064 return str;
00065
00066 for (p = str; *p != '\0'; p++)
00067 if (! isprint( (unsigned char)*p ))
00068 *p = '?';
00069
00070 return str;
00071 }
00072
00073
00074
00075
00076
00080 const char *
00081 SPF_strresult(SPF_result_t result)
00082 {
00083 switch (result) {
00084 case SPF_RESULT_INVALID:
00085 return "(invalid)";
00086 break;
00087
00088 case SPF_RESULT_PASS:
00089 return "pass";
00090 break;
00091
00092 case SPF_RESULT_FAIL:
00093 return "fail";
00094 break;
00095
00096 case SPF_RESULT_SOFTFAIL:
00097 return "softfail";
00098 break;
00099
00100 case SPF_RESULT_NEUTRAL:
00101 return "neutral";
00102 break;
00103
00104 case SPF_RESULT_PERMERROR:
00105 return "permerror";
00106 break;
00107
00108 case SPF_RESULT_TEMPERROR:
00109 return "temperror";
00110 break;
00111
00112 case SPF_RESULT_NONE:
00113 return "none";
00114 break;
00115
00116 default:
00117 return "(error: unknown result)";
00118 break;
00119 }
00120 }
00121
00122
00123
00127 const char *
00128 SPF_strreason(SPF_reason_t reason)
00129 {
00130 switch (reason) {
00131 case SPF_REASON_NONE:
00132 return "none";
00133 break;
00134
00135 case SPF_REASON_LOCALHOST:
00136 return "localhost";
00137 break;
00138
00139 case SPF_REASON_LOCAL_POLICY:
00140 return "local policy";
00141 break;
00142
00143 case SPF_REASON_MECH:
00144 return "mechanism";
00145 break;
00146
00147 case SPF_REASON_DEFAULT:
00148 return "default";
00149 break;
00150
00151 case SPF_REASON_2MX:
00152 return "secondary MX";
00153 break;
00154
00155 default:
00156 return "(invalid reason)";
00157 break;
00158
00159 }
00160 }
00161
00162 const char *
00163 SPF_strrrtype(ns_type rr_type)
00164 {
00165 switch (rr_type) {
00166 case ns_t_a: return "A";
00167 case ns_t_aaaa: return "AAAA";
00168 case ns_t_any: return "ANY";
00169 case ns_t_invalid: return "BAD";
00170 case ns_t_mx: return "MX";
00171 case ns_t_ptr: return "PTR";
00172 case ns_t_spf: return "SPF";
00173 case ns_t_txt: return "TXT";
00174 default: return "??";
00175 }
00176 }
00177
00182 SPF_errcode_t
00183 SPF_realloc(char **bufp, size_t *buflenp, int buflen)
00184 {
00185 char *buf;
00186
00187 if (*buflenp < buflen) {
00188 if (buflen < 64)
00189 buflen = 64;
00190 buf = realloc(*bufp, buflen);
00191 if (buf == NULL)
00192 return SPF_E_NO_MEMORY;
00193
00194 *bufp = buf;
00195 *buflenp = buflen;
00196 }
00197 else {
00198 SPF_ASSERT_NOTNULL(*bufp);
00199 }
00200
00201 memset(*bufp, '\0', *buflenp);
00202 return SPF_E_SUCCESS;
00203 }