From 81f56139b6964ddbe2c03232475f87f474136490 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 11 Oct 2001 07:42:52 +0000 Subject: initial kerberos/ADS/SPNEGO support in libsmb and smbclient. To activate you need to: - install krb5 libraries - run configure - build smbclient - run kinit to get a TGT - run smbclient with the -k option to choose kerberos auth (This used to be commit d33057585644e1337bac743e25ed7653bfb39eef) --- source3/client/client.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) (limited to 'source3/client') diff --git a/source3/client/client.c b/source3/client/client.c index 293aaf308b..2cdc3ee6ec 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -42,6 +42,7 @@ static pstring workgroup; static char *cmdstr; static BOOL got_pass; static int io_bufsize = 64512; +static BOOL use_kerberos; extern struct in_addr ipzero; static int name_type = 0x20; @@ -946,6 +947,22 @@ static BOOL do_mkdir(char *name) return(True); } +/**************************************************************************** +show 8.3 name of a file +****************************************************************************/ +static BOOL do_altname(char *name) +{ + fstring altname; + if (!NT_STATUS_IS_OK(cli_qpathinfo_alt_name(cli, name, altname))) { + d_printf("%s getting alt name for %s\n", + cli_errstr(cli),name); + return(False); + } + d_printf("%s\n", altname); + + return(True); +} + /**************************************************************************** Exit client. @@ -999,6 +1016,27 @@ static int cmd_mkdir(void) } +/**************************************************************************** + show alt name + ****************************************************************************/ +static void cmd_altname(void) +{ + pstring name; + fstring buf; + char *p=buf; + + pstrcpy(name,cur_dir); + + if (!next_token_nr(NULL,p,NULL,sizeof(buf))) { + d_printf("altname \n"); + return; + } + pstrcat(name,p); + + do_altname(name); +} + + /**************************************************************************** put a single file ****************************************************************************/ @@ -1816,6 +1854,7 @@ struct {"tar",cmd_tar,"tar [IXFqbgNan] current directory to/from ",{COMPL_NONE,COMPL_NONE}}, {"tarmode",cmd_tarmode," tar's behaviour towards archive bits",{COMPL_NONE,COMPL_NONE}}, {"translate",cmd_translate,"toggle text translation for printing",{COMPL_NONE,COMPL_NONE}}, + {"altname",cmd_altname," show alt name",{COMPL_NONE,COMPL_NONE}}, {"?",cmd_help,"[command] give help on a command",{COMPL_NONE,COMPL_NONE}}, {"!",NULL,"run a shell command on the local system",{COMPL_NONE,COMPL_NONE}}, {"",NULL,NULL,{COMPL_NONE,COMPL_NONE}} @@ -2075,6 +2114,10 @@ struct cli_state *do_connect(const char *server, const char *share) c->protocol = max_protocol; + if (use_kerberos) { + c->use_spnego = True; + } + if (!cli_session_request(c, &calling, &called)) { char *p; d_printf("session request to %s failed (%s)\n", @@ -2198,6 +2241,7 @@ static void usage(char *pname) d_printf("\t-h Print this help message.\n"); d_printf("\t-I dest IP use this IP to connect to\n"); d_printf("\t-E write messages to stderr instead of stdout\n"); + d_printf("\t-k use kerberos (active directory) authentication\n"); d_printf("\t-U username set the network username\n"); d_printf("\t-L host get a list of shares available on a host\n"); d_printf("\t-t terminal code terminal i/o code {sjis|euc|jis7|jis8|junet|hex}\n"); @@ -2488,7 +2532,7 @@ static int do_message_op(void) } while ((opt = - getopt(argc, argv,"s:O:R:M:i:Nn:d:Pp:l:hI:EU:L:t:m:W:T:D:c:b:A:")) != EOF) { + getopt(argc, argv,"s:O:R:M:i:Nn:d:Pp:l:hI:EU:L:t:m:W:T:D:c:b:A:k")) != EOF) { switch (opt) { case 's': pstrcpy(servicesf, optarg); @@ -2646,6 +2690,15 @@ static int do_message_op(void) case 'b': io_bufsize = MAX(1, atoi(optarg)); break; + case 'k': +#if HAVE_KRB5 + use_kerberos = True; + got_pass = True; +#else + d_printf("No kerberos support compiled in\n"); + exit(1); +#endif + break; default: usage(pname); exit(1); -- cgit