Mercurial > notdcc
diff dcclib/str2type.c @ 0:c7f6b056b673
First import of vendor version
author | Peter Gervai <grin@grin.hu> |
---|---|
date | Tue, 10 Mar 2009 13:49:58 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dcclib/str2type.c Tue Mar 10 13:49:58 2009 +0100 @@ -0,0 +1,184 @@ +/* Distributed Checksum Clearinghouse + * + * Copyright (c) 2008 by Rhyolite Software, LLC + * + * This agreement is not applicable to any entity which sells anti-spam + * solutions to others or provides an anti-spam solution as part of a + * security solution sold to other entities, or to a private network + * which employs the DCC or uses data provided by operation of the DCC + * but does not provide corresponding data to other users. + * + * Permission to use, copy, modify, and distribute this software without + * changes for any purpose with or without fee is hereby granted, provided + * that the above copyright notice and this permission notice appear in all + * copies and any distributed versions or copies are either unchanged + * or not called anything similar to "DCC" or "Distributed Checksum + * Clearinghouse". + * + * Parties not eligible to receive a license under this agreement can + * obtain a commercial license to use DCC by contacting Rhyolite Software + * at sales@rhyolite.com. + * + * A commercial license would be for Distributed Checksum and Reputation + * Clearinghouse software. That software includes additional features. This + * free license for Distributed ChecksumClearinghouse Software does not in any + * way grant permision to use Distributed Checksum and Reputation Clearinghouse + * software + * + * THE SOFTWARE IS PROVIDED "AS IS" AND RHYOLITE SOFTWARE, LLC DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL RHYOLITE SOFTWARE, LLC + * BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES + * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + * + * Rhyolite Software DCC 1.3.103-1.27 $Revision$ + */ + +#include "dcc_defs.h" +#include "dcc_xhdr.h" +#include <ctype.h> + + +static struct tbl { + char nm[DCC_XHDR_MAX_TYPE_LEN]; + DCC_CK_TYPES type; +} tbl[] = { + {DCC_XHDR_TYPE_IP, DCC_CK_IP}, + {DCC_XHDR_TYPE_ENV_FROM, DCC_CK_ENV_FROM}, + {DCC_XHDR_TYPE_FROM, DCC_CK_FROM}, + {DCC_XHDR_TYPE_SUB, DCC_CK_SUB}, + {DCC_XHDR_TYPE_MESSAGE_ID, DCC_CK_MESSAGE_ID}, + {DCC_XHDR_TYPE_RECEIVED, DCC_CK_RECEIVED}, + {DCC_XHDR_TYPE_BODY, DCC_CK_BODY}, + {DCC_XHDR_TYPE_FUZ1, DCC_CK_FUZ1}, + {DCC_XHDR_TYPE_FUZ2, DCC_CK_FUZ2}, + {DCC_XHDR_TYPE_GREY_MSG, DCC_CK_G_MSG_R_TOTAL}, + {DCC_XHDR_TYPE_GREY_TRIPLE, DCC_CK_G_TRIPLE_R_BULK}, + {DCC_XHDR_TYPE_REP_TOTAL, DCC_CK_G_MSG_R_TOTAL}, + {DCC_XHDR_TYPE_REP_BULK, DCC_CK_G_TRIPLE_R_BULK}, + {DCC_XHDR_TYPE_ENV_TO, DCC_CK_ENV_TO}, /* same as DCC_CK_FLOD_PATH */ + {DCC_XHDR_TYPE_FLOD_PATH, DCC_CK_FLOD_PATH}, /* same as DCC_CK_ENV_TO */ + {DCC_XHDR_TYPE_SRVR_ID, DCC_CK_SRVR_ID}, + + {"ALL", SET_ALL_THOLDS}, + {"CMN", SET_CMN_THOLDS}, +}; + + + +static DCC_CK_TYPES +dcc_str2type_base(const char *str, + int len0) /* length or -1 */ +{ + struct tbl *tp; + const char *tgtp, *nmp; + char tgtc, nmc, d; + int len, i; + + /* ignore leading blanks */ + i = strspn(str, DCC_WHITESPACE); + str += i; + if (len0 >= 0) { + len0 -= i; + if (len0 <= 0) + return DCC_CK_INVALID; + } + + for (tp = tbl; tp <= LAST(tbl); ++tp) { + nmp = tp->nm; + tgtp = str; + len = len0; + do { + if (len >= 0 && --len < 0) + tgtc = '\0'; + else + tgtc = *tgtp++; + nmc = *nmp++; + if (nmc == '\0') { + /* ignore trailing blanks and colons */ + while (tgtc == ':' || tgtc == ' ' + || tgtc == '\t' || tgtc == '\n') { + if (len >= 0 && --len < 0) + tgtc = '\0'; + else + tgtc = *tgtp++; + } + if (tgtc == '\0') + return tp->type; + break; + } + d = (nmc ^ tgtc); + } while (d == 0 || d == ('A' ^ 'a') + || ((nmc == '-' || nmc == '.' || nmc == '_') + && (tgtc == '-' || tgtc == '.' || tgtc == '_'))); + } + + return DCC_CK_INVALID; +} + + + +/* for whiteclnt files and dccsight */ +DCC_CK_TYPES +dcc_str2type_wf(const char *str, + int len0) /* length or -1 */ +{ + DCC_CK_TYPES type; + + type = dcc_str2type_base(str, len0); + if (!DCC_CK_THOLD_OK(type) + && type != DCC_CK_ENV_TO) + return DCC_CK_INVALID; + return type; +} + + + +/* types that can be deleted in database */ +DCC_CK_TYPES +dcc_str2type_del(const char *str, + int len0) /* length or -1 */ +{ + DCC_CK_TYPES type; + + type = dcc_str2type_base(str, len0); + if (!DCC_CK_THOLD_OK(type) + && type != DCC_CK_SRVR_ID) + return DCC_CK_INVALID; + return type; +} + + + +/* for `dbclean -t type,...` `dccd -K type` `dccproc -g type` */ +DCC_CK_TYPES +dcc_str2type_db(const char *str, + int len0) /* length or -1 */ +{ + DCC_CK_TYPES type; + + type = dcc_str2type_base(str, len0); + if (!DCC_CK_THOLD_OK(type)) + return DCC_CK_INVALID; + return type; +} + + + +/* for `dbclean -t type,...` and dccm, dccifd, and dccproc thresholds */ +DCC_CK_TYPES +dcc_str2type_thold(const char *str, + int len0) /* length or -1 */ +{ + DCC_CK_TYPES type; + + type = dcc_str2type_base(str, len0); + if (!DCC_CK_THOLD_OK(type) + && type != SET_ALL_THOLDS + && type != SET_CMN_THOLDS) + return DCC_CK_INVALID; + return type; +}