# HG changeset patch # User Mychaela Falconia # Date 1615708135 0 # Node ID 372ecc4aa2c47fc083f61ac35ed172b6dc44a16c # Parent 53f8a1146a5642684926db5c07ed63b001c98a22 off-line utils ported over diff -r 53f8a1146a56 -r 372ecc4aa2c4 .hgignore --- a/.hgignore Sun Mar 14 07:43:51 2021 +0000 +++ b/.hgignore Sun Mar 14 07:48:55 2021 +0000 @@ -12,3 +12,6 @@ ^simtool/fc-simtool$ ^uicc/fc-uicc-tool$ + +^utils/sim-iccid-mkfull$ +^utils/sws-email2db$ diff -r 53f8a1146a56 -r 372ecc4aa2c4 utils/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utils/Makefile Sun Mar 14 07:48:55 2021 +0000 @@ -0,0 +1,23 @@ +CC= gcc +CFLAGS= -O2 +PROGS= sim-iccid-mkfull sws-email2db +LIBS= ../libutil/libutil.a + +INSTALL_PREFIX= /opt/freecalypso + +INSTBIN=${INSTALL_PREFIX}/bin + +all: ${PROGS} + +sim-iccid-mkfull: sim-iccid-mkfull.o ${LIBS} + ${CC} ${CFLAGS} -o $@ $@.o ${LIBS} + +sws-email2db: sws-email2db.c + ${CC} ${CFLAGS} -o $@ $@.c + +install: + mkdir -p ${INSTBIN} + install -c ${PROGS} ${INSTBIN} + +clean: + rm -f ${PROGS} *.o diff -r 53f8a1146a56 -r 372ecc4aa2c4 utils/sim-iccid-mkfull.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utils/sim-iccid-mkfull.c Sun Mar 14 07:48:55 2021 +0000 @@ -0,0 +1,30 @@ +/* + * This program is a special utility for constructing ICCIDs + * following the 18+1 convention. The argument is an 18-digit ICCID + * base, usually entered in shorthand, and the output is the full + * 19-digit ICCID. + */ + +#include +#include +#include + +main(argc, argv) + char **argv; +{ + u_char digits[19]; + char asc[20]; + int rc; + + if (argc != 2) { + fprintf(stderr, "usage: %s shorthand-iccid\n", argv[0]); + exit(1); + } + rc = parse_decimal_shorthand(argv[1], digits, 18); + if (rc < 0) + exit(1); /* error msg already printed */ + digits[18] = compute_iccid_luhn(digits); + nibbles_to_ascii(digits, 19, asc); + puts(asc); + exit(0); +} diff -r 53f8a1146a56 -r 372ecc4aa2c4 utils/sws-email2db.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utils/sws-email2db.c Sun Mar 14 07:48:55 2021 +0000 @@ -0,0 +1,117 @@ +/* + * This program reads extracts from Sysmocom webshop emails containing + * card provisioning data and converts these bits into our sws-card-db + * format. + */ + +#include +#include +#include +#include + +#define MAX_FIELDS 32 +#define MAX_FIELD_KW 7 + +char *infname; +FILE *inf; +char linebuf[128]; +int lineno; + +char field_names[MAX_FIELDS][MAX_FIELD_KW+1]; +unsigned nfields; + +get_input_line() +{ + char *cp; + + if (!fgets(linebuf, sizeof linebuf, inf)) + return(0); + lineno++; + cp = index(linebuf, '\n'); + if (!cp) { + fprintf(stderr, "%s line %d: too long or missing newline\n", + infname, lineno); + exit(1); + } + *cp = '\0'; + return(1); +} + +read_field_names() +{ + for (;;) { + if (!get_input_line()) { + fprintf(stderr, "error: %s EOFs in field name list\n", + infname); + exit(1); + } + if (!linebuf[0]) + break; + if (nfields >= MAX_FIELDS) { + fprintf(stderr, "%s line %d: too many fields\n", + infname, lineno); + exit(1); + } + if (strlen(linebuf) > MAX_FIELD_KW) { + fprintf(stderr, "%s line %d: field name is too long\n", + infname, lineno); + exit(1); + } + strcpy(field_names[nfields], linebuf); + nfields++; + } + if (!nfields) { + fprintf(stderr, "error: %s header defines 0 fields\n", infname); + exit(1); + } +} + +process_one_card() +{ + unsigned nf; + int rc; + + for (nf = 0; nf < nfields; nf++) { + for (;;) { + rc = get_input_line(); + if (!rc) { + if (!nf) + exit(0); + fprintf(stderr, + "error: %s EOFs in the middle of a card data block\n", + infname); + exit(1); + } + if (linebuf[0]) + break; + if (nf) { + fprintf(stderr, + "%s line %d: empty line in the middle of a card data block\n", + infname, lineno); + exit(1); + } + } + if (nf) + putchar(' '); + printf("%s=%s", field_names[nf], linebuf); + } + putchar('\n'); +} + +main(argc, argv) + char **argv; +{ + if (argc != 2) { + fprintf(stderr, "usage: %s email-extract-file\n", argv[0]); + exit(1); + } + infname = argv[1]; + inf = fopen(infname, "r"); + if (!inf) { + perror(infname); + exit(1); + } + read_field_names(); + for (;;) + process_one_card(); +}