#include <time.h>
#include "smb.h"
Go to the source code of this file.
|
void | generate_random_buffer_ntlmssp (unsigned char *out, int len) |
|
void | put_long_date_ntlmssp (char *p, time_t t) |
|
void | GetTimeOfDay_ntlmssp (struct timeval *tval) |
|
size_t | smb_iconv_ntlmssp (smb_iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft) |
|
smb_iconv_t | smb_iconv_open_ntlmssp (const char *tocode, const char *fromcode) |
|
int | smb_iconv_close_ntlmssp (smb_iconv_t cd) |
|
void | smb_arc4_init_ntlmssp (unsigned char arc4_state_out[258], const unsigned char *key, size_t keylen) |
|
void | smb_arc4_crypt_ntlmssp (unsigned char arc4_state_inout[258], unsigned char *data, size_t len) |
|
void | lazy_initialize_conv_ntlmssp (void) |
|
void | init_iconv_ntlmssp (void) |
|
◆ generate_random_buffer_ntlmssp()
void generate_random_buffer_ntlmssp |
( |
unsigned char * |
out, |
|
|
int |
len |
|
) |
| |
Definition at line 167 of file genrand.c.
169 static int urand_fd = -1;
170 unsigned char md4_buf[64];
171 unsigned char tmp_buf[16];
174 if(!done_reseed_ntlmssp) {
175 urand_fd = do_reseed_ntlmssp(
True, urand_fd);
176 done_reseed_ntlmssp =
True;
179 if (urand_fd != -1 && len > 0) {
181 if (read(urand_fd, out, len) == len)
187 do_reseed_ntlmssp(
False, -1);
188 done_reseed_ntlmssp =
True;
200 int copy_len = len > 16 ? 16 : len;
204 memcpy(p, tmp_buf, copy_len);
void mdfour_ntlmssp(unsigned char *out, const unsigned char *in, int n)
void smb_arc4_crypt_ntlmssp(unsigned char arc4_state_inout[258], unsigned char *data, size_t len)
Referenced by LMv2_generate_response_ntlmssp(), ntlmssp_genauth_keyexchg(), ntlmssp_genauth_ntlm2(), and NTLMv2_generate_client_data_ntlmssp().
◆ GetTimeOfDay_ntlmssp()
void GetTimeOfDay_ntlmssp |
( |
struct timeval * |
tval | ) |
|
Definition at line 92 of file time.c.
94 gettimeofday(tval,NULL);
◆ init_iconv_ntlmssp()
void init_iconv_ntlmssp |
( |
void |
| ) |
|
Initialize iconv conversion descriptors.
This is called the first time it is needed, and also called again every time the configuration is reloaded, because the charset or codepage might have changed.
Definition at line 214 of file charcnv.c.
217 bool did_reload =
False;
229 const char *n1 = charset_name_ntlmssp((
charset_t)c1);
230 const char *n2 = charset_name_ntlmssp((
charset_t)c2);
231 if (conv_handles_ntlmssp[c1][c2] &&
232 strcmp(n1, conv_handles_ntlmssp[c1][c2]->from_name) == 0 &&
233 strcmp(n2, conv_handles_ntlmssp[c1][c2]->to_name) == 0)
238 if (conv_handles_ntlmssp[c1][c2])
242 if (conv_handles_ntlmssp[c1][c2] == (
smb_iconv_t)-1) {
250 if (!conv_handles_ntlmssp[c1][c2]) {
252 " initialization failed");
262 conv_silent_ntlmssp =
True;
264 conv_silent_ntlmssp =
False;
void init_valid_table_ntlmssp(void)
void log_legacy_write(const char *format,...)
Legacy function to write a log message.
smb_iconv_t smb_iconv_open_ntlmssp(const char *tocode, const char *fromcode)
int smb_iconv_close_ntlmssp(smb_iconv_t cd)
References False.
◆ lazy_initialize_conv_ntlmssp()
void lazy_initialize_conv_ntlmssp |
( |
void |
| ) |
|
Definition at line 196 of file charcnv.c.
198 static int initialized =
False;
void init_iconv_ntlmssp(void)
◆ put_long_date_ntlmssp()
void put_long_date_ntlmssp |
( |
char * |
p, |
|
|
time_t |
t |
|
) |
| |
◆ smb_arc4_crypt_ntlmssp()
void smb_arc4_crypt_ntlmssp |
( |
unsigned char |
arc4_state_inout[258], |
|
|
unsigned char * |
data, |
|
|
size_t |
len |
|
) |
| |
Definition at line 57 of file arc4.c.
59 unsigned char index_i = arc4_state_inout[256];
60 unsigned char index_j = arc4_state_inout[257];
63 for( ind = 0; ind < len; ind++) {
68 index_j += arc4_state_inout[index_i];
70 tc = arc4_state_inout[index_i];
71 arc4_state_inout[index_i] = arc4_state_inout[index_j];
72 arc4_state_inout[index_j] = tc;
74 t = arc4_state_inout[index_i] + arc4_state_inout[index_j];
75 data[ind] = data[ind] ^ arc4_state_inout[t];
78 arc4_state_inout[256] = index_i;
79 arc4_state_inout[257] = index_j;
◆ smb_arc4_init_ntlmssp()
void smb_arc4_init_ntlmssp |
( |
unsigned char |
arc4_state_out[258], |
|
|
const unsigned char * |
key, |
|
|
size_t |
keylen |
|
) |
| |
Definition at line 30 of file arc4.c.
35 for (ind = 0; ind < 256; ind++) {
36 arc4_state_out[ind] = (
unsigned char)ind;
39 for( ind = 0; ind < 256; ind++) {
42 j += (arc4_state_out[ind] + key[ind%keylen]);
44 tc = arc4_state_out[ind];
45 arc4_state_out[ind] = arc4_state_out[j];
46 arc4_state_out[j] = tc;
48 arc4_state_out[256] = 0;
49 arc4_state_out[257] = 0;
◆ smb_iconv_close_ntlmssp()
◆ smb_iconv_ntlmssp()
size_t smb_iconv_ntlmssp |
( |
smb_iconv_t |
cd, |
|
|
const char ** |
inbuf, |
|
|
size_t * |
inbytesleft, |
|
|
char ** |
outbuf, |
|
|
size_t * |
outbytesleft |
|
) |
| |
This is a simple portable iconv() implementaion.
It only knows about a very small number of character sets - just enough that Samba works on systems that don't have iconv.
Definition at line 59 of file iconv.c.
70 inbuf, inbytesleft, outbuf, outbytesleft);
75 while (*inbytesleft > 0) {
77 bufsize =
sizeof(cvtbuf);
80 inbuf, inbytesleft, &bufp, &bufsize) == -1
81 && errno != E2BIG)
return -1;
84 bufsize =
sizeof(cvtbuf) - bufsize;
87 (
const char **)&bufp, &bufsize,
88 outbuf, outbytesleft) == -1)
return -1;
size_t(* pull)(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t(* direct)(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t(* push)(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
References _smb_iconv_t::cd_direct, _smb_iconv_t::cd_pull, _smb_iconv_t::cd_push, _smb_iconv_t::direct, _smb_iconv_t::pull, and _smb_iconv_t::push.
◆ smb_iconv_open_ntlmssp()
smb_iconv_t smb_iconv_open_ntlmssp |
( |
const char * |
tocode, |
|
|
const char * |
fromcode |
|
) |
| |
Definition at line 105 of file iconv.c.
121 if (strcasecmp(fromcode, tocode) == 0) {
122 ret->
direct = iconv_copy_ntlmssp;
127 from = find_charset_functions_ntlmssp(fromcode);
130 to = find_charset_functions_ntlmssp(tocode);
134 #ifdef HAVE_NATIVE_ICONV 136 ret->
cd_pull = iconv_open(
"UTF-16LE", fromcode);
137 if (ret->
cd_pull == (iconv_t)-1)
138 ret->
cd_pull = iconv_open(
"UCS-2LE", fromcode);
139 if (ret->
cd_pull != (iconv_t)-1)
140 ret->
pull = sys_iconv;
144 ret->
cd_push = iconv_open(tocode,
"UTF-16LE");
145 if (ret->
cd_push == (iconv_t)-1)
146 ret->
cd_push = iconv_open(tocode,
"UCS-2LE");
147 if (ret->
cd_push != (iconv_t)-1)
148 ret->
push = sys_iconv;
161 if (is_utf16_ntlmssp(fromcode) && to) {
167 if (is_utf16_ntlmssp(tocode) && from) {
174 #ifdef HAVE_NATIVE_ICONV 175 if (is_utf16(fromcode)) {
181 if (is_utf16(tocode)) {
size_t(* push)(void *, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t(* pull)(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t(* direct)(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t(* push)(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
size_t(* pull)(void *, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
#define SMB_MALLOC_P(type)
References _smb_iconv_t::direct, _smb_iconv_t::from_name, SMB_MALLOC_P, SMB_STRDUP, and _smb_iconv_t::to_name.