More XDR routine cleanups. These three programs should be the only

ones that require this: the others call the yplib functions in libc.
This commit is contained in:
Bill Paul 1995-12-15 03:39:46 +00:00
parent dbe525ffb0
commit 7db881e162
3 changed files with 65 additions and 48 deletions

View File

@ -39,7 +39,8 @@ static char rcsid[] = "ypwhich.c,v 1.2 1993/05/16 02:49:10 deraadt Exp";
#include <netdb.h> #include <netdb.h>
#include <rpc/rpc.h> #include <rpc/rpc.h>
#include <rpc/xdr.h> #include <rpc/xdr.h>
#include <rpcsvc/yp_prot.h> #include <rpcsvc/yp.h>
struct dom_binding{};
#include <rpcsvc/ypclnt.h> #include <rpcsvc/ypclnt.h>
#define ERR_USAGE 1 /* bad arguments - display 'usage' message */ #define ERR_USAGE 1 /* bad arguments - display 'usage' message */
@ -100,7 +101,7 @@ struct sockaddr_in *sin;
tv.tv_sec = 5; tv.tv_sec = 5;
tv.tv_usec = 0; tv.tv_usec = 0;
r = clnt_call(client, YPBINDPROC_DOMAIN, r = clnt_call(client, YPBINDPROC_DOMAIN,
xdr_domainname, dom, xdr_ypbind_resp, &ypbr, tv); xdr_domainname, &dom, xdr_ypbind_resp, &ypbr, tv);
if( r != RPC_SUCCESS) { if( r != RPC_SUCCESS) {
fprintf(stderr, "can't clnt_call: %s\n", fprintf(stderr, "can't clnt_call: %s\n",
yperr_string(YPERR_YPBIND)); yperr_string(YPERR_YPBIND));
@ -109,14 +110,14 @@ struct sockaddr_in *sin;
} else { } else {
if (ypbr.ypbind_status != YPBIND_SUCC_VAL) { if (ypbr.ypbind_status != YPBIND_SUCC_VAL) {
fprintf(stderr, "can't yp_bind: Reason: %s\n", fprintf(stderr, "can't yp_bind: Reason: %s\n",
ypbinderr_string(ypbr.ypbind_respbody.ypbind_error)); ypbinderr_string(ypbr.ypbind_resp_u.ypbind_error));
clnt_destroy(client); clnt_destroy(client);
return r; return r;
} }
} }
clnt_destroy(client); clnt_destroy(client);
ss_addr = ypbr.ypbind_respbody.ypbind_bindinfo.ypbind_binding_addr.s_addr; ss_addr = *(u_long *)ypbr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_addr;
/*printf("%08x\n", ss_addr);*/ /*printf("%08x\n", ss_addr);*/
hent = gethostbyaddr((char *)&ss_addr, sizeof(ss_addr), AF_INET); hent = gethostbyaddr((char *)&ss_addr, sizeof(ss_addr), AF_INET);
if (hent) if (hent)
@ -227,19 +228,19 @@ char **argv;
case 0: case 0:
for(y=ypml; y; ) { for(y=ypml; y; ) {
ypml = y; ypml = y;
r = yp_master(domainname, ypml->ypml_name, &master); r = yp_master(domainname, ypml->map, &master);
switch(r) { switch(r) {
case 0: case 0:
printf("%s %s\n", ypml->ypml_name, master); printf("%s %s\n", ypml->map, master);
free(master); free(master);
break; break;
default: default:
fprintf(stderr, fprintf(stderr,
"YP: can't find the master of %s: Reason: %s\n", "YP: can't find the master of %s: Reason: %s\n",
ypml->ypml_name, yperr_string(r)); ypml->map, yperr_string(r));
break; break;
} }
y = ypml->ypml_next; y = ypml->next;
free(ypml); free(ypml);
} }
break; break;

View File

