*** empty log message ***
[arla.git] / appl / fs / fs_listcell.c
blob3f135c0d54bbeec2c947d2211ee54de150d27a0d
1 /*
2 * Copyright (c) 1995 - 2001 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * 3. Neither the name of the Institute nor the names of its contributors
18 * may be used to endorse or promote products derived from this software
19 * without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE.
34 #include "fs_local.h"
36 RCSID("$Id$");
38 /*
39 * List all the known cells, with servers iff printservers, resolving
40 * IP addresses to names iff resolve and printing suid status iff
41 * suid.
44 static int
45 afs_listcells (int printservers, int resolve, int suid)
47 struct in_addr addr;
48 int i, j;
49 char cellname[MAXSIZE];
50 uint32_t servers[8];
51 int ret;
52 unsigned max_servers = sizeof(servers)/sizeof(servers[0]);
54 for (i = 1;
55 (ret = fs_getcells (i, servers,
56 max_servers,
57 cellname, sizeof (cellname))) == 0;
58 ++i) {
59 printf ("%s", cellname);
61 if (printservers) {
62 printf (": ");
64 for (j = 0; j < max_servers && servers[j]; ++j) {
65 struct hostent *h = NULL;
66 addr.s_addr = servers[j];
67 if (resolve)
68 h = gethostbyaddr ((const char *) &addr,
69 sizeof(addr),
70 AF_INET);
71 if (h == NULL) {
72 printf (" %s", inet_ntoa (addr));
73 } else {
74 printf (" %s", h->h_name);
78 if (suid) {
79 uint32_t status;
81 ret = fs_getcellstatus (cellname, &status);
82 if (ret)
83 fserr (PROGNAME, ret, NULL);
84 else {
85 if (status & arla_CELLSTATUS_SETUID)
86 printf (", suid cell");
89 printf (".\n");
92 if (errno != EDOM)
93 fserr(PROGNAME, errno, NULL);
95 return 0;
98 int
99 listcells_cmd (int argc, char **argv)
101 int printhosts = 1;
102 int resolve = 1;
103 int printsuid = 0;
104 int optind = 0;
106 struct agetargs lcargs[] = {
107 {"servers", 's', aarg_negative_flag,
108 NULL,"do not print servers in cell", NULL},
109 {"resolve", 'r', aarg_negative_flag,
110 NULL,"do not resolve hostnames", NULL},
111 {"suid", 'p', aarg_flag,
112 NULL,"print if cell is suid", NULL },
113 {NULL, 0, aarg_end, NULL}},
114 *arg;
116 arg = lcargs;
117 arg->value = &printhosts; arg++;
118 arg->value = &resolve; arg++;
119 arg->value = &printsuid; arg++;
121 if (agetarg (lcargs, argc, argv, &optind, AARG_AFSSTYLE)) {
122 aarg_printusage(lcargs, "listcells", NULL, AARG_AFSSTYLE);
123 return 0;
126 printf ("%d %d %d\n", printhosts, resolve, printsuid);
128 afs_listcells (printhosts,resolve,printsuid);
130 return 0;
134 suidcells_cmd (int argc, char **argv)
136 afs_listcells (0, 0, 1);
138 return 0;