45const char *
issub(
const char *dbname,
const char *
userhost,
const char *tab)
58 if ((ret =
opensql(dbname,&table))) {
65 if (j ==
addr.len)
return 0;
66 case_lowerb(
addr.s + j + 1,
addr.len - j - 1);
68 case_lowerb(lcaddr.s + 1,j - 1);
72 for (j = 0;j <
addr.len;++j) {
73 h = (h + (h << 5)) ^ (uint32) (
unsigned char)
addr.s[j];
74 lch = (lch + (lch << 5)) ^ (uint32) (
unsigned char) lcaddr.s[j];
77 lcch = 64 + (lch % 53);
82 if (!stralloc_cats(&
fn,
"/subscribers/"))
die_nomem();
94 if (getln(&
bi,&line,&
match,
'\0') == -1)
97 if (line.len == lcaddr.len)
98 if (!case_diffb(line.s,line.len,lcaddr.s))
99 { close(
fd);
return line.s+1; }
106 if (ch == lcch)
return 0;
109 fn.s[
fn.len - 2] = ch;
110 fd = open_read(
fn.s);
119 if (getln(&
bi,&line,&
match,
'\0') == -1)
122 if (line.len ==
addr.len)
123 if (!case_diffb(line.s,line.len,
addr.s))
124 { close(
fd);
return line.s+1; }
140 if (j ==
addr.len)
return 0;
141 case_lowerb(
addr.s + j + 1,
addr.len - j - 1);
143 if (!stralloc_copys(&line,
"SELECT address FROM "))
die_nomem();
144 if (!stralloc_cats(&line,table))
die_nomem();
145 if (!stralloc_cats(&line,
" WHERE address ~* '^"))
die_nomem();
147 if (!stralloc_cats(&line,
"$'"))
die_nomem();
150 result = PQexec(
pgsql,line.s);
153 if (PQresultStatus(result) != PGRES_TUPLES_OK )
154 logmsg(
WHO,111,FATAL,PQresultErrorMessage(result));
158 if (PQntuples(result) < 1)
161 if (!stralloc_copyb(&line,PQgetvalue(result,0,0),PQgetlength(result,0,0)))
die_nomem();
const char * logmsg(const char *dir, unsigned long num, unsigned long listno, unsigned long subs, int done)