1f1b9d127SSheldon Hearn #include <sys/param.h> 2f1b9d127SSheldon Hearn #include <sys/time.h> 3f1b9d127SSheldon Hearn #include <stdio.h> 4f1b9d127SSheldon Hearn #include <string.h> 5f1b9d127SSheldon Hearn #include <unistd.h> 6f1b9d127SSheldon Hearn #include <stdlib.h> 7f1b9d127SSheldon Hearn #include <err.h> 8f1b9d127SSheldon Hearn #include <sysexits.h> 9f1b9d127SSheldon Hearn 10f1b9d127SSheldon Hearn #include <netsmb/smb_lib.h> 11f1b9d127SSheldon Hearn #include <netsmb/smb_conn.h> 12f1b9d127SSheldon Hearn 13f1b9d127SSheldon Hearn #include "common.h" 14f1b9d127SSheldon Hearn 15f1b9d127SSheldon Hearn extern char *__progname; 16f1b9d127SSheldon Hearn 17f1b9d127SSheldon Hearn static void help(void); 18f1b9d127SSheldon Hearn static void help_usage(void); 19f1b9d127SSheldon Hearn static int cmd_crypt(int argc, char *argv[]); 20f1b9d127SSheldon Hearn static int cmd_help(int argc, char *argv[]); 21f1b9d127SSheldon Hearn 22f1b9d127SSheldon Hearn int verbose; 23f1b9d127SSheldon Hearn 24f1b9d127SSheldon Hearn typedef int cmd_fn_t (int argc, char *argv[]); 25f1b9d127SSheldon Hearn typedef void cmd_usage_t (void); 26f1b9d127SSheldon Hearn 27f1b9d127SSheldon Hearn #define CMDFL_NO_KMOD 0x0001 28f1b9d127SSheldon Hearn 29f1b9d127SSheldon Hearn static struct commands { 30f1b9d127SSheldon Hearn const char * name; 31f1b9d127SSheldon Hearn cmd_fn_t* fn; 32f1b9d127SSheldon Hearn cmd_usage_t * usage; 33f1b9d127SSheldon Hearn int flags; 34f1b9d127SSheldon Hearn } commands[] = { 35f1b9d127SSheldon Hearn {"crypt", cmd_crypt, NULL, CMDFL_NO_KMOD}, 36f1b9d127SSheldon Hearn {"help", cmd_help, help_usage, CMDFL_NO_KMOD}, 37f1b9d127SSheldon Hearn {"lc", cmd_dumptree, NULL}, 38f1b9d127SSheldon Hearn {"login", cmd_login, login_usage}, 39f1b9d127SSheldon Hearn {"logout", cmd_logout, logout_usage}, 40f1b9d127SSheldon Hearn {"lookup", cmd_lookup, lookup_usage, CMDFL_NO_KMOD}, 41f1b9d127SSheldon Hearn {"print", cmd_print, print_usage}, 42f1b9d127SSheldon Hearn {"view", cmd_view, view_usage}, 43f1b9d127SSheldon Hearn {NULL, NULL} 44f1b9d127SSheldon Hearn }; 45f1b9d127SSheldon Hearn 46f1b9d127SSheldon Hearn static struct commands * 47f1b9d127SSheldon Hearn lookupcmd(const char *name) 48f1b9d127SSheldon Hearn { 49f1b9d127SSheldon Hearn struct commands *cmd; 50f1b9d127SSheldon Hearn 51f1b9d127SSheldon Hearn for (cmd = commands; cmd->name; cmd++) { 52f1b9d127SSheldon Hearn if (strcmp(cmd->name, name) == 0) 53f1b9d127SSheldon Hearn return cmd; 54f1b9d127SSheldon Hearn } 55f1b9d127SSheldon Hearn return NULL; 56f1b9d127SSheldon Hearn } 57f1b9d127SSheldon Hearn 58f1b9d127SSheldon Hearn int 59f1b9d127SSheldon Hearn cmd_crypt(int argc, char *argv[]) 60f1b9d127SSheldon Hearn { 61f1b9d127SSheldon Hearn char *cp, *psw; 62f1b9d127SSheldon Hearn 63f1b9d127SSheldon Hearn if (argc < 2) 64f1b9d127SSheldon Hearn psw = getpass("Password:"); 65f1b9d127SSheldon Hearn else 66f1b9d127SSheldon Hearn psw = argv[1]; 67f1b9d127SSheldon Hearn cp = malloc(strlen(psw + 4)); 68f1b9d127SSheldon Hearn if (cp == NULL) 69f1b9d127SSheldon Hearn errx(EX_DATAERR, "out of memory"); 70f1b9d127SSheldon Hearn smb_simplecrypt(cp, psw); 71f1b9d127SSheldon Hearn printf("%s\n", cp); 72f1b9d127SSheldon Hearn free(cp); 73f1b9d127SSheldon Hearn exit(0); 74f1b9d127SSheldon Hearn } 75f1b9d127SSheldon Hearn 76f1b9d127SSheldon Hearn int 77f1b9d127SSheldon Hearn cmd_help(int argc, char *argv[]) 78f1b9d127SSheldon Hearn { 79f1b9d127SSheldon Hearn struct commands *cmd; 80f1b9d127SSheldon Hearn char *cp; 81f1b9d127SSheldon Hearn 82f1b9d127SSheldon Hearn if (argc < 2) 83f1b9d127SSheldon Hearn help_usage(); 84f1b9d127SSheldon Hearn cp = argv[1]; 85f1b9d127SSheldon Hearn cmd = lookupcmd(cp); 86f1b9d127SSheldon Hearn if (cmd == NULL) 87f1b9d127SSheldon Hearn errx(EX_DATAERR, "unknown command %s", cp); 88f1b9d127SSheldon Hearn if (cmd->usage == NULL) 89f1b9d127SSheldon Hearn errx(EX_DATAERR, "no specific help for command %s", cp); 90f1b9d127SSheldon Hearn cmd->usage(); 91f1b9d127SSheldon Hearn exit(0); 92f1b9d127SSheldon Hearn } 93f1b9d127SSheldon Hearn 94f1b9d127SSheldon Hearn int 95f1b9d127SSheldon Hearn main(int argc, char *argv[]) 96f1b9d127SSheldon Hearn { 97f1b9d127SSheldon Hearn struct commands *cmd; 98f1b9d127SSheldon Hearn char *cp; 99f1b9d127SSheldon Hearn int opt; 100f1b9d127SSheldon Hearn 101f1b9d127SSheldon Hearn if (argc < 2) 102f1b9d127SSheldon Hearn help(); 103f1b9d127SSheldon Hearn 104f1b9d127SSheldon Hearn while ((opt = getopt(argc, argv, "hv")) != EOF) { 105f1b9d127SSheldon Hearn switch (opt) { 106f1b9d127SSheldon Hearn case 'h': 107f1b9d127SSheldon Hearn help(); 108f1b9d127SSheldon Hearn /*NOTREACHED */ 109f1b9d127SSheldon Hearn case 'v': 110f1b9d127SSheldon Hearn verbose = 1; 111f1b9d127SSheldon Hearn break; 112f1b9d127SSheldon Hearn default: 113f1b9d127SSheldon Hearn warnx("invalid option %c", opt); 114f1b9d127SSheldon Hearn help(); 115f1b9d127SSheldon Hearn /*NOTREACHED */ 116f1b9d127SSheldon Hearn } 117f1b9d127SSheldon Hearn } 118f1b9d127SSheldon Hearn if (optind >= argc) 119f1b9d127SSheldon Hearn help(); 120f1b9d127SSheldon Hearn 121f1b9d127SSheldon Hearn cp = argv[optind]; 122f1b9d127SSheldon Hearn cmd = lookupcmd(cp); 123f1b9d127SSheldon Hearn if (cmd == NULL) 124f1b9d127SSheldon Hearn errx(EX_DATAERR, "unknown command %s", cp); 125f1b9d127SSheldon Hearn 126f1b9d127SSheldon Hearn if ((cmd->flags & CMDFL_NO_KMOD) == 0 && smb_lib_init() != 0) 127f1b9d127SSheldon Hearn exit(1); 128f1b9d127SSheldon Hearn 129f1b9d127SSheldon Hearn argc -= optind; 130f1b9d127SSheldon Hearn argv += optind; 131f1b9d127SSheldon Hearn optind = optreset = 1; 132f1b9d127SSheldon Hearn return cmd->fn(argc, argv); 133f1b9d127SSheldon Hearn } 134f1b9d127SSheldon Hearn 135f1b9d127SSheldon Hearn static void 136f1b9d127SSheldon Hearn help(void) { 137f1b9d127SSheldon Hearn printf("\n"); 138f1b9d127SSheldon Hearn printf("usage: %s [-hv] command [args]\n", __progname); 139f1b9d127SSheldon Hearn printf("where commands are:\n" 140f1b9d127SSheldon Hearn " crypt [password] slightly encrypt password\n" 141f1b9d127SSheldon Hearn " help command display help on \"command\"\n" 142f1b9d127SSheldon Hearn " lc display active connections\n" 143f1b9d127SSheldon Hearn " login //user@host[/share] login to the specified host\n" 144f1b9d127SSheldon Hearn " logout //user@host[/share] logout from the specified host\n" 145f1b9d127SSheldon Hearn " print //user@host/share file print file to the specified remote printer\n" 146f1b9d127SSheldon Hearn " view //user@host list resources on the specified host\n" 147f1b9d127SSheldon Hearn "\n"); 148f1b9d127SSheldon Hearn exit(1); 149f1b9d127SSheldon Hearn } 150f1b9d127SSheldon Hearn 151f1b9d127SSheldon Hearn static void 152f1b9d127SSheldon Hearn help_usage(void) { 153f1b9d127SSheldon Hearn printf("usage: smbutil help command\n"); 154f1b9d127SSheldon Hearn exit(1); 155f1b9d127SSheldon Hearn } 156