<< 2008년 5월 11일 (일) | | 2008년 5월 13일 (화) >>

MySQL UDF를 활용한 사용자 정의 함수 추가

1. 추가항 함수 구현

 - syslogudf.c 파일에 기능 구현
#include <mysql.h>
#include <string.h>
#include <syslog.h>

my_bool logger_init(UDF_INIT *initid, UDF_ARGS *args,
char *message) {
initid->maybe_null=0;
return 0;
}

long long logger(UDF_INIT *initid, UDF_ARGS *args,
char *is_null, char *error) {
if (args->arg_count != 1) {
strcpy(error, "LOGGER(): needs message");
return 1;
}

if (args->arg_type[0] != STRING_RESULT) {
strcpy(error, "LOGGER() message
should be string");
return 1;
}

syslog(LOG_INFO,"%s",args->args[0]);
*is_null = 0;
*error = 0;

return 0;
}
2. 컴파일
gcc -I /usr/include/mysql/ -shared -o 
syslogudf.so syslogudf.c
3. mySQL에 함수 추가를 위한 so로드
mysql> create function logger returns 
integer soname 'syslogudf.so';
Query OK, 0 rows affected (0.00 sec)
4.테스트

 - 임의로 syslog떨어뜨리기 위한 쿼리 만들어서 실행함
mysql> select logger(concat(user()," wishes you ",
-> if(rand()>0.3,"good","bad")," luck"));
5. syslog 결과
$ tail -1 /var/log/messages
May 12 15:57:09 mimul sshd(pam_unix)[26045]: authentication failure;
logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=202.96.189.83
May 12 15:57:11 mimul mysqld max: root@mimul wishes you bad luck
태그 :