Whamcloud - gitweb
Move portals into its own CVS module for HEAD.
[fs/lustre-release.git] / lustre / portals / utils / acceptor.c
diff --git a/lustre/portals/utils/acceptor.c b/lustre/portals/utils/acceptor.c
deleted file mode 100644 (file)
index 524d128..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- */
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/tcp.h>
-#include <netdb.h>
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <syslog.h>
-#include <errno.h>
-#ifdef HAVE_LIBWRAP
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <tcpd.h>
-#endif
-
-#include <portals/api-support.h>
-#include <portals/list.h>
-#include <portals/lib-types.h>
-#include <portals/socknal.h>
-
-/* should get this from autoconf somehow */
-#ifndef PIDFILE_DIR
-#define PIDFILE_DIR "/var/run"
-#endif 
-
-#define PROGNAME "acceptor"
-
-#ifdef HAVE_LIBWRAP
-/* needed because libwrap declares these as externs */
-int     allow_severity = LOG_INFO;
-int     deny_severity = LOG_WARNING;
-#endif
-
-void create_pidfile(char *name, int port)
-{
-        char pidfile[1024];
-        FILE *fp;
-
-        snprintf(pidfile, sizeof(pidfile), "%s/%s-%d.pid", 
-                 PIDFILE_DIR, name, port);
-        
-        if ((fp = fopen(pidfile, "w"))) {
-                fprintf(fp, "%d\n", getpid());
-                fclose(fp);
-        } else {
-                syslog(LOG_ERR, "%s: %s\n", pidfile, 
-                       strerror(errno));
-        }
-}
-
-int pidfile_exists(char *name, int port)
-{
-        char pidfile[1024];
-
-        snprintf(pidfile, sizeof(pidfile), "%s/%s-%d.pid", 
-                 PIDFILE_DIR, name, port);
-        
-        if (!access(pidfile, F_OK)) {
-                fprintf(stderr, "%s: exists, acceptor already running.\n", 
-                        pidfile);
-                return (1);
-        } 
-        return (0);
-}
-
-void
-show_connection (int fd, __u32 net_ip)
-{
-        struct hostent *h = gethostbyaddr ((char *)&net_ip, sizeof net_ip, AF_INET);
-        __u32 host_ip = ntohl (net_ip);
-        int  len;
-        char host[1024];
-        
-        if (h == NULL)
-                snprintf (host, sizeof(host), "%d.%d.%d.%d", (host_ip >> 24) & 0xff,
-                                    (host_ip >> 16) & 0xff, (host_ip >> 8) & 0xff, host_ip & 0xff);
-        else
-                snprintf (host, sizeof(host), "%s", h->h_name);
-                
-        syslog (LOG_INFO, "Accepted host: %s\n", host);
-}
-
-void
-usage (char *myname)
-{
-        fprintf (stderr, 
-                 "Usage: %s [-N nal_id] [-p] [-l] port\n\n"
-                 " -l\tKeep stdin/stdout open\n"
-                 " -p\tAllow connections from non-privileged ports\n",
-                 myname);
-        exit (1);
-}
-
-int main(int argc, char **argv)
-{
-        int o, fd, rc, port, pfd;
-        struct sockaddr_in srvaddr;
-        int c;
-        int noclose = 0;
-        int nal = SOCKNAL;
-        int rport;
-        int require_privports = 1;
-        
-        while ((c = getopt (argc, argv, "N:lp")) != -1) {
-                switch (c) {
-                case 'N':
-                        if (sscanf(optarg, "%d", &nal) != 1 ||
-                            nal < 0 || nal > NAL_MAX_NR)
-                                usage(argv[0]);
-                        break;
-                case 'l':
-                        noclose = 1;
-                        break;
-                case 'p':
-                        require_privports = 0;
-                        break;
-                default:
-                        usage (argv[0]);
-                        break;
-                }
-        }
-
-        if (optind >= argc)
-                usage (argv[0]);
-
-        port = atol(argv[optind++]);
-
-        if (pidfile_exists(PROGNAME, port))
-                exit(1);
-
-        memset(&srvaddr, 0, sizeof(srvaddr));
-        srvaddr.sin_family = AF_INET;
-        srvaddr.sin_port = htons(port);
-        srvaddr.sin_addr.s_addr = INADDR_ANY;
-
-        fd = socket(PF_INET, SOCK_STREAM, 0);
-        if (fd < 0) {
-                perror("opening socket");
-                exit(1);
-        }
-
-        o = 1;
-        if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &o, sizeof(o))) {
-                perror("Cannot set REUSEADDR socket opt");
-                exit(1);
-        }
-
-        rc = bind(fd, (struct sockaddr *)&srvaddr, sizeof(srvaddr));
-        if ( rc == -1 ) {
-                perror("bind: ");
-                exit(1);
-        }
-
-        if (listen(fd, 127)) {
-                perror("listen: ");
-                exit(1);
-        }
-        fprintf(stderr, "listening on port %d\n", port);
-
-        pfd = open("/dev/portals", O_RDWR);
-        if ( pfd < 0 ) {
-                perror("opening portals device");
-                exit(1);
-        }
-
-        rc = daemon(0, noclose);
-        if (rc < 0) {
-                perror("daemon(): ");
-                exit(1);
-        }
-
-        openlog(PROGNAME, LOG_PID, LOG_DAEMON);
-        syslog(LOG_INFO, "started, listening on port %d\n", port);
-        create_pidfile(PROGNAME, port);
-
-        while (1) {
-                struct sockaddr_in clntaddr;
-                int len = sizeof(clntaddr);
-                int cfd;
-                struct portal_ioctl_data data;
-                struct portals_cfg pcfg;
-#ifdef HAVE_LIBWRAP
-                struct request_info request;
-#endif
-                char addrstr[INET_ADDRSTRLEN];
-               
-                cfd = accept(fd, (struct sockaddr *)&clntaddr, &len);
-                if ( cfd < 0 ) {
-                        perror("accept");
-                        exit(0);
-                        continue;
-                }
-
-#ifdef HAVE_LIBWRAP
-                /* libwrap access control */
-                request_init(&request, RQ_DAEMON, "lustre", RQ_FILE, cfd, 0);
-                sock_host(&request);
-                if (!hosts_access(&request)) {
-                        inet_ntop(AF_INET, &clntaddr.sin_addr,
-                                  addrstr, INET_ADDRSTRLEN);
-                        syslog(LOG_WARNING, "Unauthorized access from %s:%hd\n",
-                               addrstr, ntohs(clntaddr.sin_port));
-                        close (cfd);
-                        continue;
-                }
-#endif
-
-                if (require_privports && ntohs(clntaddr.sin_port) >= IPPORT_RESERVED) {
-                        inet_ntop(AF_INET, &clntaddr.sin_addr,
-                                  addrstr, INET_ADDRSTRLEN);
-                        syslog(LOG_ERR, "Closing non-privileged connection from %s:%d\n",
-                               addrstr, ntohs(clntaddr.sin_port));
-                        rc = close(cfd);
-                        if (rc)
-                                perror ("close un-privileged client failed");
-                        continue;
-                }
-
-                show_connection (cfd, clntaddr.sin_addr.s_addr);
-
-                PCFG_INIT(pcfg, NAL_CMD_REGISTER_PEER_FD);
-                pcfg.pcfg_nal = nal;
-                pcfg.pcfg_fd = cfd;
-                pcfg.pcfg_misc = SOCKNAL_CONN_NONE; /* == incoming connection */
-                
-                PORTAL_IOC_INIT(data);
-                data.ioc_pbuf1 = (char*)&pcfg;
-                data.ioc_plen1 = sizeof(pcfg);
-                
-                if (ioctl(pfd, IOC_PORTAL_NAL_CMD, &data) < 0) {
-                        perror("ioctl failed");
-                } else {
-                        printf("client registered\n");
-                }
-                rc = close(cfd);
-                if (rc)
-                        perror ("close failed");
-        }
-
-        closelog();
-        exit(0);
-
-}