File: [local] / src / usr.bin / sectok / Attic / main.c (download)
Revision 1.9, Mon Aug 4 17:06:46 2003 UTC (20 years, 10 months ago) by deraadt
Branch: MAIN
CVS Tags: OPENBSD_4_2_BASE, OPENBSD_4_2, OPENBSD_4_1_BASE, OPENBSD_4_1, OPENBSD_4_0_BASE, OPENBSD_4_0, OPENBSD_3_9_BASE, OPENBSD_3_9, OPENBSD_3_8_BASE, OPENBSD_3_8, OPENBSD_3_7_BASE, OPENBSD_3_7, OPENBSD_3_6_BASE, OPENBSD_3_6, OPENBSD_3_5_BASE, OPENBSD_3_5, OPENBSD_3_4_BASE, OPENBSD_3_4 Changes since 1.8: +3 -5 lines
protos
|
/* $OpenBSD: main.c,v 1.9 2003/08/04 17:06:46 deraadt Exp $ */
/*
* Smartcard commander.
* Written by Jim Rees and others at University of Michigan.
*/
/*
* copyright 2001
* the regents of the university of michigan
* all rights reserved
*
* permission is granted to use, copy, create derivative works
* and redistribute this software and such derivative works
* for any purpose, so long as the name of the university of
* michigan is not used in any advertising or publicity
* pertaining to the use or distribution of this software
* without specific, written prior authorization. if the
* above copyright notice or any other identification of the
* university of michigan is included in any copy of any
* portion of this software, then the disclaimer below must
* also be included.
*
* this software is provided as is, without representation
* from the university of michigan as to its fitness for any
* purpose, and without warranty by the university of
* michigan of any kind, either express or implied, including
* without limitation the implied warranties of
* merchantability and fitness for a particular purpose. the
* regents of the university of michigan shall not be liable
* for any damages, including special, indirect, incidental, or
* consequential damages, with respect to any claim arising
* out of or in connection with the use of the software, even
* if it has been or is hereafter advised of the possibility of
* such damages.
*/
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
#include <limits.h>
#include <string.h>
#include <errno.h>
#include <sectok.h>
#include "sc.h"
#define MAXTOKENS 300
#define CARDIOSIZE 200
void onintr(int sigraised);
int port, fd = -1, cla, sleepytime;
volatile sig_atomic_t interrupted;
FILE *cmdf;
static void
usage(void)
{
fprintf(stderr,
"usage: sectok [-0123] [-f scriptfile] [-s sleeptime] [cmd] [args]\n");
exit(1);
}
int
main(int argc, char *argv[])
{
char buf[_POSIX2_LINE_MAX], *scriptfile = NULL, *tp, *tv[MAXTOKENS];
int i, tc;
tp = getenv("SCPORT");
if (tp)
port = atoi(tp);
while ((i = getopt(argc, argv, "0123f:s:h")) != -1) {
switch (i) {
case '0':
case '1':
case '2':
case '3':
port = i - '0';
break;
case 'f':
scriptfile = optarg;
break;
case 's':
sleepytime = atoi(optarg);
break;
case 'h':
default:
usage();
break;
}
}
if (optind != argc) {
/* Dispatch from command line */
dispatch(argc - optind, &argv[optind]);
exit(0);
}
if (scriptfile != NULL) {
cmdf = fopen(scriptfile, "r");
if (cmdf == NULL) {
perror(scriptfile);
exit(2);
}
} else
cmdf = stdin;
/* Interactive mode, or script file */
signal(SIGINT, onintr);
#ifdef __OpenBSD__
siginterrupt(SIGINT, 1);
#endif
/* The Main Loop */
while (1) {
fflush(stdout);
interrupted = 0;
if (sleepytime)
usleep(sleepytime * 1000);
if (cmdf == stdin) {
fprintf(stderr, "sectok> ");
fflush(stderr);
}
if (!fgets(buf, sizeof buf, cmdf)) {
putchar('\n');
if (interrupted)
continue;
else
break;
}
if (cmdf != stdin)
printf("sectok> %s", buf);
for ((tp = strtok(buf, " \t\n\r")), tc = 0; tp;
(tp = strtok(NULL, " \t\n\r")), tc++) {
if (tc < MAXTOKENS - 1)
tv[tc] = tp;
}
tv[tc] = NULL;
dispatch(tc, tv);
}
quit(0, NULL);
return 0;
}
void
onintr(int sigraised)
{
interrupted++;
}