Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
fc6076ca
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
大约 1 年 前同步成功
通知
9
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fc6076ca
编写于
6月 21, 2016
作者:
A
Andy Polyakov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rand/randfile.c: make it non-ASCII-savvy.
Reviewed-by:
N
Richard Levitte
<
levitte@openssl.org
>
上级
09487816
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
85 addition
and
49 deletion
+85
-49
crypto/rand/randfile.c
crypto/rand/randfile.c
+85
-49
未找到文件。
crypto/rand/randfile.c
浏览文件 @
fc6076ca
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
* https://www.openssl.org/source/license.html
* https://www.openssl.org/source/license.html
*/
*/
#include "
e_os
.h"
#include "
internal/cryptlib
.h"
#include <errno.h>
#include <errno.h>
#include <stdio.h>
#include <stdio.h>
...
@@ -57,6 +57,8 @@
...
@@ -57,6 +57,8 @@
# define chmod _chmod
# define chmod _chmod
# define open _open
# define open _open
# define fdopen _fdopen
# define fdopen _fdopen
# define fstat _fstat
# define fileno _fileno
#endif
#endif
#undef BUFSIZE
#undef BUFSIZE
...
@@ -76,12 +78,8 @@
...
@@ -76,12 +78,8 @@
# if __INITIAL_POINTER_SIZE == 64
# if __INITIAL_POINTER_SIZE == 64
# pragma pointer_size save
# pragma pointer_size save
# pragma pointer_size 32
# pragma pointer_size 32
# endif
typedef
char
*
char_ptr32
;
typedef
char
*
char_ptr32
;
# if __INITIAL_POINTER_SIZE == 64
# pragma pointer_size restore
# pragma pointer_size restore
# endif
/*
/*
* On VMS, setbuf() will only take 32-bit pointers, and a compilation
* On VMS, setbuf() will only take 32-bit pointers, and a compilation
* with /POINTER_SIZE=64 will give off a MAYLOSEDATA2 warning here.
* with /POINTER_SIZE=64 will give off a MAYLOSEDATA2 warning here.
...
@@ -90,20 +88,18 @@ typedef char *char_ptr32;
...
@@ -90,20 +88,18 @@ typedef char *char_ptr32;
* As for the buffer parameter, we only use NULL here, so that passes as
* As for the buffer parameter, we only use NULL here, so that passes as
* well...
* well...
*/
*/
static
void
vms_setbuf
(
FILE
*
fp
,
char
*
buf
)
# define setbuf(fp,buf) (setbuf)((__FILE_ptr32)(fp), (char_ptr32)(buf))
{
# endif
setbuf
((
__FILE_ptr32
)
fp
,
(
char_ptr32
)
buf
);
}
/*
/*
* This declaration is a nasty hack to get around vms' extension to fopen for
* This declaration is a nasty hack to get around vms' extension to fopen for
* passing in sharing options being disabled by /STANDARD=ANSI89
* passing in sharing options being disabled by /STANDARD=ANSI89
*/
*/
static
__FILE_ptr32
(
*
const
vms_fopen
)(
const
char
*
,
const
char
*
,
...)
=
static
__FILE_ptr32
(
*
const
vms_fopen
)(
const
char
*
,
const
char
*
,
...)
=
(
__FILE_ptr32
(
*
)(
const
char
*
,
const
char
*
,
...))
fopen
;
(
__FILE_ptr32
(
*
)(
const
char
*
,
const
char
*
,
...))
fopen
;
# define VMS_OPEN_ATTRS "shr=get,put,upd,del","ctx=bin,stm","rfm=stm","rat=none","mrs=0"
# define VMS_OPEN_ATTRS "shr=get,put,upd,del","ctx=bin,stm","rfm=stm","rat=none","mrs=0"
# define fopen(fname,mode) vms_fopen((fname), (mode), VMS_OPEN_ATTRS)
# define openssl_fopen(fname,mode) vms_fopen((fname), (mode), VMS_OPEN_ATTRS)
# define setbuf(fp,buf) vms_setbuf((fp), (buf))
#endif
#endif
#define RFILE ".rnd"
#define RFILE ".rnd"
...
@@ -125,10 +121,17 @@ int RAND_load_file(const char *file, long bytes)
...
@@ -125,10 +121,17 @@ int RAND_load_file(const char *file, long bytes)
struct
stat
sb
;
struct
stat
sb
;
#endif
#endif
int
i
,
ret
=
0
,
n
;
int
i
,
ret
=
0
,
n
;
FILE
*
in
;
FILE
*
in
=
NULL
;
if
(
file
==
NULL
)
if
(
file
==
NULL
)
return
(
0
);
return
0
;
if
(
bytes
==
0
)
return
ret
;
in
=
openssl_fopen
(
file
,
"rb"
);
if
(
in
==
NULL
)
goto
err
;
#ifndef OPENSSL_NO_POSIX_IO
#ifndef OPENSSL_NO_POSIX_IO
/*
/*
...
@@ -138,17 +141,11 @@ int RAND_load_file(const char *file, long bytes)
...
@@ -138,17 +141,11 @@ int RAND_load_file(const char *file, long bytes)
* applications such as Valgrind.
* applications such as Valgrind.
*/
*/
memset
(
&
sb
,
0
,
sizeof
(
sb
));
memset
(
&
sb
,
0
,
sizeof
(
sb
));
if
(
stat
(
file
,
&
sb
)
<
0
)
if
(
fstat
(
fileno
(
in
)
,
&
sb
)
<
0
)
return
(
0
)
;
goto
err
;
RAND_add
(
&
sb
,
sizeof
(
sb
),
0
.
0
);
RAND_add
(
&
sb
,
sizeof
(
sb
),
0
.
0
);
#endif
if
(
bytes
==
0
)
return
(
ret
);
in
=
fopen
(
file
,
"rb"
);
# if defined(S_ISBLK) && defined(S_ISCHR)
if
(
in
==
NULL
)
goto
err
;
#if defined(S_ISBLK) && defined(S_ISCHR) && !defined(OPENSSL_NO_POSIX_IO)
if
(
S_ISBLK
(
sb
.
st_mode
)
||
S_ISCHR
(
sb
.
st_mode
))
{
if
(
S_ISBLK
(
sb
.
st_mode
)
||
S_ISCHR
(
sb
.
st_mode
))
{
/*
/*
* this file is a device. we don't want read an infinite number of
* this file is a device. we don't want read an infinite number of
...
@@ -158,6 +155,7 @@ int RAND_load_file(const char *file, long bytes)
...
@@ -158,6 +155,7 @@ int RAND_load_file(const char *file, long bytes)
bytes
=
(
bytes
==
-
1
)
?
2048
:
bytes
;
/* ok, is 2048 enough? */
bytes
=
(
bytes
==
-
1
)
?
2048
:
bytes
;
/* ok, is 2048 enough? */
setbuf
(
in
,
NULL
);
/* don't do buffered reads */
setbuf
(
in
,
NULL
);
/* don't do buffered reads */
}
}
# endif
#endif
#endif
for
(;;)
{
for
(;;)
{
if
(
bytes
>
0
)
if
(
bytes
>
0
)
...
@@ -176,10 +174,11 @@ int RAND_load_file(const char *file, long bytes)
...
@@ -176,10 +174,11 @@ int RAND_load_file(const char *file, long bytes)
break
;
break
;
}
}
}
}
fclose
(
in
);
OPENSSL_cleanse
(
buf
,
BUFSIZE
);
OPENSSL_cleanse
(
buf
,
BUFSIZE
);
err:
err:
return
(
ret
);
if
(
in
!=
NULL
)
fclose
(
in
);
return
ret
;
}
}
int
RAND_write_file
(
const
char
*
file
)
int
RAND_write_file
(
const
char
*
file
)
...
@@ -191,9 +190,15 @@ int RAND_write_file(const char *file)
...
@@ -191,9 +190,15 @@ int RAND_write_file(const char *file)
#ifndef OPENSSL_NO_POSIX_IO
#ifndef OPENSSL_NO_POSIX_IO
struct
stat
sb
;
struct
stat
sb
;
# if defined(S_ISBLK) && defined(S_ISCHR)
# ifdef _WIN32
/*
* Check for |file| being a driver as "ASCII-safe" on Windows,
* because driver paths are always ASCII.
*/
# endif
i
=
stat
(
file
,
&
sb
);
i
=
stat
(
file
,
&
sb
);
if
(
i
!=
-
1
)
{
if
(
i
!=
-
1
)
{
# if defined(S_ISBLK) && defined(S_ISCHR)
if
(
S_ISBLK
(
sb
.
st_mode
)
||
S_ISCHR
(
sb
.
st_mode
))
{
if
(
S_ISBLK
(
sb
.
st_mode
)
||
S_ISCHR
(
sb
.
st_mode
))
{
/*
/*
* this file is a device. we don't write back to it. we
* this file is a device. we don't write back to it. we
...
@@ -201,13 +206,14 @@ int RAND_write_file(const char *file)
...
@@ -201,13 +206,14 @@ int RAND_write_file(const char *file)
* device. Otherwise attempting to write to and chmod the device
* device. Otherwise attempting to write to and chmod the device
* causes problems.
* causes problems.
*/
*/
return
(
1
)
;
return
1
;
}
}
# endif
# endif
}
}
#endif
#endif
#if defined(O_CREAT) && !defined(OPENSSL_NO_POSIX_IO) && !defined(OPENSSL_SYS_VMS)
#if defined(O_CREAT) && !defined(OPENSSL_NO_POSIX_IO) && \
!defined(OPENSSL_SYS_VMS) && !defined(OPENSSL_SYS_WINDOWS)
{
{
# ifndef O_BINARY
# ifndef O_BINARY
# define O_BINARY 0
# define O_BINARY 0
...
@@ -241,10 +247,10 @@ int RAND_write_file(const char *file)
...
@@ -241,10 +247,10 @@ int RAND_write_file(const char *file)
* rand file in a concurrent use situation.
* rand file in a concurrent use situation.
*/
*/
out
=
fopen
(
file
,
"rb+"
);
out
=
openssl_
fopen
(
file
,
"rb+"
);
#endif
#endif
if
(
out
==
NULL
)
if
(
out
==
NULL
)
out
=
fopen
(
file
,
"wb"
);
out
=
openssl_
fopen
(
file
,
"wb"
);
if
(
out
==
NULL
)
if
(
out
==
NULL
)
goto
err
;
goto
err
;
...
@@ -276,38 +282,68 @@ int RAND_write_file(const char *file)
...
@@ -276,38 +282,68 @@ int RAND_write_file(const char *file)
const
char
*
RAND_file_name
(
char
*
buf
,
size_t
size
)
const
char
*
RAND_file_name
(
char
*
buf
,
size_t
size
)
{
{
char
*
s
=
NULL
;
char
*
s
=
NULL
;
int
use_randfile
=
1
;
#ifdef __OpenBSD__
#ifdef __OpenBSD__
struct
stat
sb
;
struct
stat
sb
;
#endif
#endif
if
(
OPENSSL_issetugid
()
==
0
)
#if defined(_WIN32) && defined(CP_UTF8)
s
=
getenv
(
"RANDFILE"
);
DWORD
len
;
if
(
s
!=
NULL
&&
*
s
&&
strlen
(
s
)
+
1
<
size
)
{
WCHAR
*
var
,
*
val
;
if
(
OPENSSL_strlcpy
(
buf
,
s
,
size
)
>=
size
)
return
NULL
;
if
((
var
=
L"RANDFILE"
,
}
else
{
len
=
GetEnvironmentVariableW
(
var
,
NULL
,
0
))
==
0
#ifdef OPENSSL_SYS_WINDOWS
&&
(
var
=
L"HOME"
,
use_randfile
=
0
,
if
((
s
=
getenv
(
"HOME"
))
==
NULL
len
=
GetEnvironmentVariableW
(
var
,
NULL
,
0
))
==
0
&&
(
s
=
getenv
(
"USERPROFILE"
))
==
NULL
)
{
&&
(
var
=
L"USERPROFILE"
,
s
=
getenv
(
"SYSTEMROOT"
);
len
=
GetEnvironmentVariableW
(
var
,
NULL
,
0
))
==
0
)
{
var
=
L"SYSTEMROOT"
,
len
=
GetEnvironmentVariableW
(
var
,
NULL
,
0
);
}
if
(
len
!=
0
)
{
int
sz
;
val
=
_alloca
(
len
*
sizeof
(
WCHAR
));
if
(
GetEnvironmentVariableW
(
var
,
val
,
len
)
<
len
&&
(
sz
=
WideCharToMultiByte
(
CP_UTF8
,
0
,
val
,
-
1
,
NULL
,
0
,
NULL
,
NULL
))
!=
0
)
{
s
=
_alloca
(
sz
);
if
(
WideCharToMultiByte
(
CP_UTF8
,
0
,
val
,
-
1
,
s
,
sz
,
NULL
,
NULL
)
==
0
)
s
=
NULL
;
}
}
}
#else
#else
if
(
OPENSSL_issetugid
()
==
0
)
{
s
=
getenv
(
"RANDFILE"
);
}
else
{
use_randfile
=
0
;
if
(
OPENSSL_issetugid
()
==
0
)
if
(
OPENSSL_issetugid
()
==
0
)
s
=
getenv
(
"HOME"
);
s
=
getenv
(
"HOME"
);
}
#endif
#endif
#ifdef DEFAULT_HOME
#ifdef DEFAULT_HOME
if
(
s
==
NULL
)
{
if
(
!
use_randfile
&&
s
==
NULL
)
{
s
=
DEFAULT_HOME
;
s
=
DEFAULT_HOME
;
}
}
#endif
#endif
if
(
s
&&
*
s
&&
strlen
(
s
)
+
strlen
(
RFILE
)
+
2
<
size
)
{
if
(
s
!=
NULL
&&
*
s
)
{
size_t
len
=
strlen
(
s
);
if
(
use_randfile
&&
len
+
1
<
size
)
{
if
(
OPENSSL_strlcpy
(
buf
,
s
,
size
)
>=
size
)
return
NULL
;
}
else
if
(
len
+
strlen
(
RFILE
)
+
2
<
size
)
{
OPENSSL_strlcpy
(
buf
,
s
,
size
);
OPENSSL_strlcpy
(
buf
,
s
,
size
);
#ifndef OPENSSL_SYS_VMS
#ifndef OPENSSL_SYS_VMS
OPENSSL_strlcat
(
buf
,
"/"
,
size
);
OPENSSL_strlcat
(
buf
,
"/"
,
size
);
#endif
#endif
OPENSSL_strlcat
(
buf
,
RFILE
,
size
);
OPENSSL_strlcat
(
buf
,
RFILE
,
size
);
}
else
}
buf
[
0
]
=
'\0'
;
/* no file name */
}
else
{
buf
[
0
]
=
'\0'
;
/* no file name */
}
}
#ifdef __OpenBSD__
#ifdef __OpenBSD__
...
@@ -321,12 +357,12 @@ const char *RAND_file_name(char *buf, size_t size)
...
@@ -321,12 +357,12 @@ const char *RAND_file_name(char *buf, size_t size)
if
(
!
buf
[
0
])
if
(
!
buf
[
0
])
if
(
OPENSSL_strlcpy
(
buf
,
"/dev/arandom"
,
size
)
>=
size
)
{
if
(
OPENSSL_strlcpy
(
buf
,
"/dev/arandom"
,
size
)
>=
size
)
{
return
(
NULL
)
;
return
NULL
;
}
}
if
(
stat
(
buf
,
&
sb
)
==
-
1
)
if
(
stat
(
buf
,
&
sb
)
==
-
1
)
if
(
OPENSSL_strlcpy
(
buf
,
"/dev/arandom"
,
size
)
>=
size
)
{
if
(
OPENSSL_strlcpy
(
buf
,
"/dev/arandom"
,
size
)
>=
size
)
{
return
(
NULL
)
;
return
NULL
;
}
}
#endif
#endif
return
(
buf
)
;
return
buf
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录