ubik-call-sucks-20060704
[openafs.git] / src / libadmin / test / util.c
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
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
8  */
9
10 /*
11  * This file implements the util related funtions for afscp
12  */
13
14 #include <afsconfig.h>
15 #include <afs/param.h>
16
17 RCSID
18     ("$Header$");
19
20 #include "util.h"
21
22 int
23 DoUtilErrorTranslate(struct cmd_syndesc *as, char *arock)
24 {
25     typedef enum { ERROR_CODE } DoUtilErrorTranslate_parm_t;
26     afs_status_t st = 0;
27     int err = atoi(as->parms[ERROR_CODE].items->data);
28     const char *err_str = "unknown error";
29
30     if (util_AdminErrorCodeTranslate(err, 0, &err_str, &st)) {
31         printf("%d -> %s\n", err, err_str);
32     } else {
33         ERR_ST_EXT("util_AdminErrorCodeTranslate failed", st);
34     }
35
36     return 0;
37 }
38
39 int
40 DoUtilDatabaseServerList(struct cmd_syndesc *as, char *arock)
41 {
42     typedef enum { CELL_NAME } DoUtilDatabaseServerList_parm_t;
43     afs_status_t st = 0;
44     void *iter = NULL;
45     util_databaseServerEntry_t server;
46     const char *cell = as->parms[CELL_NAME].items->data;
47
48     if (util_DatabaseServerGetBegin(cell, &iter, &st)) {
49         printf("listing database servers in cell %s\n", cell);
50         while (util_DatabaseServerGetNext(iter, &server, &st)) {
51             struct in_addr ina;
52             ina.s_addr = htonl((unsigned int)server.serverAddress);
53             printf("%s %s\n", server.serverName, inet_ntoa(ina));
54         }
55         if (st != ADMITERATORDONE) {
56             ERR_ST_EXT("util_DatabaseServerGetNext", st);
57         }
58         if (!util_DatabaseServerGetDone(iter, &st)) {
59             ERR_ST_EXT("util_DatabaseServerGetDone", st);
60         }
61     } else {
62         ERR_ST_EXT("util_DatabaseServerGetBegin", st);
63     }
64
65     return 0;
66 }
67
68 int
69 DoUtilNameToAddress(struct cmd_syndesc *as, char *arock)
70 {
71     typedef enum { SERVER_NAME } DoUtilNameToAddress_parm_t;
72     afs_status_t st = 0;
73     const char *server = as->parms[SERVER_NAME].items->data;
74     int server_addr = 0;
75
76     if (util_AdminServerAddressGetFromName(server, &server_addr, &st)) {
77         struct in_addr ina;
78         ina.s_addr = htonl((unsigned int)server_addr);
79         printf("address is %s\n", inet_ntoa(ina));
80     } else {
81         ERR_ST_EXT("util_AdminServerAddressGetFromName", st);
82     }
83     return 0;
84 }
85
86 void
87 SetupUtilAdminCmd(void)
88 {
89     struct cmd_syndesc *ts;
90
91     ts = cmd_CreateSyntax("UtilErrorTranslate", DoUtilErrorTranslate, 0,
92                           "translate an error code");
93     cmd_AddParm(ts, "-error", CMD_SINGLE, CMD_REQUIRED, "error code");
94     SetupCommonCmdArgs(ts);
95
96     ts = cmd_CreateSyntax("UtilDatabaseServerList", DoUtilDatabaseServerList,
97                           0, "list the database servers in a cell");
98     cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_REQUIRED, "cell to list");
99     SetupCommonCmdArgs(ts);
100
101     ts = cmd_CreateSyntax("UtilNameToAddress", DoUtilNameToAddress, 0,
102                           "translate a host name to an address");
103     cmd_AddParm(ts, "-host", CMD_SINGLE, CMD_REQUIRED, "host name");
104     SetupCommonCmdArgs(ts);
105 }