sendmail
を使いたいのですが、FreeBSD用のWIDE版Makefile
がありません。どうしたらいいですか?それは、SUNSECUREを定義しても、それを使っているところがどこにもないか らです。gethostbyaddrはIPアドレスから引いた値を無条件で返すことしかで きません。BIND-4.9.3を参考にして作成した、以下のパッチをあてることで、 SUNSECUREの定義が有効になります。なお、このパッチは非公式なものであり、 使用を推奨するものではありません。また、ネットワークの名前が取得できな くなることがあります。
<hr>
---- cut here ---- cut here ---- cut here ---- cut here ---- *** lib/libc/Makefile.orig Mon May 8 23:56:11 1995 --- lib/libc/Makefile Tue May 9 15:05:09 1995 *************** *** 8,14 **** LIB=c SHLIB_MAJOR= 2 SHLIB_MINOR= 1 ! CFLAGS+=-DLIBC_RCS -DSYSLIBC_RCS AINC= -I${.CURDIR}/${MACHINE} CLEANFILES+=tags INSTALL_PIC_ARCHIVE= yes --- 8,14 ---- LIB=c SHLIB_MAJOR= 2 SHLIB_MINOR= 1 ! CFLAGS+=-DLIBC_RCS -DSYSLIBC_RCS -DSUNSECURITY AINC= -I${.CURDIR}/${MACHINE} CLEANFILES+=tags INSTALL_PIC_ARCHIVE= yes *** lib/libc/net/gethostnamadr.c.orig Mon May 8 23:41:11 1995 --- lib/libc/net/gethostnamadr.c Tue May 9 17:24:10 1995 *************** *** 37,42 **** --- 37,46 ---- #include <ctype.h> #include <errno.h> #include <string.h> + #ifdef SUNSECURITY + #include <arpa/nameser.h> + #include <syslog.h> + #endif extern struct hostent * _gethostbyhtname __P((const char *)); extern struct hostent * _gethostbydnsname __P((const char *)); *************** *** 156,161 **** --- 160,171 ---- { struct hostent *hp = 0; int nserv = 0; + #ifdef SUNSECURITY + struct hostent *rhp = 0; + char **haddr; + char hname2[MAXDNAME+1]; + char *addr2; + #endif if (!service_done) init_services(); *************** *** 176,181 **** --- 186,213 ---- } nserv++; } + #ifdef SUNSECURITY + /* + * turn off search as the name should be absolute, + * 'localhost' should be matched by defnames + */ + strncpy(hname2, hp->h_name, MAXDNAME); + hname2[MAXDNAME] = '\0'; + if (!(rhp = gethostbyname(hname2))) { + syslog(LOG_NOTICE|LOG_AUTH, + "gethostbyaddr: No A record for %s (verifying [%s])", + hname2, inet_ntoa(*((struct in_addr *)addr))); + return (NULL); + } + for (haddr = rhp->h_addr_list; *haddr; haddr++) + if (memcmp(*haddr, + addr, INADDRSZ)== 0) + return hp; + syslog(LOG_NOTICE|LOG_AUTH, + "gethostbyaddr: A record of %s != PTR record [%s]", + hname2, inet_ntoa(*((struct in_addr *)addr))); + return (NULL); + #endif return hp; } *** lib/libresolv/Makefile.orig Tue May 9 00:48:56 1995 --- lib/libresolv/Makefile Tue May 9 00:49:19 1995 *************** *** 1,7 **** # @(#)Makefile 8.1 (Berkeley) 6/4/93 LIB=resolv ! CFLAGS+=-DDEBUG -DLIBC_SCCS .PATH: ${.CURDIR}/../libc/net --- 1,7 ---- # @(#)Makefile 8.1 (Berkeley) 6/4/93 LIB=resolv ! CFLAGS+=-DDEBUG -DLIBC_SCCS -DSUNSECURITY .PATH: ${.CURDIR}/../libc/net ---- cut here ---- cut here ---- cut here ---- cut here ----<hr>
sendmail
を使いたいのですが、FreeBSD用のWIDE版Makefile
がありません。どうしたらいいですか?