[BACK]Return to tcfsgenkey.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / tcfs

Annotation of src/usr.bin/tcfs/tcfsgenkey.c, Revision 1.1.1.1

1.1       provos      1: /*
                      2:  *     Transparent Cryptographic File System (TCFS) for NetBSD
                      3:  *     Author and mantainer:   Luigi Catuogno [luicat@tcfs.unisa.it]
                      4:  *
                      5:  *     references:             http://tcfs.dia.unisa.it
                      6:  *                             tcfs-bsd@tcfs.unisa.it
                      7:  */
                      8:
                      9: /*
                     10:  *     Base utility set v0.1
                     11:  */
                     12:
                     13: #include <stdio.h>
                     14: #include <strings.h>
                     15:
                     16: #include <miscfs/tcfs/tcfs.h>
                     17: #include "tcfslib.h"
                     18: #include "tcfserrors.h"
                     19:
                     20: char *genkey_usage="Usage: %s [OPTION]
                     21: Generate a TCFS key adding it to the user entry into the TCFS database.
                     22:
                     23:   -h       Shows this help\n";
                     24:
                     25: int
                     26: genkey_main (int argn, char *argv[])
                     27: {
                     28:        int val;
                     29:        char *user, *passwd;
                     30:        tcfspwdb *userinfo;
                     31:        unsigned char *newkey, *cryptedkey;
                     32:        tcfspwdb *user_info = NULL;
                     33:
                     34:        /*
                     35:         * Going to check arguments
                     36:         */
                     37:        while ((val = getopt(argn, argv, "h")) != EOF)
                     38:                switch (val) {
                     39:                case 'h':
                     40:                        show_usage(genkey_usage, argv[0]);
                     41:                        exit (OK);
                     42:                        break; /* Useless code */
                     43:                default:
                     44:                        fprintf (stderr, "Try %s --help for more information.\n", argv[0]);
                     45:                        exit (ER_UNKOPT);
                     46:                        break;
                     47:                }
                     48:
                     49:        if (argn - optind)
                     50:                tcfs_error (ER_UNKOPT, NULL);
                     51:
                     52:        /*
                     53:         * Must be root to do all this stuff
                     54:         */
                     55:        if (geteuid())
                     56:                tcfs_error (ER_CUSTOM, "I don't have root privileges!");
                     57:
                     58:        /*
                     59:         * Authenticate user
                     60:         */
                     61:        if (!unix_auth (&user, &passwd, TRUE))
                     62:                tcfs_error (ER_CUSTOM, "Who are you?!");
                     63:
                     64:        if (!tcfs_getpwnam (user, &user_info))
                     65:                tcfs_error (ER_CUSTOM, "You do not have an entry in the TCFS key database.");
                     66:
                     67:        if (strlen(user_info->upw))
                     68:                tcfs_error (ER_CUSTOM,"You already have a TCFS key.");
                     69:
                     70:        /*
                     71:         * Generate a new key for the user.
                     72:         */
                     73:        newkey = gentcfskey ();
                     74:        {
                     75:                int i;
                     76:                printf("gentcfskey: key =");
                     77:                for (i = 0; i < KEYSIZE; i++)
                     78:                        printf(" %02x", newkey[i]);
                     79:                printf("\n");
                     80:        }
                     81:
                     82:        /*
                     83:         * Encrypt the generated key with user password
                     84:         */
                     85:        cryptedkey = (char*)calloc(UUKEYSIZE, sizeof(char));
                     86:        if (!cryptedkey)
                     87:                tcfs_error (ER_MEM, NULL);
                     88:
                     89:
                     90:        if (!tcfs_encrypt_key (user, passwd, newkey, cryptedkey, USERKEY))
                     91:                tcfs_error (ER_MEM, NULL);
                     92:
                     93:        /*
                     94:         * Update TCFS key database
                     95:         */
                     96:        if (!tcfspwdbr_new (&userinfo))
                     97:                tcfs_error (ER_MEM, NULL);
                     98:
                     99:        if (!tcfspwdbr_edit (&userinfo, F_USR|F_PWD, user, cryptedkey))
                    100:                tcfs_error (ER_MEM, NULL);
                    101:
                    102:        /* TODO:
                    103:           if (!change && tcfs_getpwnam (user, &userinfo))
                    104:           tcfs_error (ER_CUSTOM, "Use -c to change the key.");
                    105:        */
                    106:
                    107:        if (!tcfs_putpwnam (user, userinfo, U_CHG))
                    108:                tcfs_error (ER_CUSTOM, "Error: cannot generate key.");
                    109:
                    110:        tcfs_error (ER_CUSTOM, "\nKey succesfully generated.");
                    111: }