/* * raptor_udf.c — Minimal MariaDB UDF for sys_exec() * Compile: gcc -shared -fPIC -o raptor_udf.so raptor_udf.c */ #include #include typedef long long longlong; typedef char my_bool; typedef struct { my_bool maybe_null; unsigned int decimals; unsigned long max_length; char *ptr; my_bool const_item; void *extension; } UDF_INIT; typedef struct { unsigned int arg_count; int *arg_type; char **args; unsigned long *lengths; char *maybe_null; char **attributes; unsigned long *attribute_lengths; void *extension; } UDF_ARGS; my_bool sys_exec_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { if (args->arg_count != 1) { strcpy(message, "one argument required"); return 1; } return 0; } longlong sys_exec(UDF_INIT *initid, UDF_ARGS *args, char *is_null, char *error) { if (!args->args[0]) return -1; char *cmd = strndup(args->args[0], args->lengths[0]); longlong ret = (longlong)system(cmd); free(cmd); return ret; } void sys_exec_deinit(UDF_INIT *initid) {}