cmd: avoid piggy-backing flags in the help string
[openafs.git] / src / kauth / admin_tools.c
index f22f62f..14706e9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Copyright 2000, International Business Machines Corporation and others.
  * All Rights Reserved.
- * 
+ *
  * This software has been released under the terms of the IBM Public
  * License.  For details, see the LICENSE file in the top-level source
  * directory or online at http://www.openafs.org/dl/license10.html
 
 #include <afsconfig.h>
 #include <afs/param.h>
+#include <afs/stds.h>
 
-RCSID
-    ("$Header$");
+#include <roken.h>
+#include <afs/opr.h>
+#include <afs/opr_assert.h>
 
-#include <afs/stds.h>
-#include <afs/debug.h>
 #include <ctype.h>
-#include <string.h>
 
-    /* These two needed for rxgen output to work */
-#include <sys/types.h>
-#include <rx/xdr.h>
+#include <hcrypto/des.h>
+#include <hcrypto/ui.h>
 
-#include <stdio.h>
+#include <rx/xdr.h>
 #include <rx/rx.h>
+#include <rx/rxkad.h>
+#include <rx/rxkad_convert.h>
 #include <lock.h>
+#define UBIK_LEGACY_CALLITER 1
 #include <ubik.h>
-#ifndef AFS_NT40_ENV
-#include <pwd.h>
-#endif
 #include <afs/auth.h>
 #include <afs/cellconfig.h>
 #include <afs/cmd.h>
@@ -41,8 +39,10 @@ RCSID
 #include <afs/afsutil.h>
 
 #include "kauth.h"
+#include "kauth_internal.h"
 #include "kautils.h"
 #include "kaport.h"
+#include "kkids.h"
 
 #define CMD_PARSER_AMBIG_FIX 1 /* allow ambiguous aliases */
 
@@ -57,7 +57,7 @@ static char myName[510];      /* almost like whoami save with path and without : */
 static int finished;
 static int zero_argc;
 static char **zero_argv;
-afs_uint32 ka_islocked();
+afs_uint32 ka_islocked(char *, char *, afs_uint32 *);
 
 afs_int32
 DefaultCell(void)
@@ -68,7 +68,7 @@ DefaultCell(void)
        return 0;
     code = ka_ExpandCell(0, cell, 0 /*local */ );
     if (code) {
-       com_err(whoami, code, "Can't expand cell name");
+       afs_com_err(whoami, code, "Can't expand cell name");
     }
     return code;
 }
@@ -88,16 +88,16 @@ DumpUser(char *user, char *arock, int showadmin, int showkey, char *inst)
 
     code = ka_ParseLoginName(user, name, instance, 0);
     if (code) {
-       com_err(whoami, code, "parsing user's name '%s'", user);
+       afs_com_err(whoami, code, "parsing user's name '%s'", user);
        return KABADCMD;
     }
 
     if (!inst)
        inst = instance;
     code =
-       ubik_Call(KAM_GetEntry, conn, 0, name, inst, KAMAJORVERSION, &tentry);
+       ubik_KAM_GetEntry(conn, 0, name, inst, KAMAJORVERSION, &tentry);
     if (code) {
-       com_err(whoami, code, "getting information for %s.%s", name, inst);
+       afs_com_err(whoami, code, "getting information for %s.%s", name, inst);
        return code;
     }
     if (tentry.minor_version != KAMINORVERSION)
@@ -234,7 +234,7 @@ DumpUser(char *user, char *arock, int showadmin, int showkey, char *inst)
 }
 
 int
