26int mysqlnd_local_infile_init(
void **
ptr,
const char *
const filename)
31 DBG_ENTER(
"mysqlnd_local_infile_init");
41 if (
PG(open_basedir)) {
43 strcpy(info->
error_msg,
"open_basedir restriction in effect. Unable to open file");
65int mysqlnd_local_infile_read(
void *
ptr,
zend_uchar *
buf,
unsigned int buf_len)
70 DBG_ENTER(
"mysqlnd_local_infile_read");
75 strcpy(info->
error_msg,
"Error reading file");
86int mysqlnd_local_infile_error(
void *
ptr,
char *error_buf,
unsigned int error_buf_len)
90 DBG_ENTER(
"mysqlnd_local_infile_error");
94 DBG_INF_FMT(
"have info, %d", info->
error_no);
98 strlcpy(error_buf,
"Unknown error", error_buf_len);
107void mysqlnd_local_infile_end(
void *
ptr)
135static const char *lost_conn =
"Lost connection to MySQL server during LOAD DATA of a local file";
145 unsigned int buflen = 4096;
155 bool prerequisities_ok =
TRUE;
157 DBG_ENTER(
"mysqlnd_handle_local_infile");
162 if (!is_local_infile_enabled && !is_local_infile_dir_set) {
164 "LOAD DATA LOCAL INFILE is forbidden, check related settings like "
165 "mysqli.allow_local_infile|mysqli.local_infile_directory or "
166 "PDO::MYSQL_ATTR_LOCAL_INFILE|PDO::MYSQL_ATTR_LOCAL_INFILE_DIRECTORY");
167 prerequisities_ok =
FALSE;
173 if (is_local_infile_dir_set) {
179 prerequisities_ok =
FALSE;
188 if (prerequisities_ok && !is_local_infile_enabled && is_local_infile_dir_set) {
191 "LOAD DATA LOCAL INFILE DIRECTORY restriction in effect. Unable to open file");
192 prerequisities_ok =
FALSE;
196 if (!prerequisities_ok) {
265 DBG_INF_FMT(
"%s",
result ==
PASS?
"PASS":
"FAIL");
count(Countable|array $value, int $mode=COUNT_NORMAL)
zend_ffi_ctype_name_buf buf
PHPAPI int php_check_open_basedir_ex(const char *path, int warn)
PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path)
#define mnd_ecalloc(nmemb, size)
#define DBG_RETURN(value)
#define CLIENT_LOCAL_FILES
#define MYSQLND_EE_FILENOTFOUND
#define CR_LOAD_DATA_LOCAL_INFILE_REJECTED
enum func_status enum_func_status
enum_func_status mysqlnd_handle_local_infile(MYSQLND_CONN_DATA *conn, const char *const filename, bool *is_warning)
PHPAPI void mysqlnd_local_infile_default(MYSQLND_CONN_DATA *conn)
struct st_mysqlnd_infile_info MYSQLND_INFILE_INFO
struct st_mysqlnd_vio MYSQLND_VIO
struct st_mysqlnd_connection_data MYSQLND_CONN_DATA
struct st_mysqlnd_protocol_frame_codec MYSQLND_PFC
struct st_mysqlnd_infile MYSQLND_INFILE
#define SET_CLIENT_ERROR(info, err_no, sqlstate, error)
#define MYSQLND_HEADER_SIZE
char * local_infile_directory
struct _php_stream php_stream
struct _php_stream_context php_stream_context
#define php_stream_read(stream, buf, count)
#define php_stream_opendir(path, options, context)
#define php_stream_open_wrapper_ex(path, mode, options, opened, context)
#define php_stream_close(stream)
#define php_stream_closedir(dirstream)
MYSQLND_SESSION_OPTIONS * options
MYSQLND_UPSERT_STATUS * upsert_status
MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory
MYSQLND_ERROR_INFO * error_info
MYSQLND_PFC * protocol_frame_codec
MYSQLND_STRING last_message
char error[MYSQLND_ERRMSG_SIZE+1]
char error_msg[MYSQLND_ERRMSG_SIZE+1]
func_mysqlnd_local_infile__init local_infile_init
func_mysqlnd_local_infile__end local_infile_end
func_mysqlnd_local_infile__error local_infile_error
func_mysqlnd_local_infile__read local_infile_read
struct st_mysqlnd_protocol_frame_codec_data * data
char * local_infile_directory