Deleted Added
full compact
ypbind.c (90298) ypbind.c (95658)
1/*
2 * Copyright (c) 1992/3 Theo de Raadt <deraadt@fsa.ca>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 15 unchanged lines hidden (view full) ---

24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30#ifndef lint
31static const char rcsid[] =
1/*
2 * Copyright (c) 1992/3 Theo de Raadt <deraadt@fsa.ca>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 15 unchanged lines hidden (view full) ---

24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30#ifndef lint
31static const char rcsid[] =
32 "$FreeBSD: head/usr.sbin/ypbind/ypbind.c 90298 2002-02-06 15:26:07Z des $";
32 "$FreeBSD: head/usr.sbin/ypbind/ypbind.c 95658 2002-04-28 15:18:50Z des $";
33#endif /* not lint */
34
35#include <sys/param.h>
36#include <sys/types.h>
37#include <sys/wait.h>
38#include <sys/ioctl.h>
39#include <sys/signal.h>
40#include <sys/socket.h>

--- 114 unchanged lines hidden (view full) ---

155
156SVCXPRT *udptransp, *tcptransp;
157
158void *
159ypbindproc_null_2_yp(SVCXPRT *transp, void *argp, CLIENT *clnt)
160{
161 static char res;
162
33#endif /* not lint */
34
35#include <sys/param.h>
36#include <sys/types.h>
37#include <sys/wait.h>
38#include <sys/ioctl.h>
39#include <sys/signal.h>
40#include <sys/socket.h>

--- 114 unchanged lines hidden (view full) ---

155
156SVCXPRT *udptransp, *tcptransp;
157
158void *
159ypbindproc_null_2_yp(SVCXPRT *transp, void *argp, CLIENT *clnt)
160{
161 static char res;
162
163 bzero((char *)&res, sizeof(res));
164 return (void *)&res;
163 bzero(&res, sizeof(res));
164 return &res;
165}
166
167struct ypbind_resp *
168ypbindproc_domain_2_yp(SVCXPRT *transp, domainname *argp, CLIENT *clnt)
169{
170 static struct ypbind_resp res;
171 struct _dom_binding *ypdb;
172 char path[MAXPATHLEN];
173
165}
166
167struct ypbind_resp *
168ypbindproc_domain_2_yp(SVCXPRT *transp, domainname *argp, CLIENT *clnt)
169{
170 static struct ypbind_resp res;
171 struct _dom_binding *ypdb;
172 char path[MAXPATHLEN];
173
174 bzero((char *)&res, sizeof res);
174 bzero(&res, sizeof res);
175 res.ypbind_status = YPBIND_FAIL_VAL;
176 res.ypbind_resp_u.ypbind_error = YPBIND_ERR_NOSERV;
177
178 if (strchr(*argp, '/')) {
179 syslog(LOG_WARNING, "Domain name '%s' has embedded slash -- \
180rejecting.", *argp);
181 return(&res);
182 }

--- 16 unchanged lines hidden (view full) ---

199 return (&res);
200 }
201 ypdb = (struct _dom_binding *)malloc(sizeof *ypdb);
202 if (ypdb == NULL) {
203 syslog(LOG_WARNING, "malloc: %m");
204 res.ypbind_resp_u.ypbind_error = YPBIND_ERR_RESC;
205 return (&res);
206 }
175 res.ypbind_status = YPBIND_FAIL_VAL;
176 res.ypbind_resp_u.ypbind_error = YPBIND_ERR_NOSERV;
177
178 if (strchr(*argp, '/')) {
179 syslog(LOG_WARNING, "Domain name '%s' has embedded slash -- \
180rejecting.", *argp);
181 return(&res);
182 }

--- 16 unchanged lines hidden (view full) ---

199 return (&res);
200 }
201 ypdb = (struct _dom_binding *)malloc(sizeof *ypdb);
202 if (ypdb == NULL) {
203 syslog(LOG_WARNING, "malloc: %m");
204 res.ypbind_resp_u.ypbind_error = YPBIND_ERR_RESC;
205 return (&res);
206 }
207 bzero((char *)ypdb, sizeof *ypdb);
207 bzero(ypdb, sizeof *ypdb);
208 strncpy(ypdb->dom_domain, *argp, sizeof ypdb->dom_domain);
209 ypdb->dom_vers = YPVERS;
210 ypdb->dom_alive = 0;
211 ypdb->dom_default = 0;
212 ypdb->dom_lockfd = -1;
213 sprintf(path, "%s/%s.%ld", BINDINGDIR,
214 ypdb->dom_domain, ypdb->dom_vers);
215 unlink(path);

