17 #include "auto_home.h"
18 #include "generic-conf.h"
20 #define FATAL "dnscache-conf: fatal: "
24 strerr_die1x(100,"dnscache-conf: usage: dnscache-conf acct logacct /dnscache [ myip ]");
28 char rootserversbuf
[64];
40 void seed_adduint32(uint32 u
)
45 if (++seedpos
== 32) {
46 for (i
= 0;i
< 32;++i
) {
47 u
= ((u
^ seed
[i
]) + 0x9e3779b9) ^ (u
<< 7) ^ (u
>> 25);
54 void seed_addtime(void)
57 char tpack
[TAIA_PACK
];
62 for (i
= 0;i
< TAIA_PACK
;++i
)
63 seed_adduint32(tpack
[i
]);
66 int main(int argc
,char **argv
)
69 seed_adduint32(getpid());
70 seed_adduint32(getppid());
71 seed_adduint32(getuid());
72 seed_adduint32(getgid());
77 if (!loguser
) usage();
80 if (dir
[0] != '/') usage();
82 if (!myip
) myip
= "127.0.0.1";
84 pw
= getpwnam(loguser
);
87 strerr_die3x(111,FATAL
,"unknown account ",loguser
);
89 if (chdir(auto_home
) == -1)
90 strerr_die4sys(111,FATAL
,"unable to switch to ",auto_home
,": ");
92 fdrootservers
= open_read("/etc/dnsroots.local");
93 if (fdrootservers
== -1) {
94 if (errno
!= error_noent
)
95 strerr_die2sys(111,FATAL
,"unable to open /etc/dnsroots.local: ");
96 fdrootservers
= open_read("/etc/dnsroots.global");
97 if (fdrootservers
== -1)
98 strerr_die2sys(111,FATAL
,"unable to open /etc/dnsroots.global: ");
103 seed_addtime(); makedir("log");
104 seed_addtime(); perm(02755);
105 seed_addtime(); makedir("log/main");
106 seed_addtime(); owner(pw
->pw_uid
,pw
->pw_gid
);
107 seed_addtime(); perm(02755);
108 seed_addtime(); start("log/status"); finish();
109 seed_addtime(); owner(pw
->pw_uid
,pw
->pw_gid
);
110 seed_addtime(); perm(0644);
111 seed_addtime(); makedir("env");
112 seed_addtime(); perm(02755);
113 seed_addtime(); start("env/ROOT"); outs(dir
); outs("/root\n"); finish();
114 seed_addtime(); perm(0644);
115 seed_addtime(); start("env/IP"); outs(myip
); outs("\n"); finish();
116 seed_addtime(); perm(0644);
117 seed_addtime(); start("env/IPSEND"); outs("0.0.0.0\n"); finish();
118 seed_addtime(); perm(0644);
119 seed_addtime(); start("env/CACHESIZE"); outs("1000000\n"); finish();
120 seed_addtime(); perm(0644);
121 seed_addtime(); start("env/DATALIMIT"); outs("3000000\n"); finish();
122 seed_addtime(); perm(0644);
123 seed_addtime(); start("run");
124 outs("#!/bin/sh\nexec 2>&1\nexec <seed\nexec envdir ./env sh -c '\n exec envuidgid "); outs(user
);
125 outs(" softlimit -o250 -d \"$DATALIMIT\" ");
126 outs(auto_home
); outs("/bin/dnscache\n'\n"); finish();
127 seed_addtime(); perm(0755);
128 seed_addtime(); start("log/run");
129 outs("#!/bin/sh\nexec setuidgid "); outs(loguser
);
130 outs(" multilog t ./main\n"); finish();
131 seed_addtime(); perm(0755);
132 seed_addtime(); makedir("root");
133 seed_addtime(); perm(02755);
134 seed_addtime(); makedir("root/ip");
135 seed_addtime(); perm(02755);
136 seed_addtime(); start("root/ip/127.0.0.1"); finish();
137 seed_addtime(); perm(0600);
138 seed_addtime(); makedir("root/servers");
139 seed_addtime(); perm(02755);
140 seed_addtime(); start("root/servers/@");
141 buffer_init(&ssrootservers
,buffer_unixread
,fdrootservers
,rootserversbuf
,sizeof rootserversbuf
);
142 copyfrom(&ssrootservers
);
144 seed_addtime(); perm(0644);
147 start("seed"); out((char *) seed
,128); finish();
155 start("root/etc/netconfig");
156 outs("tcp tpi_cots_ord v inet tcp /dev/tcp -\n");
157 outs("udp tpi_clts v inet udp /dev/udp -\n");
161 if (mknod("root/dev/tcp",S_IFCHR
| 0667,makedev(11,42)) == -1)
162 strerr_die4sys(111,FATAL
,"unable to create device ",dir
,"/root/dev/tcp: ");
163 if (mknod("root/dev/udp",S_IFCHR
| 0667,makedev(11,41)) == -1)
164 strerr_die4sys(111,FATAL
,"unable to create device ",dir
,"/root/dev/udp: ");