17 void byte(
char *pos,
unsigned int value)
22 if (pos[scan_ulong(pos,&
u)])
return;
24 if (seek_set(
fd,(seek_pos)
u) == -1)
25 logmsg(
WHO,111,FATAL,
"unable to seek: ");
29 logmsg(
WHO,111,FATAL,
"unable to write: ");
41 logmsg(
WHO,111,FATAL,
"unable to fork: ");
45 logmsg(
WHO,111,WARN,B(
"unable to run: ",*
args));
48 if (wait_pid(&wstat,
pid) !=
pid)
49 logmsg(
WHO,111,FATAL,
"waitpid surprise");
52 void u(
char *account,
char *group,
char *
home,
char *pos0,
char *pos1,
char *pos2,
char *pos3)
57 pw = getpwnam(account);
60 args[0] =
"add-account";
66 pw = getpwnam(account);
70 logmsg(
WHO,111,FATAL,B(
"unable to find uid for ",account));
73 byte(pos0,value); value >>= 8;
74 byte(pos1,value); value >>= 8;
75 byte(pos2,value); value >>= 8;
76 byte(pos3,value); value >>= 8;
78 logmsg(
WHO,111,FATAL,B(
"excessively large uid for ",account));
81 void g(
char *group,
char *pos0,
char *pos1,
char *pos2,
char *pos3)
89 args[0] =
"add-group";
97 logmsg(
WHO,111,FATAL,B(
"unable to find gid for ",group));
100 byte(pos0,value); value >>= 8;
101 byte(pos1,value); value >>= 8;
102 byte(pos2,value); value >>= 8;
103 byte(pos3,value); value >>= 8;
105 logmsg(
WHO,111,FATAL,B(
"excessively large gid for ",group));
110 if (argc < 42)
_exit(100);
112 fd = open_write(argv[1]);
113 if (
fd == -1) logmsg(
WHO,111,FATAL,
"unable to open ",argv[1],
": ");
115 g(
"qmail",argv[34],argv[35],argv[36],argv[37]);
116 g(
"nofiles",argv[38],argv[39],argv[40],argv[41]);
118 u(
"root",(
char *) 0,
"/",argv[14],argv[15],argv[16],argv[17]);
120 u(
"qmaild",
"nofiles",
"/var/qmail",argv[6],argv[7],argv[8],argv[9]);
121 u(
"qmaill",
"nofiles",
"/var/qmail",argv[10],argv[11],argv[12],argv[13]);
122 u(
"qmailp",
"nofiles",
"/var/qmail",argv[18],argv[19],argv[20],argv[21]);
123 u(
"alias",
"nofiles",
"/var/qmail/alias",argv[2],argv[3],argv[4],argv[5]);
125 u(
"qmailq",
"qmail",
"/var/qmail",argv[22],argv[23],argv[24],argv[25]);
126 u(
"qmailr",
"qmail",
"/var/qmail",argv[26],argv[27],argv[28],argv[29]);
127 u(
"qmails",
"qmail",
"/var/qmail",argv[30],argv[31],argv[32],argv[33]);
int main(int argc, char **argv)
void u(char *account, char *group, char *home, char *pos0, char *pos1, char *pos2, char *pos3)
void g(char *group, char *pos0, char *pos1, char *pos2, char *pos3)
void byte(char *pos, unsigned int value)