--- 51 unchanged lines hidden (view full) ---

267 return(NULL);
268 }
269
270 if (argp->ypsetdom_vers != YPVERS) {
271 svcerr_noprog(transp);
272 return(NULL);
273 }
274
208 strncpy(ypdb->dom_domain, *argp, sizeof ypdb->dom_domain);
209 ypdb->dom_vers = YPVERS;
210 ypdb->dom_alive = 0;
211 ypdb->dom_default = 0;
212 ypdb->dom_lockfd = -1;
213 sprintf(path, "%s/%s.%ld", BINDINGDIR,
214 ypdb->dom_domain, ypdb->dom_vers);
215 unlink(path);

--- 51 unchanged lines hidden (view full) ---

267 return(NULL);
268 }
269
270 if (argp->ypsetdom_vers != YPVERS) {
271 svcerr_noprog(transp);
272 return(NULL);
273 }
274
275 bzero((char *)&bindsin, sizeof bindsin);
275 bzero(&bindsin, sizeof bindsin);
276 bindsin.sin_family = AF_INET;
277 bindsin.sin_addr.s_addr = *(u_int32_t *)argp->ypsetdom_binding.ypbind_binding_addr;
278 bindsin.sin_port = *(u_short *)argp->ypsetdom_binding.ypbind_binding_port;
279 rpc_received(argp->ypsetdom_domain, &bindsin, 1);
280
281 return((void *) &result);
282}
283
276 bindsin.sin_family = AF_INET;
277 bindsin.sin_addr.s_addr = *(u_int32_t *)argp->ypsetdom_binding.ypbind_binding_addr;
278 bindsin.sin_port = *(u_short *)argp->ypsetdom_binding.ypbind_binding_port;
279 rpc_received(argp->ypsetdom_domain, &bindsin, 1);
280
281 return((void *) &result);
282}
283
284static void
284void
285ypbindprog_2(struct svc_req *rqstp, register SVCXPRT *transp)
286{
287 union {
288 domainname ypbindproc_domain_2_arg;
289 struct ypbind_setdom ypbindproc_setdom_2_arg;
290 } argument;
291 struct authunix_parms *creds;
292 char *result;

--- 31 unchanged lines hidden (view full) ---

324 xdr_result = xdr_void;
325 local = (char *(*)()) ypbindproc_setdom_2_yp;
326 break;
327
328 default:
329 svcerr_noproc(transp);
330 return;
331 }
285ypbindprog_2(struct svc_req *rqstp, register SVCXPRT *transp)
286{
287 union {
288 domainname ypbindproc_domain_2_arg;
289 struct ypbind_setdom ypbindproc_setdom_2_arg;
290 } argument;
291 struct authunix_parms *creds;
292 char *result;

--- 31 unchanged lines hidden (view full) ---

324 xdr_result = xdr_void;
325 local = (char *(*)()) ypbindproc_setdom_2_yp;
326 break;
327
328 default:
329 svcerr_noproc(transp);
330 return;
331 }
332 bzero((char *)&argument, sizeof(argument));
333 if (!svc_getargs(transp, xdr_argument, (caddr_t)&argument)) {
332 bzero(&argument, sizeof(argument));
333 if (!svc_getargs(transp, (xdrproc_t)xdr_argument, &argument)) {
334 svcerr_decode(transp);
335 return;
336 }
337 result = (*local)(transp, &argument, rqstp);
334 svcerr_decode(transp);
335 return;
336 }
337 result = (*local)(transp, &argument, rqstp);
338 if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
338 if (result != NULL &&
339 !svc_sendreply(transp, (xdrproc_t)xdr_result, result)) {
339 svcerr_systemerr(transp);
340 }
341 return;
342}
343
344/* Jack the reaper */
345void
346reaper(int sig)

--- 97 unchanged lines hidden (view full) ---

