made smbclient cope better with arbitrary principle forms
authorAndrew Tridgell <tridge@samba.org>
Sun, 21 Oct 2001 03:25:34 +0000 (03:25 +0000)
committerAndrew Tridgell <tridge@samba.org>
Sun, 21 Oct 2001 03:25:34 +0000 (03:25 +0000)
source/libsmb/cliconnect.c
source/libsmb/clikrb5.c
source/libsmb/clispnego.c

index e24f081c69d30ed9476f489801bb7d2ef0672f5a..11825ab0361278163b712d3a4d36bbc8d43e2afe 100644 (file)
@@ -387,6 +387,8 @@ static BOOL cli_session_setup_kerberos(struct cli_state *cli, char *principle, c
 {
        DATA_BLOB blob2, negTokenTarg;
 
+       d_printf("Doing kerberos session setup\n");
+
        /* generate the encapsulated kerberos5 ticket */
        negTokenTarg = spnego_gen_negTokenTarg(cli, principle);
 
@@ -509,6 +511,8 @@ static BOOL cli_session_setup_spnego(struct cli_state *cli, char *user,
        int i;
        BOOL got_kerberos_mechanism = False;
 
+       d_printf("Doing spnego session setup\n");
+
        /* the server might not even do spnego */
        if (cli->secblob.length == 16) {
                DEBUG(3,("server didn't supply a full spnego negprot\n"));
index 5fef97c5713026757f5df9ab8d8761fb6d48671a..98e27fb9c4c7f47ff980da92a86d5568fe2bbf3c 100644 (file)
@@ -28,8 +28,7 @@
 static krb5_error_code krb5_mk_req2(krb5_context context, 
                                    krb5_auth_context *auth_context, 
                                    const krb5_flags ap_req_options,
-                                   const char *service, 
-                                   const char *realm,
+                                   const char *principle,
                                    krb5_ccache ccache, 
                                    krb5_data *outbuf)
 {
@@ -39,10 +38,9 @@ static krb5_error_code krb5_mk_req2(krb5_context context,
        krb5_creds                creds;
        krb5_data in_data;
        
-       retval = krb5_build_principal(context, &server, strlen(realm),
-                                     realm, service, NULL);
+       retval = krb5_parse_name(context, principle, &server);
        if (retval) {
-               DEBUG(1,("Failed to build principle for %s@%s\n", service, realm));
+               DEBUG(1,("Failed to parse principle %s\n", principle));
                return retval;
        }
        
@@ -89,7 +87,7 @@ cleanup_princ:
 /*
   get a kerberos5 ticket for the given service 
 */
-DATA_BLOB krb5_get_ticket(char *service, char *realm)
+DATA_BLOB krb5_get_ticket(char *principle)
 {
        krb5_error_code retval;
        krb5_data packet;
@@ -114,7 +112,7 @@ DATA_BLOB krb5_get_ticket(char *service, char *realm)
        if ((retval = krb5_mk_req2(context, 
                                   &auth_context, 
                                   0, 
-                                  service, realm,
+                                  principle,
                                   ccdef, &packet))) {
                goto failed;
        }
index c421d759134da340a3403a38868cec9c8ab77528..bcce0f61737eb5c228a65c034446610a9dbc0602 100644 (file)
@@ -271,24 +271,11 @@ BOOL spnego_parse_krb5_wrap(DATA_BLOB blob, DATA_BLOB *ticket)
 */
 DATA_BLOB spnego_gen_negTokenTarg(struct cli_state *cli, char *principle)
 {
-       char *p;
-       fstring service;
-       char *realm;
        DATA_BLOB tkt, tkt_wrapped, targ;
        const char *krb_mechs[] = {OID_KERBEROS5_OLD, OID_NTLMSSP, NULL};
 
-       fstrcpy(service, principle);
-       p = strchr_m(service, '@');
-       if (!p) {
-               DEBUG(1,("Malformed principle [%s] in spnego_gen_negTokenTarg\n",
-                        principle));
-               return data_blob(NULL, 0);
-       }
-       *p = 0;
-       realm = p+1;
-
        /* get a kerberos ticket for the service */
-       tkt = krb5_get_ticket(service, realm);
+       tkt = krb5_get_ticket(principle);
 
        /* wrap that up in a nice GSS-API wrapping */
        tkt_wrapped = spnego_gen_krb5_wrap(tkt);