@ -28,7 +28,7 @@
*/ */
#ifndef LINT #ifndef LINT
static char rcsid[] = "$Id: ypbind.c,v 1.16 1995/07/15 23:27:27 wpaul Exp $"; static char rcsid[] = "$Id: ypbind.c,v 1.17 1995/07/20 22:32:59 wpaul Exp $";
#endif #endif
#include <sys/param.h> #include <sys/param.h>
@ -58,7 +58,8 @@ static char rcsid[] = "$Id: ypbind.c,v 1.16 1995/07/15 23:27:27 wpaul Exp $";
#include <rpc/pmap_rmt.h> #include <rpc/pmap_rmt.h>
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <rpcsvc/yp_prot.h> #include <rpcsvc/yp.h>
struct dom_binding{};
#include <rpcsvc/ypclnt.h> #include <rpcsvc/ypclnt.h>
#ifndef BINDINGDIR #ifndef BINDINGDIR
@ -102,7 +103,7 @@ void terminate __P((int));
void yp_restricted_mode __P((char *)); void yp_restricted_mode __P((char *));
int verify __P((struct in_addr)); int verify __P((struct in_addr));
char *domainname; char *domain_name;
struct _dom_binding *ypbindlist; struct _dom_binding *ypbindlist;
static struct _dom_binding *broad_domain; static struct _dom_binding *broad_domain;
@ -162,7 +163,7 @@ CLIENT *clnt;
struct ypbind_resp * struct ypbind_resp *
ypbindproc_domain_2(transp, argp, clnt) ypbindproc_domain_2(transp, argp, clnt)
SVCXPRT *transp; SVCXPRT *transp;
char *argp; domainname *argp;
CLIENT *clnt; CLIENT *clnt;
{ {
static struct ypbind_resp res; static struct ypbind_resp res;
@ -171,33 +172,33 @@ CLIENT *clnt;
bzero((char *)&res, sizeof res); bzero((char *)&res, sizeof res);
res.ypbind_status = YPBIND_FAIL_VAL; res.ypbind_status = YPBIND_FAIL_VAL;
res.ypbind_respbody.ypbind_error = YPBIND_ERR_NOSERV; res.ypbind_resp_u.ypbind_error = YPBIND_ERR_NOSERV;
for(ypdb=ypbindlist; ypdb; ypdb=ypdb->dom_pnext) { for(ypdb=ypbindlist; ypdb; ypdb=ypdb->dom_pnext) {
if( strcmp(ypdb->dom_domain, argp) == 0) if( strcmp(ypdb->dom_domain, *argp) == 0)
break; break;
} }
if(ypdb==NULL) { if(ypdb==NULL) {
if (yp_restricted) { if (yp_restricted) {
syslog(LOG_NOTICE, "Running in restricted mode -- request to bind domain \"%s\" rejected.\n", argp); syslog(LOG_NOTICE, "Running in restricted mode -- request to bind domain \"%s\" rejected.\n", *argp);
return &res; return &res;
} }
if (domains >= MAX_DOMAINS) { if (domains >= MAX_DOMAINS) {
syslog(LOG_WARNING, "domain limit (%d) exceeded", syslog(LOG_WARNING, "domain limit (%d) exceeded",
MAX_DOMAINS); MAX_DOMAINS);
res.ypbind_respbody.ypbind_error = YPBIND_ERR_RESC; res.ypbind_resp_u.ypbind_error = YPBIND_ERR_RESC;
return &res; return &res;
} }
ypdb = (struct _dom_binding *)malloc(sizeof *ypdb); ypdb = (struct _dom_binding *)malloc(sizeof *ypdb);
if (ypdb == NULL) { if (ypdb == NULL) {
syslog(LOG_WARNING, "malloc: %s", strerror(errno)); syslog(LOG_WARNING, "malloc: %s", strerror(errno));
res.ypbind_respbody.ypbind_error = YPBIND_ERR_RESC; res.ypbind_resp_u.ypbind_error = YPBIND_ERR_RESC;
return &res; return &res;
} }
bzero((char *)ypdb, sizeof *ypdb); bzero((char *)ypdb, sizeof *ypdb);
strncpy(ypdb->dom_domain, argp, sizeof ypdb->dom_domain); strncpy(ypdb->dom_domain, *argp, sizeof ypdb->dom_domain);
ypdb->dom_vers = YPVERS; ypdb->dom_vers = YPVERS;
ypdb->dom_alive = 0; ypdb->dom_alive = 0;
ypdb->dom_default = 0; ypdb->dom_default = 0;
@ -215,10 +216,10 @@ CLIENT *clnt;
} }
res.ypbind_status = YPBIND_SUCC_VAL; res.ypbind_status = YPBIND_SUCC_VAL;
res.ypbind_respbody.ypbind_error = 0; /* Success */ res.ypbind_resp_u.ypbind_error = 0; /* Success */
res.ypbind_respbody.ypbind_bindinfo.ypbind_binding_addr.s_addr = *(u_long *)&res.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_addr =
ypdb->dom_server_addr.sin_addr.s_addr; ypdb->dom_server_addr.sin_addr.s_addr;
res.ypbind_respbody.ypbind_bindinfo.ypbind_binding_port = *(u_short *)&res.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_port =
ypdb->dom_server_addr.sin_port; ypdb->dom_server_addr.sin_port;
/*printf("domain %s at %s/%d\n", ypdb->dom_domain, /*printf("domain %s at %s/%d\n", ypdb->dom_domain,
inet_ntoa(ypdb->dom_server_addr.sin_addr), inet_ntoa(ypdb->dom_server_addr.sin_addr),
@ -229,7 +230,7 @@ CLIENT *clnt;
void * void *
ypbindproc_setdom_2(transp, argp, clnt) ypbindproc_setdom_2(transp, argp, clnt)
SVCXPRT *transp; SVCXPRT *transp;
struct ypbind_setdom *argp; ypbind_setdom *argp;
CLIENT *clnt; CLIENT *clnt;
{ {
struct sockaddr_in *fromsin, bindsin; struct sockaddr_in *fromsin, bindsin;
@ -263,8 +264,8 @@ CLIENT *clnt;
bzero((char *)&bindsin, sizeof bindsin); bzero((char *)&bindsin, sizeof bindsin);
bindsin.sin_family = AF_INET; bindsin.sin_family = AF_INET;
bindsin.sin_addr.s_addr = argp->ypsetdom_addr.s_addr; bindsin.sin_addr.s_addr = *(u_long *)argp->ypsetdom_binding.ypbind_binding_addr;
bindsin.sin_port = argp->ypsetdom_port; bindsin.sin_port = *(u_short *)argp->ypsetdom_binding.ypbind_binding_port;
rpc_received(argp->ypsetdom_domain, &bindsin, 1); rpc_received(argp->ypsetdom_domain, &bindsin, 1);
return; return;
@ -276,7 +277,7 @@ struct svc_req *rqstp;
register SVCXPRT *transp; register SVCXPRT *transp;
{ {
union { union {
char ypbindproc_domain_2_arg[MAXHOSTNAMELEN]; domainname ypbindproc_domain_2_arg;
struct ypbind_setdom ypbindproc_setdom_2_arg; struct ypbind_setdom ypbindproc_setdom_2_arg;
} argument; } argument;
struct authunix_parms *creds; struct authunix_parms *creds;
@ -386,8 +387,8 @@ char **argv;
} }
/* XXX domainname will be overriden if we use restricted mode */ /* XXX domainname will be overriden if we use restricted mode */
yp_get_default_domain(&domainname); yp_get_default_domain(&domain_name);
if( domainname[0] == '\0') { if( domain_name[0] == '\0') {
fprintf(stderr, "domainname not set. Aborting.\n"); fprintf(stderr, "domainname not set. Aborting.\n");
exit(1); exit(1);
} }
@ -455,7 +456,7 @@ char **argv;
exit(1); exit(1);
} }
bzero((char *)ypbindlist, sizeof *ypbindlist); bzero((char *)ypbindlist, sizeof *ypbindlist);
strncpy(ypbindlist->dom_domain, domainname, sizeof ypbindlist->dom_domain); strncpy(ypbindlist->dom_domain, domain_name, sizeof ypbindlist->dom_domain);
ypbindlist->dom_vers = YPVERS; ypbindlist->dom_vers = YPVERS;
ypbindlist->dom_alive = 0; ypbindlist->dom_alive = 0;
ypbindlist->dom_lockfd = -1; ypbindlist->dom_lockfd = -1;
@ -655,9 +656,14 @@ struct _dom_binding *ypdb;
retries = 0; retries = 0;
stat = clnt_broadcast(YPPROG, YPVERS, YPPROC_DOMAIN_NONACK, {
xdr_domainname, (char *)ypdb->dom_domain, xdr_bool, (char *)&out, char *ptr;
broadcast_result);
ptr = (char *)&ypdb->dom_domain;
stat = clnt_broadcast(YPPROG, YPVERS, YPPROC_DOMAIN_NONACK,
xdr_domainname, (char *)&ptr, xdr_bool, (char *)&out,
broadcast_result);
}
if (stat != RPC_SUCCESS) { if (stat != RPC_SUCCESS) {
bzero((char *)&ypdb->dom_server_addr, bzero((char *)&ypdb->dom_server_addr,
@ -710,14 +716,20 @@ struct _dom_binding *ypdb;
return(1); return(1);
} }
if ((stat = clnt_call(client_handle, YPPROC_DOMAIN, {
xdr_domainname, (char *)ypdb->dom_domain, xdr_bool, char *ptr;
(char *)&out, timeout)) != RPC_SUCCESS || out == FALSE) {
ypdb->dom_alive = 0; ptr = (char *)&ypdb->dom_domain;
ypdb->dom_vers = -1;
clnt_destroy(client_handle); if ((stat = clnt_call(client_handle, YPPROC_DOMAIN,
broadcast(ypdb); xdr_domainname, (char *)&ptr, xdr_bool, (char *)&out,
return(1); timeout)) != RPC_SUCCESS || out == FALSE) {
ypdb->dom_alive = 0;
ypdb->dom_vers = -1;
clnt_destroy(client_handle);
broadcast(ypdb);
return(1);
}
} }
clnt_destroy(client_handle); clnt_destroy(client_handle);
@ -854,8 +866,8 @@ int force;
bzero(&ybr, sizeof ybr); bzero(&ybr, sizeof ybr);
ybr.ypbind_status = YPBIND_SUCC_VAL; ybr.ypbind_status = YPBIND_SUCC_VAL;
ybr.ypbind_respbody.ypbind_bindinfo.ypbind_binding_addr = raddrp->sin_addr; *(u_long *)&ybr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_addr = raddrp->sin_addr.s_addr;
ybr.ypbind_respbody.ypbind_bindinfo.ypbind_binding_port = raddrp->sin_port; *(u_short *)&ybr.ypbind_resp_u.ypbind_bindinfo.ypbind_binding_port = raddrp->sin_port;
if( writev(ypdb->dom_lockfd, iov, 2) != iov[0].iov_len + iov[1].iov_len) { if( writev(ypdb->dom_lockfd, iov, 2) != iov[0].iov_len + iov[1].iov_len) {
syslog(LOG_WARNING, "write: %s", strerror(errno)); syslog(LOG_WARNING, "write: %s", strerror(errno));
@ -898,7 +910,7 @@ char *args;
/* Find the restricted domain. */ /* Find the restricted domain. */
if ((s = strsep(&args, ",")) == NULL) if ((s = strsep(&args, ",")) == NULL)
return; return;
domainname = s; domain_name = s;
/* Get the addresses of the servers. */ /* Get the addresses of the servers. */
while ((s = strsep(&args, ",")) != NULL && i < RESTRICTED_SERVERS) { while ((s = strsep(&args, ",")) != NULL && i < RESTRICTED_SERVERS) {

View File

@ -38,7 +38,8 @@ static char rcsid[] = "ypset.c,v 1.3 1993/06/12 00:02:37 deraadt Exp";
#include <netdb.h> #include <netdb.h>
#include <rpc/rpc.h> #include <rpc/rpc.h>
#include <rpc/xdr.h> #include <rpc/xdr.h>
#include <rpcsvc/yp_prot.h> #include <rpcsvc/yp.h>
struct dom_binding{};
#include <rpcsvc/ypclnt.h> #include <rpcsvc/ypclnt.h>
#include <arpa/inet.h> #include <arpa/inet.h>
@ -72,17 +73,20 @@ char *dom, *server;
if( (hp = gethostbyname (server)) != NULL ) { if( (hp = gethostbyname (server)) != NULL ) {
/* is this the most compatible way?? */ /* is this the most compatible way?? */
bcopy (hp->h_addr_list[0], &ypsd.ypsetdom_addr, bcopy (hp->h_addr_list[0],
sizeof (ypsd.ypsetdom_addr)); (u_long *)&ypsd.ypsetdom_binding.ypbind_binding_addr,
sizeof (unsigned long));
} else if( (long)(server_addr = inet_addr (server)) == -1) { } else if( (long)(server_addr = inet_addr (server)) == -1) {
fprintf(stderr, "can't find address for %s\n", server); fprintf(stderr, "can't find address for %s\n", server);
exit(1); exit(1);
} else } else
bcopy (&server_addr, &ypsd.ypsetdom_addr, bcopy (&server_addr,
*(u_long *)&ypsd.ypsetdom_binding.ypbind_binding_addr,
sizeof (server_addr)); sizeof (server_addr));
strncpy(ypsd.ypsetdom_domain, dom, sizeof ypsd.ypsetdom_domain); /* strncpy(ypsd.ypsetdom_domain, dom, sizeof ypsd.ypsetdom_domain); */
ypsd.ypsetdom_port = port; ypsd.ypsetdom_domain = dom;
*(u_long *)&ypsd.ypsetdom_binding.ypbind_binding_port = port;
ypsd.ypsetdom_vers = YPVERS; ypsd.ypsetdom_vers = YPVERS;
tv.tv_sec = 15; tv.tv_sec = 15;