]>
Commit | Line | Data |
---|---|---|
b7080c8e A |
1 | /* |
2 | * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. | |
3 | * | |
4 | * @APPLE_LICENSE_HEADER_START@ | |
5 | * | |
a2c93a76 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, | |
a2c93a76 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 | |
57 | static 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 | ||
74 | extern bool_t xdr_domainname(); | |
75 | ||
76 | void | |
77 | usage() | |
78 | { | |
79 | fprintf(stderr, "Usage:\n"); | |
80 | fprintf(stderr, "\typset [-h host ] [-d domain] server\n"); | |
81 | exit(1); | |
82 | } | |
83 | ||
84 | int | |
85 | bind_tohost(sin, dom, server) | |
86 | struct sockaddr_in *sin; | |
87 | char *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 | ||
143 | int | |
144 | main(argc, argv) | |
145 | char **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 | } |