+/*$Id: ezmlm-sub.c,v 1.18 1999/08/02 02:57:57 lindberg Exp $*/
+/*$Name: ezmlm-idx-040 $*/
#include "strerr.h"
#include "subscribe.h"
-#include "log.h"
+#include "sgetopt.h"
+#include "stralloc.h"
+#include "substdio.h"
+#include "readwrite.h"
+#include "getln.h"
+#include "errtxt.h"
+#include "scan.h"
+#include "idx.h"
#define FATAL "ezmlm-sub: fatal: "
-#define WARNING "ezmlm-sub: warning: "
+
+void *psql = (void *) 0;
+
+char inbuf[512];
+substdio ssin = SUBSTDIO_FDBUF(read,0,inbuf,sizeof(inbuf));
+
+stralloc line = {0};
+
+void die_usage() {
+ strerr_die1x(100,
+ "ezmlm-sub: usage: ezmlm-sub [-mMvV] [-h hash] [-n] dir "
+ "[box@domain [name]] ...");
+}
+
+int flagname = 0;
void main(argc,argv)
int argc;
{
char *dir;
char *addr;
+ char *comment;
+ char *cp;
+ char ch;
+ int opt;
+ int match;
+ int flagmysql = 1; /* use mysql if supported */
+ int forcehash = -1;
+ unsigned int u;
+
+ (void) umask(022);
+ while ((opt = getopt(argc,argv,"h:HmMnNvV")) != opteof)
+ switch(opt) {
+ case 'h': (void) scan_ulong(optarg,&u); forcehash = 0; break;
+ case 'H': forcehash = -1; break;
+ case 'm': flagmysql = 1; break;
+ case 'M': flagmysql = 0; break;
+ case 'n': flagname = 1; break;
+ case 'N': flagname = 0; break;
+ case 'v':
+ case 'V': strerr_die2x(0,
+ "ezmlm-sub version: ezmlm-0.53+",EZIDX_VERSION);
+ default:
+ die_usage();
+ }
+
+ dir = argv[optind++];
+ if (!dir) die_usage();
+
+ if (dir[0] != '/')
+ strerr_die2x(100,FATAL,ERR_SLASH);
- dir = argv[1];
- if (!dir)
- strerr_die1x(100,"ezmlm-sub: usage: ezmlm-sub dir box@domain ...");
if (chdir(dir) == -1)
- strerr_die4sys(111,FATAL,"unable to switch to ",dir,": ");
-
- argv += 2;
- while (addr = *argv++)
- switch(subscribe(addr,1)) {
- case -1:
- strerr_die1(111,FATAL,&subscribe_err);
- case -2:
- strerr_warn4(WARNING,"cannot subscribe ",addr,": ",&subscribe_err);
- break;
- case 1:
- log("+manual",addr);
+ strerr_die4sys(111,FATAL,ERR_SWITCH,dir,": ");
+
+ if (forcehash == 0) forcehash = (int) u;
+
+ if (argv[optind]) {
+ if (flagname) {
+ /* allow repeats and last addr doesn't need comment */
+ while ((addr = argv[optind++])) {
+ (void) subscribe(dir,addr,1,argv[optind],"+manual",
+ flagmysql,forcehash,(char *) 0,FATAL);
+ if (!argv[optind++]) break;
+ }
+ } else {
+
+ while ((addr = argv[optind++]))
+ (void) subscribe(dir,addr,1,"","+manual",flagmysql,
+ forcehash,(char *) 0,FATAL);
+ }
+ } else { /* stdin */
+ for (;;) {
+ if (getln(&ssin,&line,&match,'\n') == -1)
+ strerr_die2sys(111,FATAL,ERR_READ_INPUT);
+ if (!match) break;
+ if (line.len == 1 || *line.s == '#') continue;
+ line.s[line.len - 1] = '\0';
+ comment = (char *) 0;
+ if (flagname) {
+ cp = line.s;
+ while ((ch = *cp)) {
+ if (ch == '\\') {
+ if (!*(++cp)) break;
+ } else if (ch == ' ' || ch == '\t' || ch == ',') break;
+ cp++;
+ }
+ if (ch) {
+ *cp = '\0';
+ comment = cp + 1;
+ }
+ }
+ (void) subscribe(dir,line.s,1,comment,"+manual",flagmysql,
+ forcehash,(char *) 0,FATAL);
}
+ }
+ closesql();
_exit(0);
}