444 if (!svc_register(tcptransp, YPBINDPROG, YPBINDVERS, ypbindprog_2,
445 IPPROTO_TCP))
446 errx(1, "unable to register (YPBINDPROG, YPBINDVERS, tcp)");
447
448 /* build initial domain binding, make it "unsuccessful" */
449 ypbindlist = (struct _dom_binding *)malloc(sizeof *ypbindlist);
450 if (ypbindlist == NULL)
451 errx(1, "malloc");
340 svcerr_systemerr(transp);
341 }
342 return;
343}
344
345/* Jack the reaper */
346void
347reaper(int sig)

--- 97 unchanged lines hidden (view full) ---

445 if (!svc_register(tcptransp, YPBINDPROG, YPBINDVERS, ypbindprog_2,
446 IPPROTO_TCP))
447 errx(1, "unable to register (YPBINDPROG, YPBINDVERS, tcp)");
448
449 /* build initial domain binding, make it "unsuccessful" */
450 ypbindlist = (struct _dom_binding *)malloc(sizeof *ypbindlist);
451 if (ypbindlist == NULL)
452 errx(1, "malloc");
452 bzero((char *)ypbindlist, sizeof *ypbindlist);
453 bzero(ypbindlist, sizeof *ypbindlist);
453 strncpy(ypbindlist->dom_domain, domain_name, sizeof ypbindlist->dom_domain);
454 ypbindlist->dom_vers = YPVERS;
455 ypbindlist->dom_alive = 0;
456 ypbindlist->dom_lockfd = -1;
457 ypbindlist->dom_default = 1;
458 domains++;
459
460 signal(SIGCHLD, reaper);

--- 74 unchanged lines hidden (view full) ---

535 if ((a = read(READFD, &addr, sizeof(struct sockaddr_in))) < 0)
536 syslog(LOG_WARNING, "could not read from child: %m");
537
538 close(READFD);
539 FD_CLR(READFD, &fdsr);
540 FD_CLR(READFD, &svc_fdset);
541 READFD = WRITEFD = -1;
542 if (d > 0 && a > 0)
454 strncpy(ypbindlist->dom_domain, domain_name, sizeof ypbindlist->dom_domain);
455 ypbindlist->dom_vers = YPVERS;
456 ypbindlist->dom_alive = 0;
457 ypbindlist->dom_lockfd = -1;
458 ypbindlist->dom_default = 1;
459 domains++;
460
461 signal(SIGCHLD, reaper);

--- 74 unchanged lines hidden (view full) ---

