]> git.saurik.com Git - apple/network_cmds.git/blame - ypset.tproj/ypset.c
network_cmds-245.tar.gz
[apple/network_cmds.git] / ypset.tproj / ypset.c
CommitLineData
b7080c8e
A
1/*
2 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
2b484d24
A
6 * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7 * Reserved. This file contains Original Code and/or Modifications of
8 * Original Code as defined in and that are subject to the Apple Public
9 * Source License Version 1.0 (the 'License'). You may not use this file
10 * except in compliance with the License. Please obtain a copy of the
11 * License at http://www.apple.com/publicsource and read it before using
12 * this file.
b7080c8e
A
13 *
14 * The Original Code and all software distributed under the License are
15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
2b484d24
A
18 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19 * License for the specific language governing rights and limitations
20 * under the License."
b7080c8e
A
21 *
22 * @APPLE_LICENSE_HEADER_END@
23 */
24/*
25 * Copyright (c) 1992, 1993 Theo de Raadt <deraadt@fsa.ca>
26 * All rights reserved.
27 *
28 * Redistribution and use in source and binary forms, with or without
29 * modification, are permitted provided that the following conditions
30 * are met:
31 * 1. Redistributions of source code must retain the above copyright
32 * notice, this list of conditions and the following disclaimer.
33 * 2. Redistributions in binary form must reproduce the above copyright
34 * notice, this list of conditions and the following disclaimer in the
35 * documentation and/or other materials provided with the distribution.
36 * 3. All advertising materials mentioning features or use of this software
37 * must display the following acknowledgement:
38 * This product includes software developed by Theo de Raadt.
39 * 4. The name of the author may not be used to endorse or promote
40 * products derived from this software without specific prior written
41 * permission.
42 *
43 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
44 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
45 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
47 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
49 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
51 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
52 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53 * SUCH DAMAGE.
54 */
55
56#ifndef LINT
57static char rcsid[] = "ypset.c,v 1.3 1993/06/12 00:02:37 deraadt Exp";
58#endif
59
60#include <sys/param.h>
61#include <sys/types.h>
62#include <sys/socket.h>
63#include <stdio.h>
64#include <stdlib.h>
65#include <string.h>
66#include <netdb.h>
67#include <rpc/rpc.h>
68#include <rpc/xdr.h>
69#include <rpcsvc/yp.h>
70//#include <rpcsvc/yp_prot.h>
71//#include <rpcsvc/ypclnt.h>
72#include <arpa/inet.h>
73
74extern bool_t xdr_domainname();
75
76void
77usage()
78{
79 fprintf(stderr, "Usage:\n");
80 fprintf(stderr, "\typset [-h host ] [-d domain] server\n");
81 exit(1);
82}
83
84int
85bind_tohost(sin, dom, server)
86struct sockaddr_in *sin;
87char *dom, *server;
88{
89 ypbind_setdom ypsd;
90 struct timeval tv;
91 struct hostent *hp;
92 CLIENT *client;
93 int sock;
94 u_short port;
95 int r;
96 unsigned long server_addr;
97
98 if( (port=htons(getrpcport(server, YPPROG, YPPROC_NULL, IPPROTO_UDP))) == 0) {
99 fprintf(stderr, "%s not running ypserv.\n", server);
100 exit(1);
101 }
102
103 tv.tv_sec = 15;
104 tv.tv_usec = 0;
105 sock = RPC_ANYSOCK;
106 client = clntudp_create(sin, YPBINDPROG, YPBINDVERS, tv, &sock);
107 if (client==NULL) {
108 fprintf(stderr, "RPC error: can't create YPBIND client\n");
109 return YP_YPERR;
110 }
111 client->cl_auth = authunix_create_default();
112
113 bzero(&ypsd, sizeof(struct ypbind_setdom));
114
115
116 if( (hp = gethostbyname (server)) != NULL ) {
117 /* is this the most compatible way?? */
118 bcopy(hp->h_addr_list[0], &ypsd.ypsetdom_binding.ypbind_binding_addr, 4);
119 } else if( (long)(server_addr = inet_addr (server)) == -1) {
120 fprintf(stderr, "can't find address for %s\n", server);
121 exit(1);
122 } else
123 bcopy (&server_addr, &ypsd.ypsetdom_binding.ypbind_binding_addr, 4);
124
125 ypsd.ypsetdom_domain = dom;
126
127 bcopy(&port, ypsd.ypsetdom_binding.ypbind_binding_port, 2);
128 ypsd.ypsetdom_vers = YPVERS;
129
130 r = clnt_call(client, YPBINDPROC_SETDOM,
131 xdr_ypbind_setdom, &ypsd, xdr_void, NULL, tv);
132 if (r != RPC_SUCCESS)
133 {
134 fprintf(stderr, "Can't ypset for domain %s: %s \n",
135 dom, clnt_sperror(client, "setdomain"));
136 clnt_destroy(client);
137 return YP_YPERR;
138 }
139 clnt_destroy(client);
140 return 0;
141}
142
143int
144main(argc, argv)
145char **argv;
146{
147 struct sockaddr_in sin;
148 struct hostent *hent;
149 extern char *optarg;
150 extern int optind;
151 char *domainname;
152 int c;
153
154 yp_get_default_domain(&domainname);
155
156 bzero(&sin, sizeof sin);
157 sin.sin_family = AF_INET;
158 sin.sin_addr.s_addr = htonl(0x7f000001);
159
160 while( (c=getopt(argc, argv, "h:d:")) != -1)
161 switch(c) {
162 case 'd':
163 domainname = optarg;
164 break;
165 case 'h':
166 if( (sin.sin_addr.s_addr=inet_addr(optarg)) == -1) {
167 hent = gethostbyname(optarg);
168 if(hent==NULL) {
169 fprintf(stderr, "ypset: host %s unknown\n",
170 optarg);
171 exit(1);
172 }
173 bcopy(&hent->h_addr_list[0], &sin.sin_addr,
174 sizeof sin.sin_addr);
175 }
176 break;
177 default:
178 usage();
179 }
180
181 if(optind + 1 != argc )
182 usage();
183
184 if (bind_tohost(&sin, domainname, argv[optind]))
185 exit(1);
186 exit(0);
187}