head 1.4; access; symbols pkgsrc-2013Q2:1.4.0.54 pkgsrc-2013Q2-base:1.4 pkgsrc-2012Q4:1.4.0.52 pkgsrc-2012Q4-base:1.4 pkgsrc-2011Q4:1.4.0.50 pkgsrc-2011Q4-base:1.4 pkgsrc-2011Q2:1.4.0.48 pkgsrc-2011Q2-base:1.4 pkgsrc-2009Q4:1.4.0.46 pkgsrc-2009Q4-base:1.4 pkgsrc-2008Q4:1.4.0.44 pkgsrc-2008Q4-base:1.4 pkgsrc-2008Q3:1.4.0.42 pkgsrc-2008Q3-base:1.4 cube-native-xorg:1.4.0.40 cube-native-xorg-base:1.4 pkgsrc-2008Q2:1.4.0.38 pkgsrc-2008Q2-base:1.4 pkgsrc-2008Q1:1.4.0.36 pkgsrc-2008Q1-base:1.4 pkgsrc-2007Q4:1.4.0.34 pkgsrc-2007Q4-base:1.4 pkgsrc-2007Q3:1.4.0.32 pkgsrc-2007Q3-base:1.4 pkgsrc-2007Q2:1.4.0.30 pkgsrc-2007Q2-base:1.4 pkgsrc-2007Q1:1.4.0.28 pkgsrc-2007Q1-base:1.4 pkgsrc-2006Q4:1.4.0.26 pkgsrc-2006Q4-base:1.4 pkgsrc-2006Q3:1.4.0.24 pkgsrc-2006Q3-base:1.4 pkgsrc-2006Q2:1.4.0.22 pkgsrc-2006Q2-base:1.4 pkgsrc-2006Q1:1.4.0.20 pkgsrc-2006Q1-base:1.4 pkgsrc-2005Q4:1.4.0.18 pkgsrc-2005Q4-base:1.4 pkgsrc-2005Q3:1.4.0.16 pkgsrc-2005Q3-base:1.4 pkgsrc-2005Q2:1.4.0.14 pkgsrc-2005Q2-base:1.4 pkgsrc-2005Q1:1.4.0.12 pkgsrc-2005Q1-base:1.4 pkgsrc-2004Q4:1.4.0.10 pkgsrc-2004Q4-base:1.4 pkgsrc-2004Q3:1.4.0.8 pkgsrc-2004Q3-base:1.4 pkgsrc-2004Q2:1.4.0.6 pkgsrc-2004Q2-base:1.4 pkgsrc-2004Q1:1.4.0.4 pkgsrc-2004Q1-base:1.4 pkgsrc-2003Q4:1.4.0.2 pkgsrc-2003Q4-base:1.4 buildlink2:1.3.0.2 buildlink2-base:1.4 netbsd-1-5-PATCH003:1.3 netbsd-1-5-PATCH001:1.3 netbsd-1-5-RELEASE:1.2 netbsd-1-4-PATCH003:1.2 netbsd-1-4-PATCH002:1.1.1.1 pkgsrc-base:1.1.1.1 TNF:1.1.1; locks; strict; comment @# @; 1.4 date 2002.05.31.15.37.03; author seb; state dead; branches; next 1.3; 1.3 date 2000.11.09.03.52.51; author itohy; state Exp; branches 1.3.2.1; next 1.2; 1.2 date 2000.07.26.03.40.54; author itohy; state Exp; branches; next 1.1; 1.1 date 99.12.24.03.19.23; author itohy; state Exp; branches 1.1.1.1; next ; 1.3.2.1 date 2002.06.23.18.49.50; author jlam; state dead; branches; next ; 1.1.1.1 date 99.12.24.03.19.23; author itohy; state Exp; branches; next ; desc @@ 1.4 log @Remove all package and category files from the japanese category. This effectively retire the japanese category. @ text @$NetBSD: patch-af,v 1.3 2000/11/09 03:52:51 itohy Exp $ --- skkserv/skkserv.c.orig Tue Jan 21 04:16:36 1997 +++ skkserv/skkserv.c Mon Nov 6 00:12:57 2000 @@@@ -100,14 +100,16 @@@@ #define SERVER_NOT_FOUND "4" #define SERVER_FULL "9" +#define warn(m) \ + {if (debug) fprintf(errout, "%s: %s\n", pgmnm, m);} #define err(m) \ - {if (debug) fprintf(errout, "%s: %s\n", pgmnm, m); exit(1);} + {warn(m); exit(1);} /* * Global Variables */ -char pgmver[] = "3.9.4 "; /* version number */ +char pgmver[] = "3.9.4nb1 "; /* version number */ char *pgmnm; /* program name */ char *jname; /* name of shared dictionary */ @@@@ -121,6 +123,9 @@@@ int jtab1[KANAMOJI]; /* index-table by 1st letter (1st part)*/ int jtab2[KANAMOJI]; /* index-table by 1st letter (2nd part)*/ int initsock; /* socket for waiting requests */ +#ifdef PF_INET6 +int initsock6; /* IPv6 socket for waiting requests */ +#endif int clientsock[MAXCLNT]; /* socket for each client */ int nclients; /* max index for active clients */ @@@@ -130,8 +135,18 @@@@ int parg; int setjisho = 0; int ctlterm; /* fildes for control terminal */ - void reread(); + RETSIGTYPE req_reread(); + +#ifdef SKKSERV_UID + gid_t gid = SKKSERV_GID; + /* revoke privilege if any */ + if (geteuid() == 0) { + setgroups(1, &gid); + setgid(SKKSERV_GID); + setuid(SKKSERV_UID); + } +#endif pgmnm = argv[0]; debug = 0; errout = stderr; @@@@ -200,7 +215,10 @@@@ fclose(stderr); /* detach child process from control terminal */ -#ifdef HAVE_TIOCNOTTY +#ifdef HAVE_SETSID + setsid(); +#else +#ifdef TIOCNOTTY if ((ctlterm = open("/dev/tty", 2)) >= 0) { ioctl(ctlterm, TIOCNOTTY, 0); close(ctlterm); @@@@ -215,6 +233,7 @@@@ signal(SIGHUP, SIG_IGN); if (fork() != 0) exit(0); #endif +#endif } else { /* debug mode */ fprintf(errout, "SKK-JISYO is %s\n", jname); fflush(errout); @@@@ -222,7 +241,7 @@@@ if (errout != stderr) fclose(stderr); } - signal(SIGINT, reread); + signal(SIGINT, req_reread); /* 1993/6/5 by kam, re-read dictionary by "INT" signal */ nclients = 0; @@@@ -244,8 +263,11 @@@@ mksock() { struct sockaddr_in sin; +#ifdef PF_INET6 + struct sockaddr_in6 sin6; +#endif struct servent *sp; - int optbuf = 1; /* enable socket REUSEADDR */ + int optbuf; /* enable socket REUSEADDR */ bzero((char*)&sin, sizeof(sin)); sin.sin_family = AF_INET; @@@@ -262,16 +284,54 @@@@ sin.sin_port = htons(portnum); if ((initsock = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err("socket error; socket cannot be created"); - if (setsockopt(initsock, SOL_SOCKET, SO_REUSEADDR, + warn("socket error; socket cannot be created"); +#ifdef PF_INET6 + bzero((char*)&sin6, sizeof(sin6)); + sin6.sin6_family = AF_INET6; + /* sin6.sin6_addr.s6_addr = IN6ADDR_ANY_INIT; ... all-zero pattern */ + sin6.sin6_port = htons(portnum); + if ((initsock6 = socket(PF_INET6, SOCK_STREAM, 0)) < 0) + warn("socket error; IPv6 socket cannot be created"); +#endif + optbuf = 1; + if (initsock >= 0 && setsockopt(initsock, SOL_SOCKET, SO_REUSEADDR, + &optbuf, sizeof(optbuf)) < 0) + warn("socket error; cannot set socket option"); +#ifdef PF_INET6 + optbuf = 1; + if (initsock6 >= 0 && setsockopt(initsock6, SOL_SOCKET, SO_REUSEADDR, &optbuf, sizeof(optbuf)) < 0) - err("socket error; cannot set socket option"); - if (bind(initsock, (struct sockaddr *)&sin, sizeof(sin))< 0) - err("bind error; the socket is already used"); - if (listen(initsock, MAXQUE) < 0) + warn("socket error; cannot set socket option"); +#endif + if (initsock >= 0 && bind(initsock, (struct sockaddr *)&sin, sizeof(sin))< 0) { + warn("bind error; the socket is already used"); + close(initsock); + initsock = -1; + } +#ifdef PF_INET6 + if (initsock6 >= 0 && bind(initsock6, (struct sockaddr *)&sin6, sizeof(sin6))< 0) { + warn("bind error; the socket is already used"); + close(initsock6); + initsock6 = -1; + } +#endif + if (initsock < 0 +#ifdef PF_INET6 + && initsock6 < 0 +#endif + ) + exit(1); + if (initsock >= 0 && listen(initsock, MAXQUE) < 0) err("listen error; something wrong happened with the socket"); +#ifdef PF_INET6 + if (initsock6 >= 0 && listen(initsock6, MAXQUE) < 0) + err("listen error; something wrong happened with the IPv6 socket"); +#endif if (debug) { fprintf(errout, "file descriptor for initsock is %d\n", initsock); +#ifdef PF_INET6 + fprintf(errout, "file descriptor for initsock6 is %d\n", initsock6); +#endif fflush(errout); } } @@@@ -303,8 +363,19 @@@@ mkoldjtab(buf); } +/* using stdio in signal handler is unsafe */ +#ifdef __STDC__ +volatile +#endif +int reread_requested; + +RETSIGTYPE req_reread() +{ + reread_requested = 1; +} + /* 1993/6/5 by kam, re-read dictionary by "INT" signal */ -RETSIGTYPE reread() +void reread() { if (fclose(jisho) < 0) { fprintf(stderr, @@@@ -455,15 +526,22 @@@@ main_loop() { fd_set readfds, writefds, exceptfds; - fd_set getrfds(); + void getrfds(); struct sockaddr_in from; +#ifdef PF_INET6 + struct sockaddr_in6 from6; +#endif int len; register int i; FD_ZERO(&writefds); FD_ZERO(&exceptfds); for(;;) { /* infinite loop; waiting for client's request */ - readfds = getrfds(); + if (reread_requested) { + reread(); + reread_requested = 0; + } + getrfds(&readfds); if (select(MAXDTAB, &readfds, &writefds, &exceptfds, NULL) < 0) { if (errno == EINTR) /* if signal happens */ continue; @@@@ -474,16 +552,32 @@@@ fflush(errout); } - if (FD_ISSET(initsock, &readfds)) { + if (initsock >= 0 && FD_ISSET(initsock, &readfds)) { len = sizeof(from); if ((clientsock[nclients ++] = accept(initsock, &from, &len)) < 0) { err("accept error; something wrong happened with the socket"); } - if (nclients >= MAXDTAB - 3 - debug * 2) { + if (nclients >= MAXDTAB - 3 +#ifdef PF_INET6 + -1 +#endif + - debug * 2) { write(clientsock[--nclients], SERVER_FULL, 1); close(clientsock[nclients]); } } +#ifdef PF_INET6 + if (initsock6 >= 0 && FD_ISSET(initsock6, &readfds)) { + len = sizeof(from6); + if ((clientsock[nclients ++] = accept(initsock6, &from6, &len)) < 0) { + err("accept error; something wrong happened with the socket"); + } + if (nclients >= MAXDTAB - 4 - debug * 2) { + write(clientsock[--nclients], SERVER_FULL, 1); + close(clientsock[nclients]); + } + } +#endif /* naiive scheduling */ for (i = 0; i < nclients; i ++) @@@@ -511,16 +605,20 @@@@ * get bit pattern of read file descriptor */ -fd_set getrfds() +void getrfds(rfds) +fd_set *rfds; { - fd_set rfds; register int i; - FD_ZERO(&rfds); - FD_SET(initsock, &rfds); + FD_ZERO(rfds); + if (initsock >= 0) + FD_SET(initsock, rfds); +#ifdef PF_INET6 + if (initsock6 >= 0) + FD_SET(initsock6, rfds); +#endif for (i = 0; i < nclients; i ++) - FD_SET(clientsock[i], &rfds); - return (rfds); + FD_SET(clientsock[i], rfds); } /* @@@@ -724,6 +822,9 @@@@ exit(1); } hentry = gethostbyname(hname); + if (hentry == NULL) { + fprintf(errout, "%s: WARNING: gethostbyname(%s) failed\n", pgmnm, hname); + } else { #ifdef NO_ADDR_LIST strcat(hname, ":"); strcat(hname, hentry->h_addr); @@@@ -736,6 +837,7 @@@@ strcat(hname, inet_ntoa(*(struct in_addr *)*p++)); } #endif + } strcat(hname, ": "); } @ 1.3 log @skkserv: IPv6 support. More reliable dictionary re-reading. Avoid copying fd_set. getuid() -> geteuid() Update version to 3.9.4nb1. skkdic-expr: Safer temporary file handling against symlink attack (O_EXCL). @ text @d1 1 a1 1 $NetBSD: patch-af,v 1.2 2000/07/26 03:40:54 itohy Exp $ @ 1.3.2.1 log @Merge from pkgsrc-current to buildlink2 branch. @ text @d1 1 a1 1 $NetBSD: patch-af,v 1.3 2000/11/09 03:52:51 itohy Exp $ @ 1.2 log @Print appropriate diagnosis on gethostbyname() failure, rather than dump core. The result of gethostbyname() is used only for the host string returned by "3" command, and the diagnosis is warning only. The problem is reported by Yuji Yamano in PR #10676. @ text @d1 1 a1 1 $NetBSD: patch-af,v 1.1.1.1 1999/12/24 03:19:23 itohy Exp $ d4 33 a36 2 +++ skkserv/skkserv.c Wed Jul 26 12:15:44 2000 @@@@ -132,6 +132,16 @@@@ d38 3 a40 2 void reread(); d43 1 a43 1 + d45 1 a45 1 + if (getuid() == 0) { d54 1 a54 1 @@@@ -200,7 +210,10 @@@@ d66 1 a66 1 @@@@ -215,6 +228,7 @@@@ d74 192 a265 1 @@@@ -724,6 +738,9 @@@@ d275 1 a275 1 @@@@ -736,6 +753,7 @@@@ @ 1.1 log @Initial revision @ text @d1 1 a1 1 $NetBSD$ d4 1 a4 1 +++ skkserv/skkserv.c Tue Dec 21 15:50:59 1999 d34 1 a34 2 @@@@ -214,6 +227,7 @@@@ setpgrp(); d37 1 a38 1 #endif d41 19 @ 1.1.1.1 log @Dictionary server for Simple Kana-Kanji conversion programs. This pkg is composed of: - skkserv-3.9.4 (from SKK-9.6), - SKK dictionary, and - dictionary manipulation tools. @ text @@