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:
parent
dbe525ffb0
commit
7db881e162
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue