/* $OpenBSD: tcfsrmuser.c,v 1.6 2000/06/19 23:06:25 aaron Exp $ */ /* * Transparent Cryptographic File System (TCFS) for NetBSD * Author and mantainer: Luigi Catuogno [luicat@tcfs.unisa.it] * * references: http://tcfs.dia.unisa.it * tcfs-bsd@tcfs.unisa.it */ /* * Base utility set v0.1 */ #include #include #include #include #include #include #include "tcfslib.h" #include "tcfserrors.h" char *rmuser_usage="Usage: %s [OPTION]... Remove an user entry from the TCFS dabatase. -l Username to remove from the TCFS database -h Shows this help -v Makes the output a little more verbose\n"; int rmuser_main(int argn, char *argv[]) { int have_user = FALSE; int be_verbose = FALSE; char *user; tcfspwdb *user_info; int val; /* * Going to check the arguments */ if ((user = (char *)malloc(LOGIN_NAME_MAX + 1)) == NULL) err(1, NULL); while ((val = getopt(argn, argv, "l:hv")) != EOF) switch (val) { case 'l': strlcpy(user, optarg, LOGIN_NAME_MAX + 1); have_user = TRUE; break; case 'h': show_usage(rmuser_usage, argv[0]); exit(OK); break; case 'v': be_verbose = TRUE; break; default: fprintf(stderr, "Try %s --help for more information.\n", argv[0]); exit(ER_UNKOPT); break; } if (argn - optind) tcfs_error(ER_UNKOPT, NULL); /* * Here we don't have to drop root privileges because only root * should run us. * However we can do better. Maybe in next versions. */ if (!have_user) { int len; printf("Username to remove from TCFS database: "); fgets(user, LOGIN_NAME_MAX + 1, stdin); len = strlen(user) - 2; if (len < 0) exit(1); user[len] = user[len] == '\n' ? 0 : user[len]; } if (be_verbose) printf("Deleting the entry for user %s from the TCFS database...\n", user); /* * Deleting an entry from the key database */ if (!tcfspwdbr_new(&user_info)) tcfs_error(ER_MEM, NULL); if (!tcfspwdbr_edit(&user_info, F_USR, user)) tcfs_error(ER_MEM, NULL); if (!tcfs_putpwnam(user, user_info, U_DEL)) tcfs_error(ER_CUSTOM, "Error: cannot remove user."); if (be_verbose) printf("User entry removed with success.\n"); tcfs_error(OK, NULL); }