add ntlm-server-init
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@19375 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -240,6 +240,21 @@ command = {
|
|||||||
}
|
}
|
||||||
help = "Client part of a digest exchange"
|
help = "Client part of a digest exchange"
|
||||||
}
|
}
|
||||||
|
command = {
|
||||||
|
name = "ntlm-server-init"
|
||||||
|
option = {
|
||||||
|
long = "version"
|
||||||
|
type = "integer"
|
||||||
|
help = "ntlm version"
|
||||||
|
default = "1"
|
||||||
|
}
|
||||||
|
option = {
|
||||||
|
long = "kerberos-realm"
|
||||||
|
type = "string"
|
||||||
|
help = "Kerberos realm to communicate with"
|
||||||
|
}
|
||||||
|
help = "Sets up a digest context and return initial parameters"
|
||||||
|
}
|
||||||
command = {
|
command = {
|
||||||
name = "help"
|
name = "help"
|
||||||
name = "?"
|
name = "?"
|
||||||
|
@@ -35,6 +35,7 @@
|
|||||||
RCSID("$Id$");
|
RCSID("$Id$");
|
||||||
#include <kdigest-commands.h>
|
#include <kdigest-commands.h>
|
||||||
#include <hex.h>
|
#include <hex.h>
|
||||||
|
#include <base64.h>
|
||||||
#include "crypto-headers.h"
|
#include "crypto-headers.h"
|
||||||
|
|
||||||
static int version_flag = 0;
|
static int version_flag = 0;
|
||||||
@@ -208,6 +209,94 @@ digest_client_request(struct digest_client_request_options *opt,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <heimntlm.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
ntlm_server_init(struct ntlm_server_init_options *opt,
|
||||||
|
int argc, char ** argv)
|
||||||
|
{
|
||||||
|
krb5_error_code ret;
|
||||||
|
krb5_ntlm ntlm;
|
||||||
|
struct ntlm_type2 type2;
|
||||||
|
krb5_data challange, opaque;
|
||||||
|
struct ntlm_buf data;
|
||||||
|
char *s;
|
||||||
|
|
||||||
|
memset(&type2, 0, sizeof(type2));
|
||||||
|
|
||||||
|
ret = krb5_ntlm_alloc(context, &ntlm);
|
||||||
|
if (ret)
|
||||||
|
krb5_err(context, 1, ret, "krb5_ntlm_alloc");
|
||||||
|
|
||||||
|
ret = krb5_ntlm_init_request(context,
|
||||||
|
ntlm,
|
||||||
|
opt->kerberos_realm_string,
|
||||||
|
id,
|
||||||
|
NTLM_NEG_UNICODE|NTLM_NEG_NTLM,
|
||||||
|
"NUTCRACKER",
|
||||||
|
"L");
|
||||||
|
if (ret)
|
||||||
|
krb5_err(context, 1, ret, "krb5_ntlm_init_request");
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
ret = krb5_ntlm_init_get_challange(context, ntlm, &challange);
|
||||||
|
if (ret)
|
||||||
|
krb5_err(context, 1, ret, "krb5_ntlm_init_get_challange");
|
||||||
|
|
||||||
|
if (challange.length != sizeof(type2.challange))
|
||||||
|
krb5_errx(context, 1, "ntlm challange have wrong length");
|
||||||
|
memcpy(type2.challange, challange.data, sizeof(type2.challange));
|
||||||
|
krb5_data_free(&challange);
|
||||||
|
|
||||||
|
ret = krb5_ntlm_init_get_flags(context, ntlm, &type2.flags);
|
||||||
|
if (ret)
|
||||||
|
krb5_err(context, 1, ret, "krb5_ntlm_init_get_flags");
|
||||||
|
|
||||||
|
krb5_ntlm_init_get_targetname(context, ntlm, &type2.targetname);
|
||||||
|
type2.targetinfo.data = "\x00\x00";
|
||||||
|
type2.targetinfo.length = 2;
|
||||||
|
|
||||||
|
ret = heim_ntlm_encode_type2(&type2, &data);
|
||||||
|
if (ret)
|
||||||
|
krb5_errx(context, 1, "heim_ntlm_encode_type2");
|
||||||
|
|
||||||
|
free(type2.targetname);
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
base64_encode(data.data, data.length, &s);
|
||||||
|
free(data.data);
|
||||||
|
printf("type2=%s\n", s);
|
||||||
|
free(s);
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
ret = krb5_ntlm_init_get_opaque(context, ntlm, &opaque);
|
||||||
|
if (ret)
|
||||||
|
krb5_err(context, 1, ret, "krb5_ntlm_init_get_opaque");
|
||||||
|
|
||||||
|
base64_encode(opaque.data, opaque.length, &s);
|
||||||
|
krb5_data_free(&opaque);
|
||||||
|
printf("opaque=%s\n", s);
|
||||||
|
free(s);
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
krb5_ntlm_free(context, ntlm);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user