1 #include <socket.h>
2 #include <netdb.h>
3 #include <errno.h>
4
5 #include "options.h"
6
7 static char *cvs_server;
8 static char *command;
9
10 extern int trace;
11
12 void
vms_start_server(int * tofd,int * fromfd,char * client_user,char * server_user,char * server_host,char * server_cvsroot)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 }
57