536 if ((a = read(READFD, &addr, sizeof(struct sockaddr_in))) < 0)
537 syslog(LOG_WARNING, "could not read from child: %m");
538
539 close(READFD);
540 FD_CLR(READFD, &fdsr);
541 FD_CLR(READFD, &svc_fdset);
542 READFD = WRITEFD = -1;
543 if (d > 0 && a > 0)
543 rpc_received((char *)&buf, &addr, 0);
544 rpc_received(buf, &addr, 0);
544 else {
545 for (y = ypbindlist; y; y = y->dom_pnext) {
546 if (y == ypdb)
547 break;
548 prev = y;
549 }
550 switch (ypdb->dom_default) {
551 case 0:

--- 58 unchanged lines hidden (view full) ---

610 return (0);
611}
612
613bool_t broadcast_result(out, addr)
614bool_t *out;
615struct sockaddr_in *addr;
616{
617 if (retries >= MAX_RETRIES) {
545 else {
546 for (y = ypbindlist; y; y = y->dom_pnext) {
547 if (y == ypdb)
548 break;
549 prev = y;
550 }
551 switch (ypdb->dom_default) {
552 case 0:

--- 58 unchanged lines hidden (view full) ---

611 return (0);
612}
613
614bool_t broadcast_result(out, addr)
615bool_t *out;
616struct sockaddr_in *addr;
617{
618 if (retries >= MAX_RETRIES) {
618 bzero((char *)addr, sizeof(struct sockaddr_in));
619 bzero(addr, sizeof(struct sockaddr_in));
619 if (tell_parent(broad_domain->dom_domain, addr))
620 syslog(LOG_WARNING, "lost connection to parent");
621 return (TRUE);
622 }
623
624 if (yp_restricted && verify(addr->sin_addr)) {
625 retries++;
626 syslog(LOG_NOTICE, "NIS server at %s not in restricted mode access list -- rejecting.\n",inet_ntoa(addr->sin_addr));

--- 72 unchanged lines hidden (view full) ---

699 if (yp_restricted && yp_manycast) {
700 short port;
701 int i;
702 struct sockaddr_in sin;
703
704 i = __yp_ping(restricted_addrs, yp_restricted,
705 ypdb->dom_domain, &port);
706 if (i == -1) {
620 if (tell_parent(broad_domain->dom_domain, addr))
621 syslog(LOG_WARNING, "lost connection to parent");
622 return (TRUE);
623 }
624
625 if (yp_restricted && verify(addr->sin_addr)) {
626 retries++;
627 syslog(LOG_NOTICE, "NIS server at %s not in restricted mode access list -- rejecting.\n",inet_ntoa(addr->sin_addr));

--- 72 unchanged lines hidden (view full) ---

700 if (yp_restricted && yp_manycast) {
701 short port;
702 int i;
703 struct sockaddr_in sin;
704
705 i = __yp_ping(restricted_addrs, yp_restricted,
706 ypdb->dom_domain, &port);
707 if (i == -1) {
707 bzero((char *)&ypdb->dom_server_addr,
708 sizeof(struct sockaddr_in));
708 bzero(&ypdb->dom_server_addr,
709 sizeof(struct sockaddr_in));
709 if (tell_parent(ypdb->dom_domain,
710 if (tell_parent(ypdb->dom_domain,
710 &ypdb->dom_server_addr))
711 &ypdb->dom_server_addr))
711 syslog(LOG_WARNING, "lost connection to parent");
712 } else {
712 syslog(LOG_WARNING, "lost connection to parent");
713 } else {
713 bzero((char *)&sin, sizeof(struct sockaddr_in));
714 bcopy((char *)&restricted_addrs[i],
715 (char *)&sin.sin_addr, sizeof(struct in_addr));
714 bzero(&sin, sizeof(struct sockaddr_in));
715 bcopy(&restricted_addrs[i],
716 &sin.sin_addr, sizeof(struct in_addr));
716 sin.sin_family = AF_INET;
717 sin.sin_port = port;
718 if (tell_parent(broad_domain->dom_domain, &sin))
719 syslog(LOG_WARNING,
720 "lost connection to parent");
721 }
722 _exit(0);
723 }
724
725 retries = 0;
726
727 {
728 char *ptr;
729
717 sin.sin_family = AF_INET;
718 sin.sin_port = port;
719 if (tell_parent(broad_domain->dom_domain, &sin))
720 syslog(LOG_WARNING,
721 "lost connection to parent");
722 }
723 _exit(0);
724 }
725
726 retries = 0;
727
728 {
729 char *ptr;
730
730 ptr = (char *)&ypdb->dom_domain;
731 ptr = ypdb->dom_domain;
731 stat = clnt_broadcast(YPPROG, YPVERS, YPPROC_DOMAIN_NONACK,
732 stat = clnt_broadcast(YPPROG, YPVERS, YPPROC_DOMAIN_NONACK,
732 xdr_domainname, (char *)&ptr, xdr_bool, (char *)&out,
733 (xdrproc_t)xdr_domainname, &ptr,
734 (xdrproc_t)xdr_bool, &out,
733 (resultproc_t)broadcast_result);
734 }
735
736 if (stat != RPC_SUCCESS) {
735 (resultproc_t)broadcast_result);
736 }
737
738 if (stat != RPC_SUCCESS) {
737 bzero((char *)&ypdb->dom_server_addr,
738 sizeof(struct sockaddr_in));
739 bzero(&ypdb->dom_server_addr,
740 sizeof(struct sockaddr_in));
739 if (tell_parent(ypdb->dom_domain, &ypdb->dom_server_addr))
740 syslog(LOG_WARNING, "lost connection to parent");
741 }
742
743 _exit(0);
744}
745
746/*

--- 33 unchanged lines hidden (view full) ---

780 ypdb->dom_vers = -1;
781 broadcast(ypdb);
782 return(1);
783 }
784
785 {
786 char *ptr;
787
741 if (tell_parent(ypdb->dom_domain, &ypdb->dom_server_addr))
742 syslog(LOG_WARNING, "lost connection to parent");
743 }
744
745 _exit(0);
746}
747
748/*

--- 33 unchanged lines hidden (view full) ---

782 ypdb->dom_vers = -1;
783 broadcast(ypdb);
784 return(1);
785 }
786
787 {
788 char *ptr;
789
788 ptr = (char *)&ypdb->dom_domain;
790 ptr = ypdb->dom_domain;
789
791
790 if ((stat = clnt_call(client_handle, YPPROC_DOMAIN,
791 xdr_domainname, (char *)&ptr, xdr_bool, (char *)&out,
792 timeout)) != RPC_SUCCESS || out == FALSE) {
792 stat = clnt_call(client_handle, YPPROC_DOMAIN,
793 (xdrproc_t)xdr_domainname, &ptr,
794 (xdrproc_t)xdr_bool, &out, timeout);
795 if (stat != RPC_SUCCESS || out == FALSE) {
793 ypdb->dom_alive = 0;
794 ypdb->dom_vers = -1;
795 clnt_destroy(client_handle);
796 broadcast(ypdb);
797 return(1);
798 }
799 }
800

--- 71 unchanged lines hidden (view full) ---

872 if (ypdb == NULL) {
873 if (force == 0)
874 return;
875 ypdb = (struct _dom_binding *)malloc(sizeof *ypdb);
876 if (ypdb == NULL) {
877 syslog(LOG_WARNING, "malloc: %m");
878 return;
879 }
796 ypdb->dom_alive = 0;
797 ypdb->dom_vers = -1;
798 clnt_destroy(client_handle);
799 broadcast(ypdb);
800 return(1);
801 }
802 }
803

--- 71 unchanged lines hidden (view full) ---

875 if (ypdb == NULL) {
876 if (force == 0)
877 return;
878 ypdb = (struct _dom_binding *)malloc(sizeof *ypdb);
879 if (ypdb == NULL) {
880 syslog(LOG_WARNING, "malloc: %m");
881 return;
882 }
880 bzero((char *)ypdb, sizeof *ypdb);
883 bzero(ypdb, sizeof *ypdb);
881 strncpy(ypdb->dom_domain, dom, sizeof ypdb->dom_domain);
882 ypdb->dom_lockfd = -1;
883 ypdb->dom_default = 0;
884 ypdb->dom_pnext = ypbindlist;
885 ypbindlist = ypdb;
886 }
887
888 /* We've recovered from a crash: inform the world. */
889 if (ypdb->dom_vers == -1 && ypdb->dom_server_addr.sin_addr.s_addr)
890 syslog(LOG_WARNING, "NIS server [%s] for domain \"%s\" OK",
891 inet_ntoa(raddrp->sin_addr), ypdb->dom_domain);
892
884 strncpy(ypdb->dom_domain, dom, sizeof ypdb->dom_domain);
885 ypdb->dom_lockfd = -1;
886 ypdb->dom_default = 0;
887 ypdb->dom_pnext = ypbindlist;
888 ypbindlist = ypdb;
889 }
890
891 /* We've recovered from a crash: inform the world. */
892 if (ypdb->dom_vers == -1 && ypdb->dom_server_addr.sin_addr.s_addr)
893 syslog(LOG_WARNING, "NIS server [%s] for domain \"%s\" OK",
894 inet_ntoa(raddrp->sin_addr), ypdb->dom_domain);
895
893 bcopy((char *)raddrp, (char *)&ypdb->dom_server_addr,
896 bcopy(raddrp, &ypdb->dom_server_addr,
894 sizeof ypdb->dom_server_addr);
895
896 ypdb->dom_vers = YPVERS;
897 ypdb->dom_alive = 1;
898 ypdb->dom_broadcast_pid = 0;
899
900 if (ypdb->dom_lockfd != -1)
901 close(ypdb->dom_lockfd);

--- 16 unchanged lines hidden (view full) ---

918#endif
919
920 /*
921 * ok, if BINDINGDIR exists, and we can create the binding file,
922 * then write to it..
923 */
924 ypdb->dom_lockfd = fd;
925
897 sizeof ypdb->dom_server_addr);
898
899 ypdb->dom_vers = YPVERS;
900 ypdb->dom_alive = 1;
901 ypdb->dom_broadcast_pid = 0;
902
903 if (ypdb->dom_lockfd != -1)
904 close(ypdb->dom_lockfd);

--- 16 unchanged lines hidden (view full) ---

921#endif
922
923 /*
924 * ok, if BINDINGDIR exists, and we can create the binding file,
925 * then write to it..
926 */
927 ypdb->dom_lockfd = fd;
928
926 iov[0].iov_base = (caddr_t)&(udptransp->xp_port);
929 iov[0].iov_base = (char *)&(udptransp->xp_port);
927 iov[0].iov_len = sizeof udptransp->xp_port;
930 iov[0].iov_len = sizeof udptransp->xp_port;
928 iov[1].iov_base = (caddr_t)&ybr;
931 iov[1].iov_base = (char *)&ybr;
929 iov[1].iov_len = sizeof ybr;
930
931 bzero(&ybr, sizeof ybr);
932 ybr.ypbind_status = YPBIND_SUCC_VAL;
933 *(u_int32_t *)&ybr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_addr = raddrp->sin_addr.s_addr;
934 *(u_short *)&ybr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_port = raddrp->sin_port;
935
936 if (writev(ypdb->dom_lockfd, iov, 2) != iov[0].iov_len + iov[1].iov_len) {

--- 9 unchanged lines hidden (view full) ---

946 * 1 if not matched.
947 */
948int
949verify(struct in_addr addr)
950{
951 int i;
952
953 for (i = 0; i < RESTRICTED_SERVERS; i++)
932 iov[1].iov_len = sizeof ybr;
933
934 bzero(&ybr, sizeof ybr);
935 ybr.ypbind_status = YPBIND_SUCC_VAL;
936 *(u_int32_t *)&ybr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_addr = raddrp->sin_addr.s_addr;
937 *(u_short *)&ybr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_port = raddrp->sin_port;
938
939 if (writev(ypdb->dom_lockfd, iov, 2) != iov[0].iov_len + iov[1].iov_len) {

--- 9 unchanged lines hidden (view full) ---

949 * 1 if not matched.
950 */
951int
952verify(struct in_addr addr)
953{
954 int i;
955
956 for (i = 0; i < RESTRICTED_SERVERS; i++)
954 if (!bcmp((char *)&addr, (char *)&restricted_addrs[i],
955 sizeof(struct in_addr)))
957 if (!bcmp(&addr, &restricted_addrs[i], sizeof(struct in_addr)))
956 return(0);
957
958 return(1);
959}
960
961/*
962 * Try to set restricted mode. We default to normal mode if we can't
963 * resolve the specified hostnames.

--- 9 unchanged lines hidden (view full) ---

973 if ((s = strsep(&args, ",")) == NULL)
974 return;
975 domain_name = s;
976
977 /* Get the addresses of the servers. */
978 while ((s = strsep(&args, ",")) != NULL && i < RESTRICTED_SERVERS) {
979 if ((h = gethostbyname(s)) == NULL)
980 return;
958 return(0);
959
960 return(1);
961}
962
963/*
964 * Try to set restricted mode. We default to normal mode if we can't
965 * resolve the specified hostnames.

--- 9 unchanged lines hidden (view full) ---

975 if ((s = strsep(&args, ",")) == NULL)
976 return;
977 domain_name = s;
978
979 /* Get the addresses of the servers. */
980 while ((s = strsep(&args, ",")) != NULL && i < RESTRICTED_SERVERS) {
981 if ((h = gethostbyname(s)) == NULL)
982 return;
981 bcopy ((char *)h->h_addr_list[0], (char *)&restricted_addrs[i],
982 sizeof(struct in_addr));
983 i++;
983 bcopy (h->h_addr_list[0], &restricted_addrs[i],
984 sizeof(struct in_addr));
985 i++;
984 }
985
986 /* ypset and ypsetme not allowed with restricted mode */
987 ypsetmode = YPSET_NO;
988
989 yp_restricted = i;
990 return;
991}
986 }
987
988 /* ypset and ypsetme not allowed with restricted mode */
989 ypsetmode = YPSET_NO;
990
991 yp_restricted = i;
992 return;
993}