-ListUsers(struct cmd_syndesc *as, char *arock)
+ListUsers(struct cmd_syndesc *as, void *arock)
 {
     struct kaident name;
     afs_int32 index;
@@ -251,10 +251,10 @@ ListUsers(struct cmd_syndesc *as, char *arock)
     }
     for (index = 0; 1; index = next_index) {
        code =
-           ubik_Call(KAM_ListEntry, conn, 0, index, &next_index, &count,
+           ubik_KAM_ListEntry(conn, 0, index, &next_index, &count,
                      &name);
        if (code) {
-           com_err(whoami, code, "calling KAM_ListEntry");
+           afs_com_err(whoami, code, "calling KAM_ListEntry");
            break;
        }
        if (!next_index)
@@ -273,7 +273,7 @@ ListUsers(struct cmd_syndesc *as, char *arock)
 
 
 int
-ExamineUser(struct cmd_syndesc *as, char *arock)
+ExamineUser(struct cmd_syndesc *as, void *arock)
 {
     int showkey = (as->parms[1].items != NULL);
     return DumpUser(as->parms[0].items->data, arock, 0, showkey, NULL);
@@ -300,7 +300,7 @@ handle_errors(int code,             /* error code to handle */
        }
     }
 
-    printf(" : [%s] %s", error_table_name(code), error_message(code));
+    printf(" : [%s] %s", afs_error_table_name(code), afs_error_message(code));
     switch (code) {
     case UNOQUORUM:
        printf(", wait one second\n");
@@ -318,7 +318,7 @@ handle_errors(int code,             /* error code to handle */
 }
 
 int
-CreateUser(struct cmd_syndesc *as, char *arock)
+CreateUser(struct cmd_syndesc *as, void *arock)
 {
     int code;
     char name[MAXKTCNAMELEN];
@@ -331,14 +331,15 @@ CreateUser(struct cmd_syndesc *as, char *arock)
 
     code = ka_ParseLoginName(as->parms[0].items->data, name, instance, 0);
     if (code) {
-       com_err(whoami, code, "parsing user's name '%s'",
+       afs_com_err(whoami, code, "parsing user's name '%s'",
                as->parms[0].items->data);
        return KABADCMD;
     }
     ka_StringToKey(as->parms[1].items->data, cell, &key);
 
     do {
-       code = ubik_Call(KAM_CreateUser, conn, 0, name, instance, key);
+       code = ubik_KAM_CreateUser(conn, 0, name, instance,
+                                  *ktc_to_EncryptionKey(&key));
        if (!code)
            return 0;
        ka_PrintUserID("Creating user ", name, instance, " ");
@@ -348,7 +349,7 @@ CreateUser(struct cmd_syndesc *as, char *arock)
 }
 
 int
-DeleteUser(struct cmd_syndesc *as, char *arock)
+DeleteUser(struct cmd_syndesc *as, void *arock)
 {
     int code;
     char name[MAXKTCNAMELEN];
@@ -359,13 +360,13 @@ DeleteUser(struct cmd_syndesc *as, char *arock)
     OKlist[0].code = 0;
     code = ka_ParseLoginName(as->parms[0].items->data, name, instance, 0);
     if (code) {
-       com_err(whoami, code, "parsing user's name '%s'",
+       afs_com_err(whoami, code, "parsing user's name '%s'",
                as->parms[0].items->data);
        return KABADCMD;
     }
 
     do {
-       code = ubik_Call(KAM_DeleteUser, conn, 0, name, instance);
+       code = ubik_KAM_DeleteUser(conn, 0, name, instance);
        if (!code)
            return 0;
        ka_PrintUserID("Deleting user ", name, instance, " ");
@@ -409,11 +410,11 @@ parse_flags(char *name, char *inst, char *str, afs_int32 * flags)
     str = lcstring(bitspec, str, sizeof(bitspec));
     if (isdigit(*str)) {
        if (strncmp(str, "0x", 2) == 0) /* 0x => hex */
-           sscanf(str, "0x%lx", &f);
+           sscanf(str, "0x%lx", (long unsigned int *) &f);
        else if (*str == '0')   /* assume octal */
-           sscanf(str, "%lo", &f);
+           sscanf(str, "%lo", (long unsigned int *) &f);
        else                    /* just assume hex */
-           sscanf(str, "%lx", &f);
+           sscanf(str, "%lx", (long unsigned int *) &f);
     } else {
        if (*str == '=') {
            str++;
@@ -428,10 +429,10 @@ parse_flags(char *name, char *inst, char *str, afs_int32 * flags)
            } else
                addop = 1;
            code =
-               ubik_Call(KAM_GetEntry, conn, 0, name, inst, KAMAJORVERSION,
+               ubik_KAM_GetEntry(conn, 0, name, inst, KAMAJORVERSION,
                          &tentry);
            if (code) {
-               com_err(whoami, code,
+               afs_com_err(whoami, code,
                        "could get current flag value for %s.%s", name, inst);
                return -1;
            }
@@ -517,7 +518,7 @@ ka_islocked(char *name, char *instance, afs_uint32 * when)
                          0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        if (code) {
            if (seriouserror(code))
-               com_err(whoami, code, "");
+               afs_com_err(whoami, code, NULL);
        } else if (tempwhen) {  /* user is locked */
            if (!*when || tempwhen < *when) {
                *when = tempwhen;
@@ -532,17 +533,17 @@ ka_islocked(char *name, char *instance, afs_uint32 * when)
 }
 
 int
-Unlock(struct cmd_syndesc *as, char *arock)
+Unlock(struct cmd_syndesc *as, void *arock)
 {
     afs_int32 code, rcode = 0;
     afs_int32 count;
-    char *server;
+    afs_int32 server;
     char name[MAXKTCNAMELEN];
     char instance[MAXKTCNAMELEN];
 
     code = ka_ParseLoginName(as->parms[0].items->data, name, instance, 0);
     if (code) {
-       com_err(whoami, code, "parsing user's name '%s'",
+       afs_com_err(whoami, code, "parsing user's name '%s'",
                as->parms[0].items->data);
        return KABADCMD;
     }
@@ -552,14 +553,16 @@ Unlock(struct cmd_syndesc *as, char *arock)
        code = ubik_CallIter(KAM_Unlock, conn, 0, &count, (long) name, (long) instance,
                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
        if (code && (code != UNOSERVERS)) {
-           server = "<unknown>";
+           server = 0;
            if (conn && conn->conns[count - 1]
-               && conn->conns[count - 1]->peer) {
-               server = rx_AddrStringOf(conn->conns[count - 1]->peer);
+               && rx_PeerOf(conn->conns[count - 1])) {
+               server = rx_HostOf(rx_PeerOf(conn->conns[count - 1]));
            }
-           com_err(whoami, code,
-                   "so %s.%s may still be locked (on server %s)",
-                   name, instance, server);
+           afs_com_err(whoami, code,
+                   "so %s.%s may still be locked (on server %d.%d.%d.%d)",
+                   name, instance, ((server >> 24) & 0xFF),
+                   ((server >> 16) & 0xFF), ((server >> 8) & 0xFF),
+                   (server & 0xFF));
 
            if (!rcode) {
                rcode = code;
@@ -571,11 +574,12 @@ Unlock(struct cmd_syndesc *as, char *arock)
 }
 
 int
-SetFields(struct cmd_syndesc *as, char *arock)
+SetFields(struct cmd_syndesc *as, void *arock)
 {
     int code;
     char name[MAXKTCNAMELEN];
     char instance[MAXKTCNAMELEN];
+    char *end;
     afs_int32 flags = 0;
     Date expiration = 0;
     afs_int32 lifetime = 0;
@@ -587,7 +591,7 @@ SetFields(struct cmd_syndesc *as, char *arock)
 
     code = ka_ParseLoginName(as->parms[0].items->data, name, instance, 0);
     if (code) {
-       com_err(whoami, code, "parsing user's name '%s'",
+       afs_com_err(whoami, code, "parsing user's name '%s'",
                as->parms[0].items->data);
        return KABADCMD;
     }
@@ -632,9 +636,8 @@ SetFields(struct cmd_syndesc *as, char *arock)
     for (i = 0; i < 4; misc_auth_bytes[i++] = 0);
 
     if (as->parms[4].items) {
-       if (util_isint(as->parms[4].items->data))
-           pwexpiry = atoi(as->parms[4].items->data);
-       else {
+       pwexpiry = strtol(as->parms[4].items->data, &end, 10);
+       if (*end != '\0') {
            fprintf(stderr,
                    "Password lifetime specified must be a non-negative decimal integer.\n");
            pwexpiry = -1;
@@ -644,9 +647,9 @@ SetFields(struct cmd_syndesc *as, char *arock)
                    "Password lifetime range must be [0..254] days.\n");
            fprintf(stderr, "Zero represents an unlimited lifetime.\n");
            return KABADCMD;
-       } else {
-           misc_auth_bytes[0] = pwexpiry + 1;
        }
+
+       misc_auth_bytes[0] = pwexpiry + 1;
     }
 
     if (as->parms[5].items) {
@@ -667,15 +670,14 @@ SetFields(struct cmd_syndesc *as, char *arock)
     if (as->parms[6].items) {
        int nfailures;
 
+        nfailures = strtol(as->parms[6].items->data, &end, 10);
 
-       if (util_isint(as->parms[6].items->data)
-           && ((nfailures = atoi(as->parms[6].items->data)) < 255)) {
-           misc_auth_bytes[2] = nfailures + 1;
-       } else {
+       if (*end != '\0' || nfailures < 0 || nfailures > 254) {
            fprintf(stderr, "Failure limit must be in [0..254].\n");
            fprintf(stderr, "Zero represents unlimited login attempts.\n");
            return KABADCMD;
        }
+       misc_auth_bytes[2] = nfailures + 1;
     }
 
     if (as->parms[7].items) {
@@ -719,7 +721,7 @@ SetFields(struct cmd_syndesc *as, char *arock)
 
     if (was_spare || flags || expiration || lifetime || (maxAssociates >= 0))
        code =
-           ubik_Call(KAM_SetFields, conn, 0, name, instance, flags,
+           ubik_KAM_SetFields(conn, 0, name, instance, flags,
                      expiration, lifetime, maxAssociates, was_spare,
                      /* spare */ 0);
     else {
@@ -727,13 +729,13 @@ SetFields(struct cmd_syndesc *as, char *arock)
        return KABADCMD;
     }
     if (code)
-       com_err(whoami, code, "calling KAM_SetFields for %s.%s", name,
+       afs_com_err(whoami, code, "calling KAM_SetFields for %s.%s", name,
                instance);
     return code;
 }
 
 int
-StringToKey(struct cmd_syndesc *as, char *arock)
+StringToKey(struct cmd_syndesc *as, void *arock)
 {
     afs_int32 code;
     char realm[MAXKTCREALMLEN];
@@ -742,13 +744,13 @@ StringToKey(struct cmd_syndesc *as, char *arock)
     if (as->parms[1].items) {
        code = ka_ExpandCell(as->parms[1].items->data, realm, 0 /*local */ );
        if (code) {
-           com_err(whoami, code,
+           afs_com_err(whoami, code,
                    "expanding %s as cell name, attempting to continue",
                    as->parms[1].items->data);
        }
        ucstring(realm, realm, sizeof(realm));
     } else {
-       if (code = DefaultCell())
+       if ((code = DefaultCell()))
            return code;
        ucstring(realm, cell, sizeof(realm));
     }
@@ -759,7 +761,7 @@ StringToKey(struct cmd_syndesc *as, char *arock)
     ka_PrintBytes((char *)&key, sizeof(key));
     printf("'.\n");
 
-    des_string_to_key(as->parms[0].items->data, &key);
+    DES_string_to_key(as->parms[0].items->data, ktc_to_cblockptr(&key));
 
     printf("Converting %s with the DES string to key yields key='",
           as->parms[0].items->data);
@@ -770,7 +772,7 @@ StringToKey(struct cmd_syndesc *as, char *arock)
 }
 
 int
-SetPassword(struct cmd_syndesc *as, char *arock)
+SetPassword(struct cmd_syndesc *as, void *arock)
 {
     int code;
     char name[MAXKTCNAMELEN];
@@ -781,7 +783,7 @@ SetPassword(struct cmd_syndesc *as, char *arock)
 
     code = ka_ParseLoginName(as->parms[0].items->data, name, instance, realm);
     if (code) {
-       com_err(whoami, code, "parsing user's name '%s'",
+       afs_com_err(whoami, code, "parsing user's name '%s'",
                as->parms[0].items->data);
        return KABADCMD;
     }
@@ -816,13 +818,10 @@ SetPassword(struct cmd_syndesc *as, char *arock)
     if (as->parms[3].items)
        sscanf(as->parms[3].items->data, "%d", &kvno);
 
-#if defined(AFS_S390_LINUX20_ENV) && !defined(AFS_S390X_LINUX20_ENV)
-    code = ubik_Call(KAM_SetPassword, conn, 0, name, instance, kvno, 0, key);
-#else
-    code = ubik_Call(KAM_SetPassword, conn, 0, name, instance, kvno, key);
-#endif
+    code = ubik_KAM_SetPassword(conn, 0, name, instance, kvno,
+                               *ktc_to_EncryptionKey(&key));
     if (code)
-       com_err(whoami, code, "so can't set password for %s.%s", name,
+       afs_com_err(whoami, code, "so can't set password for %s.%s", name,
                instance);
     return code;
 }
@@ -847,7 +846,7 @@ PrintName(char *name, char *inst, char *acell, int buflen, char *buf)
     if (left) {
       bad_name:
        code = KABADNAME;
-       com_err(whoami, code, "PrintName: principal name was '%s'.'%s'@'%s'",
+       afs_com_err(whoami, code, "PrintName: principal name was '%s'.'%s'@'%s'",
                name, inst, acell);
        return code;
     }
@@ -876,7 +875,6 @@ PrintName(char *name, char *inst, char *acell, int buflen, char *buf)
            left = ka_ConvertBytes(buf + nlen, buflen - nlen, acell, len);
            if (left)
                goto bad_name;
-           nlen += len;
        }
     }
     return 0;
@@ -917,7 +915,7 @@ ListTicket(struct ktc_principal *server, int verbose)
     /* get the ticket info itself */
     code = ktc_GetToken(server, &token, sizeof(token), &client);
     if (code) {
-       com_err(whoami, code, "failed to get token info for server %s",
+       afs_com_err(whoami, code, "failed to get token info for server %s",
                PrintedPrincipal(server));
        return code;
     }
@@ -961,8 +959,8 @@ ListTicket(struct ktc_principal *server, int verbose)
     return 0;
 }
 
-static
-GetTicket(struct cmd_syndesc *as, char *arock)
+static int
+GetTicket(struct cmd_syndesc *as, void *arock)
 {
     int code;
     struct ktc_principal server;
@@ -978,18 +976,18 @@ GetTicket(struct cmd_syndesc *as, char *arock)
        ka_ParseLoginName(as->parms[0].items->data, server.name,
                          server.instance, server.cell);
     if (code) {
-       com_err(whoami, code, "parsing user's name '%s'",
+       afs_com_err(whoami, code, "parsing user's name '%s'",
                as->parms[0].items->data);
        return KABADCMD;
     }
     if (server.cell[0] == 0) {
-       if (code = DefaultCell())
+       if ((code = DefaultCell()))
            return code;
        strcpy(server.cell, cell);
     } else {
        code = ka_ExpandCell(server.cell, server.cell, 0 /*local */ );
        if (code) {
-           com_err(whoami, code, "Can't expand cell name");
+           afs_com_err(whoami, code, "Can't expand cell name");
            return code;
        }
     }
@@ -999,7 +997,7 @@ GetTicket(struct cmd_syndesc *as, char *arock)
        ka_GetServerToken(server.name, server.instance, server.cell, life,
                          &token, /*new */ 1, /*dosetpag */ 0);
     if (code)
-       com_err(whoami, code, "getting ticket for %s",
+       afs_com_err(whoami, code, "getting ticket for %s",
                PrintedPrincipal(&server));
     else {
        code = ListTicket(&server, /*verbose */ 1);
@@ -1007,8 +1005,8 @@ GetTicket(struct cmd_syndesc *as, char *arock)
     return code;
 }
 
-static
-GetPassword(struct cmd_syndesc *as, char *arock)
+static int
+GetPassword(struct cmd_syndesc *as, void *arock)
 {
     int code;
     char name[MAXKTCNAMELEN];
@@ -1019,7 +1017,7 @@ GetPassword(struct cmd_syndesc *as, char *arock)
     code = ka_ParseLoginName(as->parms[0].items->data, name, 0, 0);
     if (code) {
       abort:
-       com_err(whoami, code,
+       afs_com_err(whoami, code,
                "getting %s's password via loopback connection to GetPassword",
                name);
        /* if we got a timeout, print a clarification, too */
@@ -1039,7 +1037,7 @@ GetPassword(struct cmd_syndesc *as, char *arock)
        if (code)
            goto abort;
        sc = rxnull_NewClientSecurityObject();
-       si = RX_SCINDEX_NULL;
+       si = RX_SECIDX_NULL;
        conns[0] =
            rx_NewConnection(htonl(INADDR_LOOPBACK), htons(AFSCONF_KAUTHPORT),
                             KA_MAINTENANCE_SERVICE, sc, si);
@@ -1048,7 +1046,8 @@ GetPassword(struct cmd_syndesc *as, char *arock)
        if (code)
            goto abort;
     }
-    code = ubik_Call(KAM_GetPassword, lpbkConn, 0, name, &key);
+    code = ubik_KAM_GetPassword(lpbkConn, 0, name,
+                               ktc_to_EncryptionKey(&key));
     /* Lets close down the ubik_Client connection now */
     ubik_ClientDestroy(lpbkConn);
     if (code)
@@ -1060,21 +1059,21 @@ GetPassword(struct cmd_syndesc *as, char *arock)
 }
 
 int
-GetRandomKey(struct cmd_syndesc *as, char *arock)
+GetRandomKey(struct cmd_syndesc *as, void *arock)
 {
     int code;
     struct ktc_encryptionKey key;
 
-    code = ubik_Call(KAM_GetRandomKey, conn, 0, &key);
+    code = ubik_KAM_GetRandomKey(conn, 0, ktc_to_EncryptionKey(&key));
     if (code)
-       com_err(whoami, code, "so can't get random key");
+       afs_com_err(whoami, code, "so can't get random key");
     else {
        int i;
        printf("Key: ");
        ka_PrintBytes((char *)&key, sizeof(key));
        printf(" (");
        for (i = 0; i < sizeof(key); i++) {
-           printf("%0.2x", ((char *)&key)[i] & 0xff);
+           printf("%.2x", ((char *)&key)[i] & 0xff);
            if (i == 3)
                printf(" ");
            else if (i != 7)
@@ -1086,7 +1085,7 @@ GetRandomKey(struct cmd_syndesc *as, char *arock)
 }
 
 int
-Statistics(struct cmd_syndesc *as, char *arock)
+Statistics(struct cmd_syndesc *as, void *arock)
 {
     int code;
     kasstats statics;
@@ -1095,7 +1094,7 @@ Statistics(struct cmd_syndesc *as, char *arock)
     char bob[KA_TIMESTR_LEN];
 
     code =
-       ubik_Call(KAM_GetStats, conn, 0, KAMAJORVERSION, &admins, &statics,
+       ubik_KAM_GetStats(conn, 0, KAMAJORVERSION, &admins, &statics,
                  &dynamics);
     if (code) {
        printf("call to GetStats failed: %s\n", ka_ErrorString(code));
@@ -1109,7 +1108,8 @@ Statistics(struct cmd_syndesc *as, char *arock)
     printf("Hash table utilization = %f%%\n",
           (double)dynamics.hashTableUtilization / 100.0);
     ka_timestr(dynamics.start_time, bob, KA_TIMESTR_LEN);
-    printf("From host %lx started at %s:\n", dynamics.host, bob);
+    printf("From host %lx started at %s:\n",
+          afs_printable_uint32_lu(dynamics.host), bob);
 
 #define print_stat(name) if (dynamics.name.requests) printf ("  of %d requests for %s, %d were aborted.\n", dynamics.name.requests, # name, dynamics.name.aborts)
     print_stat(Authenticate);
@@ -1139,7 +1139,7 @@ Statistics(struct cmd_syndesc *as, char *arock)
 }
 
 int
-DebugInfo(struct cmd_syndesc *as, char *arock)
+DebugInfo(struct cmd_syndesc *as, void *arock)
 {
     int code;
     struct ka_debugInfo info;
@@ -1157,11 +1157,11 @@ DebugInfo(struct cmd_syndesc *as, char *arock)
        if (code) {
            struct afsconf_cell cellinfo;
 
-           com_err(whoami, code, "couldn't find host %s in cell %s",
+           afs_com_err(whoami, code, "couldn't find host %s in cell %s",
                    as->parms[0].items->data, cell);
            code = ka_GetServers(cell, &cellinfo);
            if (code)
-               com_err(whoami, code, "getting servers in cell %s", cell);
+               afs_com_err(whoami, code, "getting servers in cell %s", cell);
            else {
                printf("Servers in cell %s, are:\n", cell);
                for (i = 0; i < cellinfo.numServers; i++)
@@ -1169,13 +1169,13 @@ DebugInfo(struct cmd_syndesc *as, char *arock)
            }
            return code;
        }
-       code = ubik_Call(KAM_Debug, iConn, 0, KAMAJORVERSION, 0, &info);
+       code = ubik_KAM_Debug(iConn, 0, KAMAJORVERSION, 0, &info);
        ubik_ClientDestroy(iConn);
     } else
-       code = ubik_Call(KAM_Debug, conn, 0, KAMAJORVERSION, 0, &info);
+       code = ubik_KAM_Debug(conn, 0, KAMAJORVERSION, 0, &info);
 
     if (code) {
-       com_err(whoami, code, "call to Debug failed");
+       afs_com_err(whoami, code, "call to Debug failed");
        return code;
     }
     now = time(0);
@@ -1199,7 +1199,8 @@ DebugInfo(struct cmd_syndesc *as, char *arock)
             timeOffset, now - start);
     }
     ka_timestr(info.startTime, bob, KA_TIMESTR_LEN);
-    printf("From host %lx started %sat %s:\n", info.host,
+    printf("From host %lx started %sat %s:\n",
+          afs_printable_uint32_lu(info.host),
           (info.noAuth ? "w/o authorization " : ""), bob);
     ka_timestr(info.lastTrans, bob, KA_TIMESTR_LEN);
     printf("Last trans was %s at %s\n", info.lastOperation, bob);
@@ -1213,8 +1214,9 @@ DebugInfo(struct cmd_syndesc *as, char *arock)
     printf("Next autoCPW at %s or in %d updates.\n", bob,
           info.updatesRemaining);
     if (info.cheader_lock || info.keycache_lock)
-       printf("locks: cheader %08lx, keycache %08lx\n", info.cheader_lock,
-              info.keycache_lock);
+       printf("locks: cheader %08lx, keycache %08lx\n",
+               afs_printable_uint32_lu(info.cheader_lock),
+               afs_printable_uint32_lu(info.keycache_lock));
     printf("Last authentication for %s, last admin user was %s\n",
           info.lastAuth, info.lastAdmin);
     printf("Last TGS op was a %s ticket was for %s\n", info.lastTGSServer,
@@ -1235,27 +1237,27 @@ DebugInfo(struct cmd_syndesc *as, char *arock)
 }
 
 int
-Interactive(struct cmd_syndesc *as, char *arock)
+Interactive(struct cmd_syndesc *as, void *arock)
 {
     finished = 0;
     return 0;
 }
 
 int
-Quit(struct cmd_syndesc *as, char *arock)
+Quit(struct cmd_syndesc *as, void *arock)
 {
     finished = 1;
     return 0;
 }
 
 int
-MyAfterProc(struct cmd_syndesc *as)
+MyAfterProc(struct cmd_syndesc *as, void *arock)
 {
     if (!strcmp(as->name, "help"))
        return 0;
 
     /* Determine if we need to destory the ubik connection.
-     * Closing it avoids resends of packets. 
+     * Closing it avoids resends of packets.
      */
     if (conn) {
        ubik_ClientDestroy(conn);
@@ -1269,21 +1271,21 @@ int init = 0, noauth;
 char name[MAXKTCNAMELEN];
 char instance[MAXKTCNAMELEN];
 char newCell[MAXKTCREALMLEN];
-afs_int32 serverList[MAXSERVERS];
+afs_uint32 serverList[MAXSERVERS];
 
 int
-NoAuth(struct cmd_syndesc *as, char *arock)
+NoAuth(struct cmd_syndesc *as, void *arock)
 {
     noauth = 1;
     return 0;
 }
 
 static int
-MyBeforeProc(struct cmd_syndesc *as, char *arock)
+MyBeforeProc(struct cmd_syndesc *as, void *arock)
 {
-    extern struct passwd *getpwuid();
     struct ktc_encryptionKey key;
-    struct ktc_principal auth_server, auth_token, client;
+    struct ktc_principal auth_server, client;
+    struct ktc_token auth_token;
     char realm[MAXKTCREALMLEN];
 
     struct ktc_token token, *pToken;
@@ -1315,7 +1317,7 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
 
     /* MyAfterProc() destroys the conn, but just to be sure */
     if (conn) {
-       code = ubik_ClientDestroy(conn);
+       ubik_ClientDestroy(conn);
        conn = 0;
     }
 
@@ -1330,7 +1332,7 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
                ka_ParseLoginName(as->parms[12].items->data, name, instance,
                                  newCell);
            if (code) {
-               com_err(whoami, code, "parsing user's name '%s'",
+               afs_com_err(whoami, code, "parsing user's name '%s'",
                        as->parms[12].items->data);
                return code;
            }
@@ -1361,7 +1363,7 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
        }
        code = ka_ExpandCell(newCell, newCell, 0 /*local */ );
        if (code) {
-           com_err(whoami, code, "Can't expand cell name");
+           afs_com_err(whoami, code, "Can't expand cell name");
            return code;
        }
        strcpy(cell, newCell);
@@ -1376,7 +1378,7 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
                ap[i] = ip->data;
            code = ubik_ParseClientList(i, ap, serverList);
            if (code) {
-               com_err(whoami, code, "could not parse server list");
+               afs_com_err(whoami, code, "could not parse server list");
                return code;
            }
            ka_ExplicitCell(cell, serverList);
@@ -1404,13 +1406,13 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
                    sprintf(msg, "Administrator's (%s) Password: ", name);
                else
                    sprintf(msg, "Password for %s: ", name);
-               code = read_pw_string(passwd, sizeof(passwd), msg, 0);
+               code = UI_UTIL_read_pw_string(passwd, sizeof(passwd), msg, 0);
                if (code)
                    code = KAREADPW;
                else if (strlen(passwd) == 0)
                    code = KANULLPASSWORD;
                if (code) {
-                   com_err(whoami, code, "reading password");
+                   afs_com_err(whoami, code, "reading password");
                    return code;
                }
            }
@@ -1419,7 +1421,7 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
                ka_GetAdminToken(name, instance, cell, &key, KA_SIXHOURS,
                                 &token, 0 /* !new */ );
            if (code == KABADREQUEST) {
-               des_string_to_key(passwd, &key);
+               DES_string_to_key(passwd, ktc_to_cblockptr(&key));
                code =
                    ka_GetAdminToken(name, instance, cell, &key, KA_SIXHOURS,
                                     &token, 0 /* !new */ );
@@ -1451,7 +1453,7 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
                    reason = "Authentication Server was unavailable";
                    break;
                default:
-                   reason = (char *)error_message(code);
+                   reason = (char *)afs_error_message(code);
                }
                fprintf(stderr,
                        "%s: Auth. as %s to AuthServer failed: %s\nProceeding w/o authentication\n",
@@ -1472,7 +1474,7 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
                                    /*Don't need pwd expiration info here */
                    );
                if (acode && (acode != code))   /* codes are usually the same */
-                   com_err(whoami, code,
+                   afs_com_err(whoami, code,
                            "getting Authentication token for %s",
                            PrintedName(name, instance, cell));
            }
@@ -1483,15 +1485,15 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
     pToken = ((token.ticketLen == 0) ? 0 : &token);
     code = ka_AuthServerConn(cell, KA_MAINTENANCE_SERVICE, pToken, &conn);
     if (code && pToken) {
-       com_err(whoami, code,
+       afs_com_err(whoami, code,
                "connecting to AuthServer: now trying w/o authentication");
        code = ka_AuthServerConn(cell, KA_MAINTENANCE_SERVICE, 0, &conn);
        if (code)
-           com_err(whoami, code,
+           afs_com_err(whoami, code,
                    "making unauthenticated connection to AuthServer");
     }
     if (code) {
-       com_err(whoami, code,
+       afs_com_err(whoami, code,
                "Couldn't establish connection to Authentication Server");
        return code;
     }
@@ -1510,19 +1512,18 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
 
                    strcpy(msg, p + 1);
                    strcat(msg, ": ");
-                   code = read_pw_string(password, sizeof(password), msg, 1);
+                   code = UI_UTIL_read_pw_string(password, sizeof(password), msg, 1);
                    if (code)
                        code = KAREADPW;
                    else if (strlen(password) == 0)
                        code = KANULLPASSWORD;
                    if (code) {
-                       com_err(whoami, code, "prompting for %s", p + 1);
+                       afs_com_err(whoami, code, "prompting for %s", p + 1);
                        return code;
                    }
-                   ip = (struct cmd_item *)malloc(sizeof(struct cmd_item));
-                   ip->data = (char *)malloc(strlen(password) + 1);
+                   ip = malloc(sizeof(struct cmd_item));
+                   ip->data = strdup(password);
                    ip->next = 0;
-                   strcpy(ip->data, password);
                    as->parms[i].items = ip;
                }
            }
@@ -1536,8 +1537,8 @@ MyBeforeProc(struct cmd_syndesc *as, char *arock)
 
 /* These are some helpful command that deal with the cache managers tokens. */
 
-static
-ForgetTicket(struct cmd_syndesc *as, char *arock)
+static int
+ForgetTicket(struct cmd_syndesc *as, void *arock)
 {
     afs_int32 code;
 
@@ -1550,7 +1551,7 @@ ForgetTicket(struct cmd_syndesc *as, char *arock)
            ka_ParseLoginName(name, server.name, server.instance,
                              server.cell);
        if (code) {
-           com_err(whoami, code, "couldn't interpret name '%s'", name);
+           afs_com_err(whoami, code, "couldn't interpret name '%s'", name);
            return code;
        }
        if (server.cell[0] == 0) {
@@ -1560,13 +1561,13 @@ ForgetTicket(struct cmd_syndesc *as, char *arock)
        } else {
            code = ka_ExpandCell(server.cell, server.cell, 0 /*local */ );
            if (code) {
-               com_err(whoami, code, "Can't expand cell name");
+               afs_com_err(whoami, code, "Can't expand cell name");
                return code;
            }
        }
        code = ktc_ForgetToken(&server);
        if (code) {
-           com_err(whoami, code, "couldn't remove tokens for %s",
+           afs_com_err(whoami, code, "couldn't remove tokens for %s",
                    PrintedPrincipal(&server));
            return code;
        }
@@ -1577,21 +1578,21 @@ ForgetTicket(struct cmd_syndesc *as, char *arock)
        }
        code = ktc_ForgetAllTokens();
        if (code) {
-           com_err(whoami, code, "couldn't delete all tokens");
+           afs_com_err(whoami, code, "couldn't delete all tokens");
            return code;
        }
     }
 #endif
     code = ktc_ForgetAllTokens();
     if (code) {
-       com_err(whoami, code, "couldn't delete all tokens");
+       afs_com_err(whoami, code, "couldn't delete all tokens");
        return code;
     }
     return 0;
 }
 
-static
-ListTickets(struct cmd_syndesc *as, char *arock)
+static int
+ListTickets(struct cmd_syndesc *as, void *arock)
 {
     afs_int32 code = 0;
     int index, newIndex;
@@ -1606,17 +1607,17 @@ ListTickets(struct cmd_syndesc *as, char *arock)
            ka_ParseLoginName(name, server.name, server.instance,
                              server.cell);
        if (code) {
-           com_err(whoami, code, "couldn't interpret name '%s'", name);
+           afs_com_err(whoami, code, "couldn't interpret name '%s'", name);
            return code;
        }
        if (server.cell[0] == 0) {
-           if (code = DefaultCell())
+           if ((code = DefaultCell()))
                return code;
            strcpy(server.cell, cell);
        } else {
            code = ka_ExpandCell(server.cell, server.cell, 0 /*local */ );
            if (code) {
-               com_err(whoami, code, "Can't expand cell name");
+               afs_com_err(whoami, code, "Can't expand cell name");
                return code;
            }
        }
@@ -1635,7 +1636,7 @@ ListTickets(struct cmd_syndesc *as, char *arock)
 }
 
 static void
-add_std_args(register struct cmd_syndesc *ts)
+add_std_args(struct cmd_syndesc *ts)
 {
     cmd_Seek(ts, 12);
     /* 12 */ cmd_AddParm(ts, "-admin_username", CMD_SINGLE, CMD_OPTIONAL,
@@ -1652,8 +1653,8 @@ add_std_args(register struct cmd_syndesc *ts)
 afs_int32
 ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
 {
-    register int code;
-    register struct cmd_syndesc *ts;
+    int code;
+    struct cmd_syndesc *ts;
 
     char line[BUFSIZ];
     afs_int32 argc;
@@ -1664,14 +1665,15 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
     cmd_SetBeforeProc(MyBeforeProc, NULL);
     cmd_SetAfterProc(MyAfterProc, NULL);
 
-    ts = cmd_CreateSyntax("interactive", Interactive, 0,
+    ts = cmd_CreateSyntax("interactive", Interactive, NULL, 0,
                          "enter interactive mode");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("noauthentication", NoAuth, 0,
-                         "connect to AuthServer w/o using token");
+    cmd_CreateSyntax("noauthentication", NoAuth, NULL, 0,
+                    "connect to AuthServer w/o using token");
 
-    ts = cmd_CreateSyntax("list", ListUsers, 0, "list all users in database");
+    ts = cmd_CreateSyntax("list", ListUsers, NULL, 0,
+                         "list all users in database");
     cmd_AddParm(ts, "-long", CMD_FLAG, CMD_OPTIONAL,
                "show detailed info about each user");
     cmd_AddParm(ts, "-showadmin", CMD_FLAG, CMD_OPTIONAL,
@@ -1681,26 +1683,26 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
     add_std_args(ts);
     cmd_CreateAlias(ts, "ls");
 
-    ts = cmd_CreateSyntax("examine", ExamineUser, 0,
+    ts = cmd_CreateSyntax("examine", ExamineUser, NULL, 0,
                          "examine the entry for a user");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user");
     cmd_AddParm(ts, "-showkey", CMD_FLAG, CMD_OPTIONAL,
                "show the user's actual key rather than the checksum");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("create", CreateUser, 0,
+    ts = cmd_CreateSyntax("create", CreateUser, NULL, 0,
                          "create an entry for a user");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user");
     cmd_AddParm(ts, "-initial_password", CMD_SINGLE, CMD_OPTIONAL,
                "initial password");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("delete", DeleteUser, 0, "delete a user");
+    ts = cmd_CreateSyntax("delete", DeleteUser, NULL, 0, "delete a user");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user");
     add_std_args(ts);
     cmd_CreateAlias(ts, "rm");
 
-    ts = cmd_CreateSyntax("setfields", SetFields, 0,
+    ts = cmd_CreateSyntax("setfields", SetFields, NULL, 0,
                          "set various fields in a user's entry");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user");
     cmd_AddParm(ts, "-flags", CMD_SINGLE, CMD_OPTIONAL,
@@ -1725,18 +1727,18 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
     cmd_CreateAlias(ts, "sf");
 
 
-    ts = cmd_CreateSyntax("unlock", Unlock, 0,
+    ts = cmd_CreateSyntax("unlock", Unlock, NULL, 0,
                          "Enable authentication ID after max failed attempts exceeded");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "authentication ID");
     add_std_args(ts);
 
 
-    ts = cmd_CreateSyntax("stringtokey", StringToKey, 0,
+    ts = cmd_CreateSyntax("stringtokey", StringToKey, NULL, 0,
                          "convert a string to a key");
     cmd_AddParm(ts, "-string", CMD_SINGLE, 0, "password string");
     cmd_AddParm(ts, "-cell", CMD_SINGLE, CMD_OPTIONAL, "cell name");
 
-    ts = cmd_CreateSyntax("setpassword", SetPassword, 0,
+    ts = cmd_CreateSyntax("setpassword", SetPassword, NULL, 0,
                          "set a user's password");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user");
     cmd_AddParm(ts, "-new_password", CMD_SINGLE, CMD_OPTIONAL,
@@ -1749,8 +1751,7 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
     cmd_CreateAlias(ts, "setpasswd");
 #endif
 
-    /* set a user's key */
-    ts = cmd_CreateSyntax("setkey", SetPassword, 0, (char *)CMD_HIDDEN);
+    ts = cmd_CreateSyntax("setkey", SetPassword, NULL, CMD_HIDDEN, "set a user's key");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user");
     cmd_Seek(ts, 2);
     cmd_AddParm(ts, "-new_key", CMD_SINGLE, 0, "eight byte new key");
@@ -1758,8 +1759,7 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
     cmd_AddParm(ts, "-kvno", CMD_SINGLE, CMD_OPTIONAL, "key version number");
     add_std_args(ts);
 
-    /* get a user's password */
-    ts = cmd_CreateSyntax("getpassword", GetPassword, 0, (char *)CMD_HIDDEN);
+    ts = cmd_CreateSyntax("getpassword", GetPassword, NULL, CMD_HIDDEN, "get a user's password");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of user");
     /* don't take standard args */
     /* add_std_args (ts); */
@@ -1767,28 +1767,24 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
     cmd_CreateAlias(ts, "getpasswd");
 #endif
 
-    /* get a random key */
-    ts = cmd_CreateSyntax("getrandomkey", GetRandomKey, 0,
-                         (char *)CMD_HIDDEN);
+    ts = cmd_CreateSyntax("getrandomkey", GetRandomKey, NULL, CMD_HIDDEN, "get a random key");
     add_std_args(ts);
 
-    /* get a ticket for a specific server */
-    ts = cmd_CreateSyntax("getticket", GetTicket, 0, (char *)CMD_HIDDEN);
+    ts = cmd_CreateSyntax("getticket", GetTicket, NULL, CMD_HIDDEN, "get a ticket for a specific server");
     cmd_AddParm(ts, "-name", CMD_SINGLE, 0, "name of server");
     cmd_AddParm(ts, "-lifetime", CMD_SINGLE, CMD_OPTIONAL, "ticket lifetime");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("statistics", Statistics, 0,
+    ts = cmd_CreateSyntax("statistics", Statistics, NULL, 0,
                          "show statistics for AuthServer");
     add_std_args(ts);
 
-    /* show debugging info from AuthServer */
-    ts = cmd_CreateSyntax("debuginfo", DebugInfo, 0, (char *)CMD_HIDDEN);
+    ts = cmd_CreateSyntax("debuginfo", DebugInfo, NULL, CMD_HIDDEN, "show debugging info from AuthServer");
     cmd_AddParm(ts, "-hostname", CMD_SINGLE, CMD_OPTIONAL,
                "authentication server host name");
     add_std_args(ts);
 
-    ts = cmd_CreateSyntax("forgetticket", ForgetTicket, 0,
+    ts = cmd_CreateSyntax("forgetticket", ForgetTicket, NULL, 0,
                          "delete user's tickets");
 #ifdef notdef
     cmd_AddParm(ts, "-name", CMD_SINGLE, (CMD_OPTIONAL | CMD_HIDE),
@@ -1796,13 +1792,13 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
 #endif
     cmd_AddParm(ts, "-all", CMD_FLAG, CMD_OPTIONAL, "delete all tickets");
 
-    ts = cmd_CreateSyntax("listtickets", ListTickets, 0,
+    ts = cmd_CreateSyntax("listtickets", ListTickets, NULL, 0,
                          "show all cache manager tickets");
     cmd_AddParm(ts, "-name", CMD_SINGLE, CMD_OPTIONAL, "name of server");
     cmd_AddParm(ts, "-long", CMD_FLAG, CMD_OPTIONAL,
                "show session key and ticket");
 
-    ts = cmd_CreateSyntax("quit", Quit, 0, "exit program");
+    cmd_CreateSyntax("quit", Quit, NULL, 0, "exit program");
 
     finished = 1;
     conn = 0;                  /* no connection yet */
@@ -1811,7 +1807,7 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
 
     strcpy(whoami, "kas");
 
-    if (code = cmd_Dispatch(cmd_argc, cmd_argv)) {
+    if ((code = cmd_Dispatch(cmd_argc, cmd_argv))) {
        return code;
     }
 
@@ -1831,7 +1827,7 @@ ka_AdminInteractive(int cmd_argc, char *cmd_argv[])
        code =
            cmd_ParseLine(line, argv, &argc, sizeof(argv) / sizeof(argv[0]));
        if (code) {
-           com_err(whoami, code, "parsing line: '%s'", line);
+           afs_com_err(whoami, code, "parsing line: '%s'", line);
            return code;
        }
        code = cmd_Dispatch(argc, argv);