-
Notifications
You must be signed in to change notification settings - Fork 0
/
ezmlm-issubn.c
62 lines (55 loc) · 1.28 KB
/
ezmlm-issubn.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <unistd.h>
#include "strerr.h"
#include "env.h"
#include "sender.h"
#include "subdb.h"
#include "getconfopt.h"
#include "messages.h"
#include "die.h"
#include "idx.h"
#include "config.h"
#include "auto_version.h"
const char FATAL[] = "ezmlm-issubn: fatal: ";
const char USAGE[] =
"ezmlm-issubn: usage: ezmlm-issubn [-nN] dir [subdir ...]";
static int flagsub = 0;
static struct option options[] = {
OPT_FLAG(flagsub,'n',99,0),
OPT_FLAG(flagsub,'N',0,0),
OPT_END
};
void main(int argc,char **argv)
{
const char *subdir;
const char *addr;
int opt;
int senderissub;
int i;
addr = get_sender();
if (!addr) die_sender(); /* REQUIRE sender */
opt = getconfopt(argc,argv,options,1,0);
initsub(0);
if (opt >= argc)
senderissub = !!issub(0,addr,0);
else {
/* If all the options are absolute, scan each one; else treat the
* first option as the base directory and the rest as database
* names. */
for (i = --opt; i < argc; ++i) {
if (argv[i][0] != '/') {
++opt;
break;
}
}
senderissub = 0;
while ((subdir = argv[opt++]) != 0) {
if (issub(subdir,addr,0)) {
senderissub = 1;
break;
}
}
}
closesub();
_exit(senderissub ? flagsub /* is a subscriber */
: flagsub ? 0 : 99); /* not subscriber anywhere */
}