Bonjour,
Quelqu'un peut-il m'aider à écrire et exécuter une fonction en C sous mysql pour l'envoi de mail?
Version imprimable
Bonjour,
Quelqu'un peut-il m'aider à écrire et exécuter une fonction en C sous mysql pour l'envoi de mail?
salut,
tu dois normalement passer par l'activation des UDF, mais leur façon d'expliquer l'intégration des UDF en c est pas terrible j'avoue...
Mais comment activer les fonctions utilisateurs? Et si possible j'aimerais avoir des directives pour développer la fonction qui me permettra d'envoyer des mails avec mysql.
Cordialement
vu la pauvreté de la documentation mysql je te conseille de lire cette documentation et les autres sous-chapitres...
:ccool:
J'ai finalement eu un code que j'ai compilé et copié dans la librairie /usr/lib/mysql/plugin, mais à chaque fois que j'essaie de créer la fonction il m'affiche l'erreur suivante:Citation:
#1126 - Can't open shared library 'mymail.so' (errno: 22 /usr/lib/mysql/plugin/mymail.so: failed to map segment from shared object: Permission denied)
ça ne serait pas dû à un problème de droits sur ton dossier ou le fichier, ça, pour l'utilisateur mysql qui appelle le processus mysql?
j'y ai pensé mais je ne sais pas comment le vérifier?
avec le logiciel de ftp qui t'as permis de mettre le fichier de la fonction dans le répertoire
en fait je travaille en local sous ubuntu
sois tu utilises le navigateur graphique de fichier de ton environnement graphique alors
soit dans une console tu utilises la commande cd pour aller dans le dossier puis un ls pour lister les fichiers et là tu regardes si toutes les options sont identiques pour eux
ça te donne quoi comme valeur pour les droits?
Voici les droits affichés:
Le fichier se nomme mymail.so, il est dans le dossier /usr/lib/mysql/plugin/-rw-r--r-- 1 root root 42014 2011-02-10 08:53 ha_example.a -rw-r--r-- 1 root root 1002 2011-02-10 08:53 ha_example.la lrwxrwxrwx 1 root root 19 2011-04-18 14:01 ha_example.so -> ha_example.so.0.0.0 lrwxrwxrwx 1 root root 19 2011-04-18 14:01 ha_example.so.0 -> ha_example.so.0.0.0 -rw-r--r-- 1 root root 21964 2011-02-10 08:55 ha_example.so.0.0.0 -rw-r--r-- 1 root root 1919790 2011-02-10 08:53 ha_innodb_plugin.a -rw-r--r-- 1 root root 1044 2011-02-10 08:53 ha_innodb_plugin.la lrwxrwxrwx 1 root root 25 2011-03-31 09:58 ha_innodb_plugin.so -> ha_innodb_plugin.so.0.0.0 lrwxrwxrwx 1 root root 25 2011-03-31 09:58 ha_innodb_plugin.so.0 -> ha_innodb_plugin.so.0.0.0 -rw-r--r-- 1 root root 1252128 2011-02-10 08:55 ha_innodb_plugin.so.0.0.0 -rwxrwxrwx 1 root root 7041 2011-07-01 10:41 mymail.so
ça peut venir des répertoires où tu la mets ou de la typographie du nom, car linux est sensible à la casse...
lis ça, le mec parle des udf (c'est en anglais) pour une installation sous windows, mais c'est facilement transposable
J'ai finalement trouvé la solution. Il fallait éditer le fichier suivant /etc/apparmor.d/usr.sbin.mysqld et y ajouter cette ligne /usr/lib/mysql/plugin/* rm,.
Le problème a été résolu mais je n'ai pas compris l'objectif de la manœuvre. Apparemment, apparmor était à l'origine du problème.
Merci ERIC pour tes suggestions.
cool tu peux passer en résolu alors ;)
Bonjour,
je reviens encore.
En fait l'UDF mymail.c provient d'ici.
Je l'ai compilé et copié dans le dossier /usr/lib/mysql/plugin afin que mysql puisse le loader. La fonction mymail a été créée et je l'exécute sans erreur. Mais lorsque je vérifie le fichier mail.log, je constate que le mail n'a pas été envoyé, même pas de trace de l'envoi. On a l'impression qu'aucune fonction mail n'a été exécutée.
Merci d'avance pour votre aide
y a des trucs bizarres dans sa fonction...
exemple:
Le type prend une structure UDF_INIT en entrée... se fout de la valeur du pointeur et la remplace par celle d'un malloc(0) qui retourne 0 ou null donc... il teste juste en dessous si c'est null et si oui dit qu'il y a une erreur ou ne fait rien sinon... :aie:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 my_bool mymail_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { if (!(args->arg_count == 2 && args->arg_type[0] == STRING_RESULT && args->arg_type[1] == STRING_RESULT)) { strncpy(message, ERRPARM, MYSQL_ERRMSG_SIZE); return 1; } initid->maybe_null = 1; initid->ptr = (char*) malloc(0); if(initid->ptr==NULL) { strncpy(message, ERRMEM, MYSQL_ERRMSG_SIZE); return 1; } return 0; }
donc cette fonction renvoie toujours une erreur en théorie soit due au premier if, soit si lui n'a rien déclenché... drôle de fonction d'initialisation
dans celle de désinstallation, il fait un free sur une valeur sans s'assurer qu'elle n'est pas null et ne va donc pas provoquer une erreur (faut dire qu'on s'assure qu'elle est null dans celle d'initialisation)
bref à revoir sérieusement je pense...:mouarf:
Aide moi à y mettre de l'ordre stp. J'en ai urgemment besoin