Merge branch 'mirbsd'
[alioth/cvs.git] / vms / startserver.c
1 #include <socket.h>
2 #include <netdb.h>
3 #include <errno.h>
4
5 #include "config.h"
6
7 static char *cvs_server;
8 static char *command;
9
10 extern int trace;
11
12 void
13 vms_start_server (int *tofd, int *fromfd,
14                   char *client_user, char *server_user,
15                   char *server_host, char *server_cvsroot)
16 {
17   int fd, port;
18   char *portenv;
19   struct servent *sptr;
20
21   if (! (cvs_server = getenv ("CVS_SERVER")))
22       cvs_server = "cvs";
23   command = xmalloc (strlen (cvs_server)
24                      + strlen (server_cvsroot)
25                      + 50);
26   sprintf(command, "%s server", cvs_server);
27
28   portenv = getenv("CVS_RCMD_PORT");
29   if (portenv)
30       port = atoi(portenv);
31   else if ((sptr = getservbyname("shell", "tcp")) != NULL)
32       port = sptr->s_port;
33   else
34       port = 514; /* shell/tcp */
35
36   if(trace)
37     {
38     fprintf(stderr, "vms_start_server(): connecting to %s:%d\n",
39             server_host, port);
40     fprintf(stderr, "local_user = %s, remote_user = %s, CVSROOT = %s\n",
41             client_user, (server_user ? server_user : client_user),
42             server_cvsroot);
43     }
44
45   fd = rcmd(&server_host, port,
46             client_user,
47             (server_user ? server_user : client_user),
48             command, 0);
49
50   if (fd < 0)
51      error (1, errno, "cannot start server via rcmd()");
52
53   *tofd = fd;
54   *fromfd = fd;
55   free (command);
56 }