2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 #include <afsconfig.h>
11 #include <afs/param.h>
17 # include <sys/statfs.h>
20 #include <afs/dirpath.h>
24 #include <rx/rx_globals.h>
26 #include <afs/cellconfig.h>
29 #include <afs/afsint.h>
33 * \brief Get the appropriate type of ubik client structure out from the system.
36 ugen_ClientInit(int noAuthFlag, const char *confDir, char *cellName, afs_int32 sauth,
37 struct ubik_client **uclientp,
38 int (*secproc) (struct rx_securityClass *, afs_int32),
39 char *funcName, afs_int32 gen_rxkad_level,
40 afs_int32 maxservers, char *serviceid, afs_int32 deadtime,
41 afs_uint32 server, afs_uint32 port, afs_int32 usrvid)
43 afs_int32 code, secFlags, i;
45 struct afsconf_cell info;
46 struct afsconf_dir *tdir;
47 struct rx_securityClass *sc;
48 /* This must change if VLDB_MAXSERVERS becomes larger than MAXSERVERS */
49 static struct rx_connection *serverconns[MAXSERVERS];
54 fprintf(stderr, "%s: could not initialize rx.\n", funcName);
57 rx_SetRxDeadTime(deadtime);
59 secFlags = AFSCONF_SECOPTS_FALLBACK_NULL;
61 secFlags |= AFSCONF_SECOPTS_LOCALAUTH;
62 confdir = AFSDIR_SERVER_ETC_DIRPATH;
64 confdir = AFSDIR_CLIENT_ETC_DIRPATH;
68 secFlags |= AFSCONF_SECOPTS_NOAUTH;
71 tdir = afsconf_Open(confdir);
74 "%s: Could not process files in configuration directory (%s).\n",
80 cellName = tdir->cellName;
82 code = afsconf_GetCellInfo(tdir, cellName, serviceid, &info);
85 fprintf(stderr, "%s: can't find cell %s's hosts in %s/%s\n",
86 funcName, cellName, confdir, AFSDIR_CELLSERVDB_FILE);
89 code = afsconf_PickClientSecObj(tdir, secFlags, &info, cellName, &sc,
92 fprintf(stderr, "%s: can't create client security object", funcName);
95 if (scIndex == RX_SECIDX_NULL && !noAuthFlag) {
97 "%s: Could not get afs tokens, running unauthenticated.\n",
103 if (secproc) /* tell UV module about default authentication */
104 (*secproc) (sc, scIndex);
106 serverconns[0] = rx_NewConnection(server, port,
107 usrvid, sc, scIndex);
109 if (info.numServers > maxservers) {
111 "%s: info.numServers=%d (> maxservers=%d)\n",
112 funcName, info.numServers, maxservers);
115 for (i = 0; i < info.numServers; i++) {
116 if (!info.hostAddr[i].sin_port && port)
117 info.hostAddr[i].sin_port = port;
119 rx_NewConnection(info.hostAddr[i].sin_addr.s_addr,
120 info.hostAddr[i].sin_port, usrvid,
124 /* Are we just setting up connections, or is this really ubik stuff? */
127 code = ubik_ClientInit(serverconns, uclientp);
129 fprintf(stderr, "%s: ubik client init failed.\n", funcName);