| 1110 | DEFAULT(STRINGIFY_ARG(LICENSE))); |
| 1111 | |
| 1112 | static 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 | } |
| 1165 | static bool fix_log(char** logname, const char* default_logname, |
| 1166 | const char*ext, bool enabled, void (*reopen)(char*)) |
| 1167 | { |
nothing calls this directly
no test coverage detected