1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
/* mod_ntlm file: $Id: smbencrypt.inc.c,v 1.2 2003/02/21 01:55:14 casz Exp $ */
/*
* Unix SMB/Netbios implementation. Version 1.9. SMB parameters and
* setup Copyright (C) Andrew Tridgell 1992-1997 Modified by Jeremy
* Allison 1995. This program is free software; you can redistribute
* it and/or modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details. You should have received
* a copy of the GNU General Public License along with this program;
* if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
* Cambridge, MA 02139, USA. */
#include <string.h>
#include <arpa/inet.h>
#include <dirent.h>
#include <string.h>
#include <netinet/in.h>
#include "smblib-priv.h"
#define uchar unsigned char
#include "byteorder.h"
static char *StrnCpy(char *dest, char *src, int n);
static void strupper(char *s);
/*
* This implements the X/Open SMB password encryption It takes a password,
* a 8 byte "crypt key" and puts 24 bytes of encrypted password into p24 */
static void
SMBencrypt(uchar * passwd, uchar * c8, uchar * p24)
{
uchar p14[15], p21[21];
memset(p21, '\0', 21);
memset(p14, '\0', 14);
StrnCpy((char *) p14, (char *) passwd, 14);
strupper((char *) p14);
E_P16(p14, p21);
E_P24(p21, c8, p24);
}
/****************************************************************************
line strncpy but always null terminates. Make sure there is room!
****************************************************************************/
static char *
StrnCpy(char *dest, char *src, int n)
{
char *d = dest;
if (!dest)
return (NULL);
if (!src) {
*dest = 0;
return (dest);
}
while (n-- && (*d++ = *src++)) ;
*d = 0;
return (dest);
}
static void
strupper(char *s)
{
while (*s) {
if (islower((int) *s))
*s = toupper(*s);
s++;
}
}
|