Annotation of embedtools/src/voucher.c, revision 1.1.2.3

1.1.2.1   misho       1: #include "global.h"
1.1.2.3 ! misho       2: #include <openssl/pem.h>
        !             3: #include <openssl/rsa.h>
        !             4: #include <openssl/err.h>
1.1.2.1   misho       5: 
1.1.2.2   misho       6: io_enableDEBUG;
                      7: 
                      8: cfg_root_t cfg;
                      9: FILE *output;
                     10: char szConfig[MAXPATHLEN] = VOUCHER_CFG;
                     11: extern char compiled[], compiledby[], compilehost[];
                     12: 
                     13: 
                     14: static void
                     15: Usage()
                     16: {
                     17:        printf( " -= VOUCHER =- management tool\n"
                     18:                "=== %s === %s@%s ===\n\n"
                     19:                "Syntax: voucher [options] -r <RollID> [count]\n"
                     20:                "\tvoucher [options] -t <voucher> [voucher [voucher ...]]\n\n"
                     21:                "\t-v\t\tVerbose (more -v more verbosity)\n"
                     22:                "\t-r\t\tRequest new voucher(s) mode\n"
                     23:                "\t-t\t\tTest voucher(s) mode\n"
1.1.2.3 ! misho      24:                "\t-g\t\tRequest new RSA pair mode\n"
1.1.2.2   misho      25:                "\t-c <config>\tConfig file\n"
                     26:                "\t-o <output>\tOutput file [default=-]\n"
                     27:                "\n", compiled, compiledby, compilehost);
                     28: }
                     29: 
                     30: static void
                     31: AtExit()
                     32: {
                     33:        if (output != stdout)
                     34:                fclose(output);
                     35: }
                     36: 
                     37: static inline int
                     38: RedirOutput(const char *name)
                     39: {
                     40:        AtExit();
                     41: 
                     42:        if (strcmp(name, "-")) {
                     43:                output = fopen(name, "w+");
                     44:                if (!output) {
                     45:                        printf("Error:: can't redirect output #%d - %s\n", 
                     46:                                        errno, strerror(errno));
                     47:                        return -1;
                     48:                }
                     49:        } else
                     50:                output = stdout;
                     51:        return 0;
                     52: }
                     53: 
1.1.2.3 ! misho      54: static int
        !            55: NewRSA()
        !            56: {
        !            57:        RSA *k = RSA_generate_key(VOUCHER_MAX_RSA * 8, 65537, NULL, NULL);
        !            58:        if (!k) {
        !            59:                printf("Error:: can't generate RSA key\n");
        !            60:                return 2;
        !            61:        }
        !            62: 
        !            63:        PEM_write_RSAPrivateKey(output, k, NULL, NULL, 0, NULL, NULL);
        !            64:        PEM_write_RSA_PUBKEY(output, k);
        !            65:        return 0;
        !            66: }
        !            67: 
1.1.2.2   misho      68: 
1.1.2.1   misho      69: int
                     70: main(int argc, char **argv)
                     71: {
1.1.2.2   misho      72:        char ch, mode = 0;
                     73:        int rid, cnt = 1;
                     74: 
                     75:        output = stdout;
                     76:        atexit(AtExit);
                     77: 
1.1.2.3 ! misho      78:        while ((ch = getopt(argc, argv, "hvrtgc:o:")) != -1)
1.1.2.2   misho      79:                switch (ch) {
                     80:                        case 'r':
                     81:                                mode = 1;
                     82:                                break;
                     83:                        case 't':
                     84:                                mode = 2;
                     85:                                break;
1.1.2.3 ! misho      86:                        case 'g':
        !            87:                                return NewRSA();
1.1.2.2   misho      88:                        case 'c':
                     89:                                strlcpy(szConfig, optarg, sizeof szConfig);
                     90:                                break;
                     91:                        case 'o':
                     92:                                RedirOutput(optarg);
                     93:                                break;
                     94:                        case 'v':
                     95:                                io_incDebug;
                     96:                                break;
                     97:                        case 'h':
                     98:                        default:
                     99:                                Usage();
                    100:                                return 1;
                    101:                }
                    102:        argc -= optind;
                    103:        argv += optind;
                    104:        if (!argc || !mode) {
                    105:                printf("Error:: not enough parameter or unspecified mode ...\n\n");
                    106:                Usage();
                    107:                return 1;
                    108:        }
                    109:        if (cfgLoadConfig(szConfig, &cfg)) {
                    110:                printf("Error:: load config #%d - %s\n", cfg_GetErrno(), cfg_GetError());
1.1.2.3 ! misho     111:                return 3;
1.1.2.2   misho     112:        }
                    113: 
                    114:        cfgUnloadConfig(&cfg);
1.1.2.1   misho     115:        return 0;
                    116: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>