1/*	$NetBSD$	*/
2
3/*++
4/* NAME
5/*	string_list 3
6/* SUMMARY
7/*	match a string against a pattern list
8/* SYNOPSIS
9/*	#include <string_list.h>
10/*
11/*	STRING_LIST *string_list_init(flags, pattern_list)
12/*	int	flags;
13/*	const char *pattern_list;
14/*
15/*	int	string_list_match(list, name)
16/*	STRING_LIST *list;
17/*	const char *name;
18/*
19/*	void string_list_free(list)
20/*	STRING_LIST *list;
21/* DESCRIPTION
22/*	This is a convenience wrapper around the match_list module.
23/*
24/*	This module implements tests for list membership of a string.
25/*
26/*	Patterns are separated by whitespace and/or commas. A pattern
27/*	is either a string, a file name (in which case the contents
28/*	of the file are substituted for the file name) or a type:name
29/*	lookup table specification.
30/*
31/*	A string matches a string list when it appears in the list of
32/*	string patterns. The matching process is case insensitive.
33/*	In order to reverse the result, precede a pattern with an
34/*	exclamation point (!).
35/*
36/*	string_list_init() performs initializations. The flags argument
37/*	is ignored; pattern_list specifies a list of string patterns.
38/*
39/*	string_list_match() matches the specified string against the
40/*	compiled pattern list.
41/*
42/*	string_list_free() releases storage allocated by string_list_init().
43/* DIAGNOSTICS
44/*	Fatal error: unable to open or read a pattern file or table.
45/* SEE ALSO
46/*	match_list(3) generic list matching
47/*	match_ops(3) match strings by name or by address
48/* LICENSE
49/* .ad
50/* .fi
51/*	The Secure Mailer license must be distributed with this software.
52/* AUTHOR(S)
53/*	Wietse Venema
54/*	IBM T.J. Watson Research
55/*	P.O. Box 704
56/*	Yorktown Heights, NY 10598, USA
57/*--*/
58
59/* System library. */
60
61#include <sys_defs.h>
62
63/* Utility library. */
64
65#include <match_list.h>
66
67/* Global library. */
68
69#include "string_list.h"
70
71#ifdef TEST
72
73#include <msg.h>
74#include <stdlib.h>
75#include <unistd.h>
76#include <vstream.h>
77#include <vstring.h>
78#include <msg_vstream.h>
79
80static void usage(char *progname)
81{
82    msg_fatal("usage: %s [-v] patterns string", progname);
83}
84
85int     main(int argc, char **argv)
86{
87    STRING_LIST *list;
88    char   *string;
89    int     ch;
90
91    msg_vstream_init(argv[0], VSTREAM_ERR);
92
93    while ((ch = GETOPT(argc, argv, "v")) > 0) {
94	switch (ch) {
95	case 'v':
96	    msg_verbose++;
97	    break;
98	default:
99	    usage(argv[0]);
100	}
101    }
102    if (argc != optind + 2)
103	usage(argv[0]);
104    list = string_list_init(MATCH_FLAG_NONE, argv[optind]);
105    string = argv[optind + 1];
106    vstream_printf("%s: %s\n", string, string_list_match(list, string) ?
107		   "YES" : "NO");
108    vstream_fflush(VSTREAM_OUT);
109    string_list_free(list);
110    return (0);
111}
112
113#endif
114