3 * This routine is part of the client library. It handles
4 * creating a connection to the moira server.
6 * Copyright (C) 1987-1998 by the Massachusetts Institute of Technology
7 * For copying and distribution information, please see the file
11 #include <mit-copyright.h>
13 #include <moira_site.h>
14 #include "mr_private.h"
24 static char *mr_server_host = 0;
27 * Open a connection to the mr server. Looks for the server name
28 * 1) passed as an argument, 2) in environment variable, 3) by hesiod
29 * 4) compiled in default (from moira_site.h).
32 int mr_connect(char *server)
34 char *p, **pp, *sbuf = NULL;
39 return MR_ALREADY_CONNECTED;
41 if (!server || (strlen(server) == 0))
42 server = getenv("MOIRASERVER");
45 if (!server || (strlen(server) == 0))
47 pp = hes_resolve("moira", "sloc");
53 if (!server || (strlen(server) == 0))
54 server = MOIRA_SERVER;
56 if (!strchr(server, ':'))
58 p = strchr(MOIRA_SERVER, ':');
60 sbuf = malloc(strlen(server) + strlen(p) + 2);
63 sprintf(sbuf, "%s:%s", server, p);
68 _mr_conn = start_server_connection(server, "");
71 if (connection_status(_mr_conn) == CON_STOPPED)
73 int status = connection_errno(_mr_conn);
75 status = MR_CANT_CONNECT;
81 * stash hostname for later use
85 sbuf = strdup(server);
86 mr_server_host = sbuf;
87 if ((p = strchr(mr_server_host, ':')))
89 mr_server_host = canonicalize_hostname(mr_server_host);
93 int mr_disconnect(void)
96 _mr_conn = sever_connection(_mr_conn);
102 int mr_host(char *host, int size)
106 /* If we are connected, mr_server_host points to a valid string. */
107 strncpy(host, mr_server_host, size);
115 struct mr_params *params = NULL;
116 struct mr_params *reply = NULL;
120 params->mr_version_no = sending_version_no;
121 params->mr_procno = MR_NOOP;
123 params->mr_argl = NULL;
124 params->mr_argv = NULL;
126 if ((status = mr_do_call(params, &reply)) == 0)
127 status = reply->mr_status;
129 mr_destroy_reply(reply);