30const char *
issub(
const char *dbname,
43 unsigned long *lengths;
52 if ((ret =
opensql(dbname,&table))) {
53 if (*ret) strerr_die2x(111,FATAL,ret);
60 if (j ==
addr.len)
return 0;
61 case_lowerb(
addr.s + j + 1,
addr.len - j - 1);
63 case_lowerb(lcaddr.s + 1,j - 1);
67 for (j = 0;j <
addr.len;++j) {
68 h = (h + (h << 5)) ^ (uint32) (
unsigned char)
addr.s[j];
69 lch = (lch + (lch << 5)) ^ (uint32) (
unsigned char) lcaddr.s[j];
72 lcch = 64 + (lch % 53);
77 if (!stralloc_cats(&
fn,
"/subscribers/"))
die_nomem();
83 if (errno != error_noent)
86 substdio_fdbuf(&ss,read,
fd,ssbuf,
sizeof(ssbuf));
89 if (getln(&ss,&line,&
match,
'\0') == -1)
92 if (line.len == lcaddr.len)
93 if (!case_diffb(line.s,line.len,lcaddr.s))
94 { close(
fd);
return line.s+1; }
101 if (ch == lcch)
return 0;
104 fn.s[
fn.len - 2] = ch;
105 fd = open_read(
fn.s);
107 if (errno != error_noent)
111 substdio_fdbuf(&ss,read,
fd,ssbuf,
sizeof(ssbuf));
114 if (getln(&ss,&line,&
match,
'\0') == -1)
117 if (line.len ==
addr.len)
118 if (!case_diffb(line.s,line.len,
addr.s))
119 { close(
fd);
return line.s+1; }
134 if (j ==
addr.len)
return 0;
135 case_lowerb(
addr.s + j + 1,
addr.len - j - 1);
137 if (!stralloc_copys(&line,
"SELECT address FROM "))
die_nomem();
138 if (!stralloc_cats(&line,table))
die_nomem();
139 if (!stralloc_cats(&line,
" WHERE address = '"))
die_nomem();
141 if (!stralloc_catb(&line,
quoted.s,
143 if (!stralloc_cats(&line,
"'"))
145 if (mysql_real_query(
mysql,line.s,line.len))
146 strerr_die2x(111,FATAL,mysql_error(
mysql));
147 if (!(result = mysql_use_result(
mysql)))
148 strerr_die2x(111,FATAL,mysql_error(
mysql));
149 row = mysql_fetch_row(result);
155 if (!mysql_eof(result))
156 strerr_die2x(111,FATAL,mysql_error(
mysql));
158 if (!(lengths = mysql_fetch_lengths(result)))
159 strerr_die2x(111,FATAL,mysql_error(
mysql));
160 if (!stralloc_copyb(&line,row[0],lengths[0]))
die_nomem();
163 while ((row = mysql_fetch_row(result)));
164 mysql_free_result(result);