summaryrefslogtreecommitdiffstats
path: root/gnu/usr.sbin/ypserv/yp_svc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/usr.sbin/ypserv/yp_svc.c')
-rw-r--r--gnu/usr.sbin/ypserv/yp_svc.c393
1 files changed, 393 insertions, 0 deletions
diff --git a/gnu/usr.sbin/ypserv/yp_svc.c b/gnu/usr.sbin/ypserv/yp_svc.c
new file mode 100644
index 0000000..fc525cd
--- /dev/null
+++ b/gnu/usr.sbin/ypserv/yp_svc.c
@@ -0,0 +1,393 @@
+/*
+ * And thus spoke RPCGEN:
+ * Please do not edit this file.
+ * It was generated using rpcgen.
+ *
+ * And thus replied Lpd@NannyMUD:
+ * Who cares? :-) /Peter Eriksson <pen@signum.se>
+ *
+ * $Id$
+ */
+
+#include "system.h"
+
+#include "yp.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <rpc/pmap_clnt.h>
+#include <string.h>
+#include <memory.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <syslog.h>
+#include <errno.h>
+#include <paths.h>
+
+extern int errno;
+extern void Perror();
+
+#ifdef __STDC__
+#define SIG_PF void(*)(int)
+#endif
+
+static void
+ypprog_2(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+ union {
+ domainname ypproc_domain_2_arg;
+ domainname ypproc_domain_nonack_2_arg;
+ ypreq_key ypproc_match_2_arg;
+ ypreq_key ypproc_first_2_arg;
+ ypreq_key ypproc_next_2_arg;
+ ypreq_xfr ypproc_xfr_2_arg;
+ ypreq_nokey ypproc_all_2_arg;
+ ypreq_nokey ypproc_master_2_arg;
+ ypreq_nokey ypproc_order_2_arg;
+ domainname ypproc_maplist_2_arg;
+ } argument;
+ char *result;
+ xdrproc_t __xdr_argument, __xdr_result;
+ char *(*local)(char *, struct svc_req *);
+
+ switch (rqstp->rq_proc) {
+ case YPPROC_NULL:
+ __xdr_argument = (xdrproc_t) xdr_void;
+ __xdr_result = (xdrproc_t) xdr_void;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_null_2_svc;
+ break;
+
+ case YPPROC_DOMAIN:
+ __xdr_argument = (xdrproc_t) __xdr_domainname;
+ __xdr_result = (xdrproc_t) xdr_bool;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_domain_2_svc;
+ break;
+
+ case YPPROC_DOMAIN_NONACK:
+ __xdr_argument = (xdrproc_t) __xdr_domainname;
+ __xdr_result = (xdrproc_t) xdr_bool;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_domain_nonack_2_svc;
+ break;
+
+ case YPPROC_MATCH:
+ __xdr_argument = (xdrproc_t) __xdr_ypreq_key;
+ __xdr_result = (xdrproc_t) __xdr_ypresp_val;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_match_2_svc;
+ break;
+
+ case YPPROC_FIRST:
+#if 0 /* Bug in Sun's yp.x RPC prototype file */
+ __xdr_argument = (xdrproc_t) __xdr_ypreq_key;
+#else
+ __xdr_argument = (xdrproc_t) __xdr_ypreq_nokey;
+#endif
+ __xdr_result = (xdrproc_t) __xdr_ypresp_key_val;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_first_2_svc;
+ break;
+
+ case YPPROC_NEXT:
+ __xdr_argument = (xdrproc_t) __xdr_ypreq_key;
+ __xdr_result = (xdrproc_t) __xdr_ypresp_key_val;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_next_2_svc;
+ break;
+
+ case YPPROC_XFR:
+ __xdr_argument = (xdrproc_t) __xdr_ypreq_xfr;
+ __xdr_result = (xdrproc_t) __xdr_ypresp_xfr;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_xfr_2_svc;
+ break;
+
+ case YPPROC_CLEAR:
+ __xdr_argument = (xdrproc_t) xdr_void;
+ __xdr_result = (xdrproc_t) xdr_void;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_clear_2_svc;
+ break;
+
+ case YPPROC_ALL:
+ __xdr_argument = (xdrproc_t) __xdr_ypreq_nokey;
+ __xdr_result = (xdrproc_t) __xdr_ypresp_all;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_all_2_svc;
+ break;
+
+ case YPPROC_MASTER:
+ __xdr_argument = (xdrproc_t) __xdr_ypreq_nokey;
+ __xdr_result = (xdrproc_t) __xdr_ypresp_master;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_master_2_svc;
+ break;
+
+ case YPPROC_ORDER:
+ __xdr_argument = (xdrproc_t) __xdr_ypreq_nokey;
+ __xdr_result = (xdrproc_t) __xdr_ypresp_order;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_order_2_svc;
+ break;
+
+ case YPPROC_MAPLIST:
+ __xdr_argument = (xdrproc_t) __xdr_domainname;
+ __xdr_result = (xdrproc_t) __xdr_ypresp_maplist;
+ local = (char *(*)(char *, struct svc_req *)) ypproc_maplist_2_svc;
+ break;
+
+ default:
+ svcerr_noproc(transp);
+ return;
+ }
+ (void) memset((char *)&argument, 0, sizeof (argument));
+ if (!svc_getargs(transp, __xdr_argument, (caddr_t) &argument)) {
+ svcerr_decode(transp);
+ return;
+ }
+ result = (*local)((char *)&argument, rqstp);
+ if (result != NULL && !svc_sendreply(transp, __xdr_result, result)) {
+ svcerr_systemerr(transp);
+ }
+ if (!svc_freeargs(transp, __xdr_argument, (caddr_t) &argument)) {
+ fprintf(stderr, "unable to free arguments");
+ exit(1);
+ }
+ return;
+}
+
+#if 0
+static void
+yppush_xfrrespprog_1(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+ union {
+ int fill;
+ } argument;
+ char *result;
+ xdrproc_t __xdr_argument, __xdr_result;
+ char *(*local)(char *, struct svc_req *);
+
+ switch (rqstp->rq_proc) {
+ case YPPUSHPROC_NULL:
+ __xdr_argument = (xdrproc_t) xdr_void;
+ __xdr_result = (xdrproc_t) xdr_void;
+ local = (char *(*)(char *, struct svc_req *)) yppushproc_null_1_svc;
+ break;
+
+ case YPPUSHPROC_XFRRESP:
+ __xdr_argument = (xdrproc_t) xdr_void;
+ __xdr_result = (xdrproc_t) __xdr_yppushresp_xfr;
+ local = (char *(*)(char *, struct svc_req *)) yppushproc_xfrresp_1_svc;
+ break;
+
+ default:
+ svcerr_noproc(transp);
+ return;
+ }
+ (void) memset((char *)&argument, 0, sizeof (argument));
+ if (!svc_getargs(transp, __xdr_argument, (caddr_t) &argument)) {
+ svcerr_decode(transp);
+ return;
+ }
+ result = (*local)((char *)&argument, rqstp);
+ if (result != NULL && !svc_sendreply(transp, __xdr_result, result)) {
+ svcerr_systemerr(transp);
+ }
+ if (!svc_freeargs(transp, __xdr_argument, (caddr_t) &argument)) {
+ fprintf(stderr, "unable to free arguments");
+ exit(1);
+ }
+ return;
+}
+
+static void
+ypbindprog_2(struct svc_req *rqstp, register SVCXPRT *transp)
+{
+ union {
+ domainname ypbindproc_domain_2_arg;
+ ypbind_setdom ypbindproc_setdom_2_arg;
+ } argument;
+ char *result;
+ xdrproc_t __xdr_argument, __xdr_result;
+ char *(*local)(char *, struct svc_req *);
+
+ switch (rqstp->rq_proc) {
+ case YPBINDPROC_NULL:
+ __xdr_argument = (xdrproc_t) xdr_void;
+ __xdr_result = (xdrproc_t) xdr_void;
+ local = (char *(*)(char *, struct svc_req *)) ypbindproc_null_2_svc;
+ break;
+
+ case YPBINDPROC_DOMAIN:
+ __xdr_argument = (xdrproc_t) __xdr_domainname;
+ __xdr_result = (xdrproc_t) __xdr_ypbind_resp;
+ local = (char *(*)(char *, struct svc_req *)) ypbindproc_domain_2_svc;
+ break;
+
+ case YPBINDPROC_SETDOM:
+ __xdr_argument = (xdrproc_t) __xdr_ypbind_setdom;
+ __xdr_result = (xdrproc_t) xdr_void;
+ local = (char *(*)(char *, struct svc_req *)) ypbindproc_setdom_2_svc;
+ break;
+
+ default:
+ svcerr_noproc(transp);
+ return;
+ }
+ (void) memset((char *)&argument, 0, sizeof (argument));
+ if (!svc_getargs(transp, __xdr_argument, (caddr_t) &argument)) {
+ svcerr_decode(transp);
+ return;
+ }
+ result = (*local)((char *)&argument, rqstp);
+ if (result != NULL && !svc_sendreply(transp, __xdr_result, result)) {
+ svcerr_systemerr(transp);
+ }
+ if (!svc_freeargs(transp, __xdr_argument, (caddr_t) &argument)) {
+ fprintf(stderr, "unable to free arguments");
+ exit(1);
+ }
+ return;
+}
+#endif
+
+extern int debug_flag;
+extern int dns_flag;
+
+#ifndef _PATH_YP
+#define _PATH_YP "/var/yp"
+#endif
+char *path_ypdb = _PATH_YP;
+
+char *progname;
+
+
+int main(int argc, char **argv)
+{
+ register SVCXPRT *transp;
+ int i;
+ int my_port = -1;
+ int my_socket;
+ struct sockaddr_in socket_address;
+ int result;
+
+
+ progname = strrchr (argv[0], '/');
+ if (progname == (char *) NULL)
+ progname = argv[0];
+ else
+ progname++;
+
+ openlog(progname, LOG_PID, TCPW_FACILITY);
+
+ for (i = 1; i < argc && argv[i][0] == '-'; i++)
+ {
+ if (strcmp(argv[i], "-debug") == 0 || strcmp(argv[i], "-d") == 0)
+ debug_flag = 1;
+ else if (strcmp(argv[i], "-dns") == 0 || strcmp(argv[i], "-b") == 0)
+ dns_flag = 1;
+ else if ((argv[i][1] == 'p') && (argv[i][2] >= '0') && (argv[i][2] <= '9'))
+ my_port = atoi(argv[i] + 2);
+ else
+ {
+ fprintf(stderr, "%s: Unknown command line switch: %s\n",
+ progname,
+ argv[i]);
+ exit(1);
+ }
+ }
+
+ if (!debug_flag)
+ if(daemon(0,0))
+ {
+ perror("daemon()");
+ exit (1);
+ }
+
+ if (debug_flag)
+ Perror("[Welcome to the NYS YP Server, version 0.11]\n");
+
+ if (i < argc)
+ {
+ path_ypdb = argv[i];
+ if (debug_flag)
+ Perror("Using database directory: %s\n", path_ypdb);
+ }
+
+ /* Change current directory to database location */
+ if (chdir(path_ypdb) < 0)
+ {
+ Perror("%s: chdir: %", argv[0], strerror(errno));
+ exit(1);
+ }
+
+ (void) pmap_unset(YPPROG, YPVERS);
+
+ if (my_port >= 0)
+ {
+ my_socket = socket (AF_INET, SOCK_DGRAM, 0);
+ if (my_socket < 0)
+ {
+ Perror("%s: can not create UDP: %s",
+ progname, strerror(errno));
+ exit (1);
+ }
+
+ socket_address.sin_family = AF_INET;
+ socket_address.sin_addr.s_addr = htonl (INADDR_ANY);
+ socket_address.sin_port = htons (my_port);
+
+ result = bind (my_socket, (struct sockaddr *) &socket_address,
+ sizeof (socket_address));
+ if (result < 0)
+ {
+ Perror("%s: can not create UDP: %s",
+ progname, strerror(errno));
+ exit (1);
+ }
+ }
+ else
+ my_socket = RPC_ANYSOCK;
+
+ transp = svcudp_create(my_socket);
+ if (transp == NULL) {
+ Perror("cannot create udp service.");
+ exit(1);
+ }
+ if (!svc_register(transp, YPPROG, YPVERS, ypprog_2, IPPROTO_UDP)) {
+ Perror("unable to register (YPPROG, YPVERS, udp).");
+ exit(1);
+ }
+
+ if (my_port >= 0)
+ {
+ my_socket = socket (AF_INET, SOCK_STREAM, 0);
+ if (my_socket < 0)
+ {
+ Perror("%s: can not create TCP: %s",
+ progname, strerror(errno));
+ exit (1);
+ }
+
+ socket_address.sin_family = AF_INET;
+ socket_address.sin_addr.s_addr = htonl (INADDR_ANY);
+ socket_address.sin_port = htons (my_port);
+
+ result = bind (my_socket, (struct sockaddr *) &socket_address,
+ sizeof (socket_address));
+ if (result < 0)
+ {
+ Perror("%s: can not create TCP: %s",
+ progname, strerror(errno));
+ exit (1);
+ }
+ }
+ else
+ my_socket = RPC_ANYSOCK;
+
+ transp = svctcp_create(my_socket, 0, 0);
+ if (transp == NULL) {
+ Perror("%s: cannot create tcp service\n", progname);
+ exit(1);
+ }
+ if (!svc_register(transp, YPPROG, YPVERS, ypprog_2, IPPROTO_TCP)) {
+ Perror("%s: unable to register (YPPROG, YPVERS, tcp)\n", progname);
+ exit(1);
+ }
+
+ svc_run();
+ Perror("svc_run returned");
+ exit(1);
+ /* NOTREACHED */
+}
OpenPOWER on IntegriCloud