MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / check_log_path

Function check_log_path

sql/sys_vars.cc:1112–1164  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1110 DEFAULT(STRINGIFY_ARG(LICENSE)));
1111
1112static bool check_log_path(sys_var *self, THD *thd, set_var *var)
1113{
1114 if (!var->value)
1115 return false; // DEFAULT is ok
1116
1117 if (!var->save_result.string_value.str)
1118 return true;
1119
1120 if (var->save_result.string_value.length > FN_REFLEN)
1121 { // path is too long
1122 my_error(ER_PATH_LENGTH, MYF(0), self->name.str);
1123 return true;
1124 }
1125
1126 char path[FN_REFLEN];
1127 size_t path_length= unpack_filename(path, var->save_result.string_value.str);
1128
1129 if (!path_length)
1130 return true;
1131
1132 if (!is_filename_allowed(var->save_result.string_value.str,
1133 var->save_result.string_value.length, TRUE))
1134 {
1135 my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0),
1136 self->name.str, var->save_result.string_value.str);
1137 return true;
1138 }
1139
1140 MY_STAT f_stat;
1141
1142 if (my_stat(path, &f_stat, MYF(0)))
1143 {
1144 if (!MY_S_ISREG(f_stat.st_mode) || !(f_stat.st_mode & MY_S_IWRITE))
1145 return true; // not a regular writable file
1146 return false;
1147 }
1148
1149 (void) dirname_part(path, var->save_result.string_value.str, &path_length);
1150
1151 if (var->save_result.string_value.length - path_length >= FN_LEN)
1152 { // filename is too long
1153 my_error(ER_PATH_LENGTH, MYF(0), self->name.str);
1154 return true;
1155 }
1156
1157 if (!path_length) // no path is good path (remember, relative to datadir)
1158 return false;
1159
1160 if (my_access(path, (F_OK|W_OK)))
1161 return true; // directory is not writable
1162
1163 return false;
1164}
1165static bool fix_log(char** logname, const char* default_logname,
1166 const char*ext, bool enabled, void (*reopen)(char*))
1167{

Callers

nothing calls this directly

Calls 6

my_errorFunction · 0.85
unpack_filenameFunction · 0.85
is_filename_allowedFunction · 0.85
dirname_partFunction · 0.85
my_accessFunction · 0.85
my_statFunction · 0.50

Tested by

no test coverage detected