X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=nwhod.c;h=05e73a91a23eece788753f5cd1d5696bfbcb2bef;hb=f15fc7443aaaffb32b4805b164f6035c1ab3d1f5;hp=e2747c2b7bc3cba14b77c4d696f99e54e2b5dcdc;hpb=f83db03bac37677815be96e964cc87ac0548eabf;p=nwho.git diff --git a/nwhod.c b/nwhod.c index e2747c2..05e73a9 100644 --- a/nwhod.c +++ b/nwhod.c @@ -1,10 +1,7 @@ /* * The Remote User Information Daemon * - * (c) 1997--2002 Martin Mares - * - * This software may be freely distributed and used according to the terms - * of the GNU General Public License. See file COPYING in any of the GNU packages. + * (c) 1997--2010 Martin Mares */ #include @@ -23,7 +20,6 @@ #include #include #include -#include #include #include "net.h" @@ -32,7 +28,7 @@ struct hostrec { struct hostrec *next; char name[32]; time_t last_rec; /* 0=down */ - __u32 addr; + u32 addr; }; static int sock, port; @@ -62,7 +58,7 @@ net_init(char *name) if (name) { if (! (h = gethostbyname(name))) - die("%s: %m", name); + die("Failed to resolve %s", name); } else h = NULL; @@ -72,7 +68,7 @@ net_init(char *name) die("socket: %m"); sa.sin_family = AF_INET; - sa.sin_port = port = NWHO_PORT; + sa.sin_port = port = htons(NWHO_PORT); sa.sin_addr.s_addr = INADDR_ANY; if (bind(sock, (struct sockaddr *) &sa, sizeof(sa)) < 0) die("bind: %m"); @@ -86,7 +82,7 @@ net_init(char *name) } static void -scan_utmp(struct rywho_pkt *p, time_t now) +scan_utmp(struct nwho_pkt *p, time_t now) { struct utmp *u; int cnt = 0; @@ -124,7 +120,7 @@ scan_utmp(struct rywho_pkt *p, time_t now) } static void -scan_load(struct rywho_pkt *p) +scan_load(struct nwho_pkt *p) { int n, i, j[6]; char buf[256]; @@ -153,7 +149,7 @@ scan_load(struct rywho_pkt *p) } static void -make_pkt(struct rywho_pkt *pkt) +make_pkt(struct nwho_pkt *pkt) { bzero(pkt, sizeof(pkt)); pkt->magic = htonl(NWHO_MAGIC); @@ -178,7 +174,7 @@ cleanup(void) } static void -save_pkt(char *name, struct rywho_pkt *pkt, int len) +save_pkt(char *name, struct nwho_pkt *pkt, int len) { int fd = open(name, O_WRONLY | O_CREAT, 0666); if (fd < 0) @@ -194,7 +190,7 @@ save_pkt(char *name, struct rywho_pkt *pkt, int len) } static inline int /* Validation checks not implemented yet */ -is_valid(__u32 ipa) +is_valid(u32 ipa) { return 1; } @@ -202,16 +198,16 @@ is_valid(__u32 ipa) static void receive(void) { - int r, al; - struct rywho_pkt pkt; + int r; + struct nwho_pkt pkt; struct sockaddr_in sa; - int n = sizeof(struct rywho_pkt) - MAX_USERS * sizeof(struct userinfo); + socklen_t al = sizeof(sa); + int n = sizeof(struct nwho_pkt) - MAX_USERS * sizeof(struct userinfo); struct hostrec *e; struct hostent *h; char *c; alarm(DEFAULT_PRUNE_TIME); - al = sizeof(sa); r = recvfrom(sock, &pkt, sizeof(pkt), 0, (struct sockaddr *) &sa, &al); alarm(0); now = time(NULL); @@ -283,7 +279,7 @@ receive(void) static void local_scan(void) { - struct rywho_pkt pkt; + struct nwho_pkt pkt; static char hostname[64]; make_pkt(&pkt); @@ -314,6 +310,12 @@ do_tick(void) static void daemonize(void) { + pid_t pid = fork(); + if (pid < 0) + die("Fork failed: %m"); + if (pid) + exit(0); + close(0); close(1); close(2); @@ -352,7 +354,7 @@ server(void) static void client(char *serv) { - struct rywho_pkt pkt; + struct nwho_pkt pkt; net_init(serv); utmpname(UTMP_FILE); @@ -370,24 +372,14 @@ client(char *serv) int main(int argc, char **argv) { - int pid; - - if (argc != 1 && argc != 2) - { - fprintf(stderr, "Usage: nwhod []\n"); - return 1; - } - pid = fork(); - if (pid < 0) - { - perror("fork"); - return 1; - } - if (pid) - return 0; if (argc == 2) client(argv[1]); else if (argc == 1) server(); - return 1; + else + { + fprintf(stderr, "Usage: nwhod []\n"); + return 1; + } + return 0; }