16#define WHO "qmail-newu"
18int rename(
const char *,
const char *);
20static void die_chdir()
22 logmsg(
WHO,110,ERROR,
"unable to chdir");
26 logmsg(
WHO,111,FATAL,
"fatal: out of memory");
28static void die_opena()
30 logmsg(
WHO,112,ERROR,
"unable to open users/assign");
32static void die_reada()
34 logmsg(
WHO,110,ERROR,
"unable to read users/assign");
36static void die_format()
38 logmsg(
WHO,112,ERROR,
"bad format in users/assign");
40static void die_opent()
42 logmsg(
WHO,112,ERROR,
"unable to open users/assign.cdb.tmp");
44static void die_writet()
46 logmsg(
WHO,112,ERROR,
"unable to write users/assign.cdb.tmp");
48static void die_rename()
50 logmsg(
WHO,112,ERROR,
"unable to move users/cdb.tmp to users/assign.cdb");
76 fd = open_read(
"users/assign");
77 if (
fd == -1) die_opena();
81 fdtemp = open_trunc(
"users/assign.cdb.tmp");
82 if (
fdtemp == -1) die_opent();
84 if (cdb_make_start(&
cdb,
fdtemp) == -1) die_writet();
90 if (
line.len && (
line.s[0] ==
'.'))
break;
91 if (!
match) die_format();
93 if (byte_chr(
line.s,
line.len,
'\0') <
line.len) die_format();
95 if (i ==
line.len) die_format();
96 if (i == 0) die_format();
98 if (
line.s[0] ==
'+') {
100 case_lowerb(
key.s,
key.len);
108 case_lowerb(
key.s,
key.len);
114 for (i = 0; i <
data.len; ++i)
115 if (
data.s[i] ==
':') {
117 if (++numcolons == 6)
break;
119 if (numcolons < 6) die_format();
127 if (cdb_make_finish(&
cdb) == -1) die_writet();
128 if (fsync(
fdtemp) == -1) die_writet();
129 if (close(
fdtemp) == -1) die_writet();
130 if (
rename(
"users/assign.cdb.tmp",
"users/assign.cdb") == -1) die_rename();
int stralloc_copys(stralloc *, char const *)
int rename(const char *, const char *)