22#define WHO "qmail-pw2u"
24static void die_chdir()
26 buffer_putsflush(buffer_2,
"qmail-pw2u: fatal: unable to chdir\n");
32 buffer_putsflush(buffer_2,
"qmail-pw2u: fatal: out of memory\n");
38 buffer_putsflush(buffer_2,
"qmail-pw2u: fatal: unable to read input\n");
44 buffer_putsflush(buffer_2,
"qmail-pw2u: fatal: unable to write output\n");
50 buffer_putsflush(buffer_2,
"qmail-pw2u: fatal: unable to read controls\n");
54static void die_alias()
56 buffer_puts(buffer_2,
"qmail-pw2u: fatal: unable to find ");
58 buffer_puts(buffer_2,
" user\n");
59 buffer_flush(buffer_2);
65 buffer_puts(buffer_2,
"qmail-pw2u: fatal: unable to stat ");
66 buffer_puts(buffer_2,
fn);
67 buffer_puts(buffer_2,
"\n");
68 buffer_flush(buffer_2);
72static void die_user(
char *s,
unsigned int len)
74 buffer_puts(buffer_2,
"qmail-pw2u: fatal: unable to find ");
75 buffer_put(buffer_2,s,len);
76 buffer_puts(buffer_2,
" user for subuser\n");
77 buffer_flush(buffer_2);
104static void doaccount()
114 x =
line.s; xlen =
line.len; i = byte_chr(x,xlen,
':');
if (i == xlen)
return;
117 ++i; x += i; xlen -= i; i = byte_chr(x,xlen,
':');
if (i == xlen)
return;
118 ++i; x += i; xlen -= i; i = byte_chr(x,xlen,
':');
if (i == xlen)
return;
122 ++i; x += i; xlen -= i; i = byte_chr(x,xlen,
':');
if (i == xlen)
return;
125 ++i; x += i; xlen -= i; i = byte_chr(x,xlen,
':');
if (i == xlen)
return;
126 ++i; x += i; xlen -= i; i = byte_chr(x,xlen,
':');
if (i == xlen)
return;
132 for (i = 0; i <
user.len; ++i)
133 if ((
user.s[i] >=
'A') && (
user.s[i] <=
'Z'))
142 if (stat(
home.s,&st) == -1) {
147 if (st.st_uid !=
uid)
return;
167 if (buffer_puts(buffer_1,
"+") == -1)
die_write();
170 if (buffer_puts(buffer_1,
":\n") == -1)
die_write();
181 while (*mailnames ==
':') ++mailnames;
182 if (!*mailnames)
break;
184 i = str_chr(mailnames,
':');
186 if (buffer_puts(buffer_1,
"=") == -1)
die_write();
187 if (buffer_put(buffer_1,mailnames,i) == -1)
die_write();
189 if (buffer_puts(buffer_1,
"::\n") == -1)
die_write();
192 if (buffer_puts(buffer_1,
"+") == -1)
die_write();
193 if (buffer_put(buffer_1,mailnames,i) == -1)
die_write();
197 if (buffer_puts(buffer_1,
":\n") == -1)
die_write();
206static void dosubuser()
213 x =
line.s; xlen =
line.len; i = byte_chr(x,xlen,
':');
if (i == xlen)
return;
215 ++i; x += i; xlen -= i; i = byte_chr(x,xlen,
':');
if (i == xlen)
return;
217 if (!
uugh) die_user(x,i);
218 ++i; x += i; xlen -= i; i = byte_chr(x,xlen,
':');
if (i == xlen)
return;
220 if (buffer_puts(buffer_1,
"=") == -1)
die_write();
224 if (buffer_put(buffer_1,x,i) == -1)
die_write();
225 if (buffer_puts(buffer_1,
":\n") == -1)
die_write();
228 if (buffer_puts(buffer_1,
"+") == -1)
die_write();
233 if (buffer_put(buffer_1,x,i) == -1)
die_write();
234 if (buffer_puts(buffer_1,
"-:\n") == -1)
die_write();
242int main(
int argc,
char *
const *argv)
247 while ((opt = getoptb(argc,(
char **)argv,
"/ohHuUc:C")) != opteof)
258 default :
_exit(100);
286 fd = open_read(
"users/subusers");
304 fd = open_read(
"users/append");
317 if (buffer_puts(buffer_1,
".\n") == -1)
die_write();
318 if (buffer_flush(buffer_1) == -1)
die_write();
int constmap_init(struct constmap *cm, char *s, int len, int flagcolon)
int control_readfile(stralloc *sa, char *fn, int flagme)
int stralloc_copys(stralloc *, char const *)