示例#1
0
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);
}
示例#2
0
文件: pklist.c 项目: logavanc/code
/*
 * 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);
}