static void do_list(int all, u_int32_t type, char *name) { rndstat_t rstat; rndstat_name_t rstat_name; int fd; int res; uint32_t i; u_int32_t start; fd = open(_PATH_URANDOM, O_RDONLY, 0644); if (fd < 0) err(1, "open"); if (all == 0 && type == 0xff) { strncpy(rstat_name.name, name, sizeof(rstat_name.name)); res = ioctl(fd, RNDGETSRCNAME, &rstat_name); if (res < 0) err(1, "ioctl(RNDGETSRCNAME)"); printf(HEADER); printf("%-16s %10u %-4s %s\n", rstat_name.source.name, rstat_name.source.total, find_name(rstat_name.source.type), strflags(rstat_name.source.flags)); close(fd); return; } /* * Run through all the devices present in the system, and either * print out ones that match, or print out all of them. */ printf(HEADER); start = 0; for (;;) { rstat.count = RND_MAXSTATCOUNT; rstat.start = start; res = ioctl(fd, RNDGETSRCNUM, &rstat); if (res < 0) err(1, "ioctl(RNDGETSRCNUM)"); if (rstat.count == 0) break; for (i = 0; i < rstat.count; i++) { if (all != 0 || type == rstat.source[i].type) printf("%-16s %10u %-4s %s\n", rstat.source[i].name, rstat.source[i].total, find_name(rstat.source[i].type), strflags(rstat.source[i].flags)); } start += rstat.count; } close(fd); }
/* * output a single credential (ticket) */ void show_cred(register krb5_creds *cred) { krb5_error_code retval; char *clientname = NULL; char *servername = NULL; char *flags; int is_config; int i; is_config = krb5_is_config_principal(ctx, cred->server); if (is_config && !show_cfg_tkts) return; retval = krb5_unparse_name(ctx, cred->client, &clientname); if (retval) { com_err(progname, retval, "while unparsing client name"); goto cleanup; } retval = krb5_unparse_name(ctx, cred->server, &servername); if (retval) { com_err(progname, retval, "while unparsing server name"); goto cleanup; } if (show_names_only) { printf("%s\n", servername); goto cleanup; } if (!cred->times.starttime) cred->times.starttime = cred->times.authtime; if (is_config && show_cfg_tkts == 1) { // "config" <arg>+ <value> printf("config"); #ifdef KRB5_MIT printf("\t%d", cred->server->length-1); for (i = 1; i < cred->server->length; i++) printf("\t%s", cred->server->data[i].data); #else printf("\t%d", cred->server->name.name_string.len-1); for (i = 1; i < cred->server->name.name_string.len; i++) printf("\t%s", cred->server->name.name_string.val[i]); #endif printf("\t"); print_data(&cred->ticket); printf("\n"); } else { // "ticket" <server> <client> <start> <renew> <flags> [data] printf(is_config ? "cfgticket" : "ticket"); printf("\t%s", clientname); printf("\t%s", servername); printf("\t%ld", (unsigned long) cred->times.starttime); printf("\t%ld", (unsigned long) cred->times.endtime); printf("\t%ld", (unsigned long) cred->times.renew_till); flags = strflags(cred); if (flags && *flags) printf("\t%s", flags); else if (flags) printf("\t-"); else printf("\t?"); if (is_config || show_tktdata) { printf("\t"); print_data(&cred->ticket); } else printf("\t-"); printf("\n"); } cleanup: if (clientname) krb5_free_unparsed_name(ctx, clientname); if (servername) krb5_free_unparsed_name(ctx, servername); }