djbdnscurve6  38
djbdnscurve6
axfrdns-conf.c
Go to the documentation of this file.
1 #include <unistd.h>
2 #include <pwd.h>
3 #include "logmsg.h"
4 #include "exit.h"
5 #include "auto_home.h"
6 #include "generic-conf.h"
7 
8 #define WHO "axfrdns-conf"
9 
10 void usage(void)
11 {
12  logmsg(WHO,100,USAGE,"axfrdns-conf acct logacct /axfrdns /tinydns myip");
13 }
14 
15 char *dir;
16 char *user;
17 char *loguser;
18 struct passwd *pw;
19 char *myip;
20 char *tinydns;
21 
22 int main(int argc,char **argv)
23 {
24  user = argv[1];
25  if (!user) usage();
26  loguser = argv[2];
27  if (!loguser) usage();
28  dir = argv[3];
29  if (!dir) usage();
30  if (dir[0] != '/') usage();
31  tinydns = argv[4];
32  if (!tinydns) usage();
33  if (tinydns[0] != '/') usage();
34  myip = argv[5];
35  if (!myip) usage();
36 
37  pw = getpwnam(loguser);
38  if (!pw)
39  logmsg(WHO,111,FATAL,B("unknown account: ",loguser));
40 
41  init(dir,WHO);
42  makelog(loguser,pw->pw_uid,pw->pw_gid);
43 
44  makedir("env");
45  perm(02755);
46  start("env/ROOT"); outs(tinydns); outs("/root\n"); finish();
47  perm(0644);
48  start("env/IP"); outs(myip); outs("\n"); finish();
49  perm(0644);
50 
51  start("run");
52  outs("#!/bin/sh\nexec 2>&1\nexec envdir ./env sh -c '\n exec envuidgid "); outs(user);
53  outs(" softlimit -d300000 tcpserver -vDRHl0 -x tcp.cdb -- \"$IP\" 53 ");
54  outs(auto_home); outs("/bin/axfrdns\n'\n");
55  finish();
56  perm(0755);
57 
58  start("Makefile");
59  outs("tcp.cdb: tcp\n");
60  outs("\ttcprules tcp.cdb tcp.tmp < tcp\n");
61  finish();
62  perm(0644);
63 
64  start("tcp");
65  outs("# sample line: 1.2.3.4:allow,AXFR=\"heaven.af.mil/3.2.1.in-addr.arpa\"\n");
66  outs(":deny\n");
67  finish();
68  perm(0644);
69 
70  _exit(0);
71 }
const char auto_home[]
char * user
Definition: axfrdns-conf.c:16
char * tinydns
Definition: axfrdns-conf.c:20
char * myip
Definition: axfrdns-conf.c:19
int main(int argc, char **argv)
Definition: axfrdns-conf.c:22
char * dir
Definition: axfrdns-conf.c:15
struct passwd * pw
Definition: axfrdns-conf.c:18
#define WHO
Definition: axfrdns-conf.c:8
void usage(void)
Definition: axfrdns-conf.c:10
char * loguser
Definition: axfrdns-conf.c:17
void outs(const char *s)
Definition: generic-conf.c:49
void init(const char *d, const char *f)
Definition: generic-conf.c:17
void start(const char *s)
Definition: generic-conf.c:41
void makedir(const char *s)
Definition: generic-conf.c:35
void perm(int mode)
Definition: generic-conf.c:71
void finish(void)
Definition: generic-conf.c:64
void makelog(const char *user, int uid, int gid)
Definition: generic-conf.c:81