This site uses cookies! Learn More

Ce site utilise des cookies !

En continuant à utiliser ce site, vous vous engagez à nous permettre de stocker des cookies sur votre ordinateur.

 

Si nous utilisons des cookies et retenons des données anonymes, c’est pour nous aider à mieux gérer notre mesure d’audience, aider nos partenaires commerciaux à nous rémunérer et nos partenaires publicitaires à proposer des annonces qui vous correspondent.

 

Grâce à ces cookies, le forum est en mesure de savoir qui écrit un message et utile pour le système d'authentification.

 

En cliquant sur « J'accepte », vous acceptez l'utilisation par NAS-Forum de cookies publicitaires et de mesure d'audience fine.

gargaben

Membres
  • Compteur de contenus

    20
  • Inscription

  • Dernière visite

Messages posté(e)s par gargaben


  1. Re,

    OK j'ai testé ton script et ça marche nickel. Je vais également basculer chez moi avec cette nouvelle version.

    Quelques remarques/réponses :

    - j'ai "cleané" un peu le code à partir de ta version (genre des vieux trucs que je devais faire depuis longtemps)

    - j'ai cleané également un peu ton code (genre ne pas afficher le mot de passe récupéré dans le trousseau dans les messages de notification ^_^ )

    - pour l'autorisation à cette clé du trousseau, pas la peine de donner les droits à toutes les applis : au premier lancement du script, OS X te demande si tu veux donner un accès permanent à cette clé au script. Si tu cliques sur OK, ça sera bon et limité au seul script (en réalité à l'utilitaire "security" si tu regardes les propriétés de la clé une fois l'autorisation permanente donnée)

    - Pour ta question sur mount_afp, si tu ne donnes pas de point de montage, mount_afp te renverra une erreur car il ne saura pas où monter ton dossier réseau sur ton ordinateur local. Ais-je bien répondu ou suis-je à côté de la plaque (i.e. je n'ai peut-être pas bien compris ta question)?

    Bon, je mets cette nouvelle version sur la page des téléchargements du forum dans la foulée de cette réponse =>

    Encore merci à toi pour cette proposition d'évolution.

    A+


  2. OK cool.

    Je viens de comprendre ce que tu voulais faire! C'est clair que c'est pas mal du tout : ça permet d'avoir des comptes sur le NAS différents de ceux des ordinateurs, ce qui peut être vraiment pratique (pas utile dans mon cas, mais quand même bien pratique et plus "générique"!).

    En plus, pour déployer le script, c'est plus simple : il suffit de créer une clé dans le trousseau pour chaque utilisateur, et cette clé peut avoir le même nom (plus de besoin de cette histoire de NAS.automount.<nom d'utilisateur>).

    Ecoute, je veux bien ta version mise à jour du script. Je la teste chez moi et si c'est OK, je la met en dispo dans la section téléchargement du forum (ce sera la version 2.6 donc).

    En tout cas cool de voir que ce script peut servir à d'autres.

    A+


  3. @via78 : bon finalement, j'avais encore 5mn.

    Commande depuis le terminal (testé) avec une clé du nom de NAS.automount.ben :

    security find-generic-password -g -s NAS.automount.ben 2>&1 | sed -n '7p'| sed 's/"acct"<blob>="//g' | sed 's/"//g' | sed -e "s/^ *//g"

    Commande pour le script (non testée) :

    set user to do shell script "security find-generic-password -g -s " & keychain_key_root & " 2>&1 | sed -n '7p'| sed 's/"acct"<blob>="//g' | sed 's/"//g' | sed -e 's/^ *//g'"

    Remarque : par contre dans ce cas, la variable keychain_key_root doit contenir NAS.automount.ben, ce qui n'est pas le cas dans l'implémentation actuelle du script (elle contient seulement pour le moment NAS.automount)

    En espérant que cela puisse te servir.


  4. C'est bon, la boucle est bouclée.

    Ce que je cherchais, c'était de pouvoir savoir quel utilisateur avait quels droits dans PhotoStation, et de récupérer les adresses mail de ces utilisateurs pour leur envoyer un mail dans le cadre de mon script.

    Au cas ou cela intéresserait quelqu'un :

    - On récupère les droits d'accès via la table photo_access_right_for_dsm_account de la base photo du serveur PostgreSQL Synology ;

    - A chaque droit est associé un userid. La correspondance userid/nom du compte est donnée par le fichier /etc/passwd ;

    - La récupération de l'adresse mail est possible via le fichier /etc/synouser.conf, qui contient à la fois le nom du compte et l'adresse mail qui lui est associée.

    Merci à toi bud77! Ton aide m'a été précieuse. Il ne me reste plus qu'à implémenter tout cela dans mon script....


  5. Non, j'avais déjà vu cette table mais c'est pas bon. Les userid donnés par la table photo_access_right_for_dsm_account sont ceux des comptes du DSM.

    Les données contenues dans la table photo_user concernent les éventuels comptent créés pour PhotoStation uniquement (il ne s'agit pas des comptes du DSM). Les userid des comptes du DSM et ceux des comptes de PhotoStation ne sont pas les mêmes.

    Merci quand même.

    A mon avis, ces informations ne sont pas dans la base photo, mais dans une base contenant la configuration générale du NAS. Mais je ne trouve pas de trace d'une telle base...


  6. Ok merci.

    J'ai bien trouvé la table gérant les droits d'accès pour PhotoStation.

    Ces informations se trouvent dans la base 'photo', puis dans la table 'photo_access_right_for_dsm_account'.

    Cette dernière table contient deux informations :

    userid : entier qui représente l'ID du user concerné.

    shareid : entier qui représente l'ID d'un répertoire de photo. La corrélation entre cet ID et le vrai nom du répertoire se fait grâce à la table 'photo_share', toujours contenue dans la base 'photo'.

    Par contre, je n'ai pas trouvé où récupérer la corrélation entre un ID de user (le userid donc) et ses informations (son nom, son adresse mail s'il l'a déclaré, etc.). Si tu as une idée, je suis preneur. Je vais également continuer à chercher.


  7. Salut,

    pour les besoins d'un script que je suis en train de rédiger, j'ai besoin de trouver où sont stockés les fichiers de configuration qui contiennent les dossiers pour lesquels les utilisateurs ont des droits d'accès (plus précisément, je souhaite récupérer la liste des droits d'accès pour Photostation).

    Une idée?

    Merci d'avance


  8. Salut,

    J’ai également passé pas mal de temps à essayer de résoudre ce problème de montage automatique des volumes. La solution que j’ai adoptée passe également par le recours à un applescript.

    J’avais une contrainte majeure supplémentaire : en plus de ne pas vouloir voir apparaître les volumes montés sur le bureau et les fenêtres afférentes, l’accès à mes volumes sur mon NAS nécessitait un couple login/mot de passe pour fonctionner (nous sommes plusieurs à partager le NAS sur mon réseau, et chacun accède à ses dossiers via son compte utilisateur et un mot de passe qui lui est propre). Le problème des lignes fournies par Atlantic.mac est que votre script contiendra, en clair, les mots de passe nécessaires pour effectuer le montage AFP. N’étant pas satisfait de cette solution (c’est pas très « propre » en terme de sécurité), j’ai trouvé une alternative par recours au trousseau d’accès. Il en résulte un script un peu plus « musclé », mais qui fonctionne de manière totalement transparente pour l’utilisateur tout en étant plus « safe ».

    Au fur et à mesure que j’ai codé ce script, j’ai rajouté quelques « features » qui m’arrangeaient, au regard de ma configuration et de mes besoins.

    Je vous donne l’intégralité du script en fin de post.

    Afin d’éclairer ceux que ça intéresserait, voilà quelques éléments de compréhension supplémentaires :

    - Mon NAS fait parti d’un réseau privé et a pour adresse IP 192.168.0.1

    - Le script vérifie la présence du NAS sur le réseau avant de tenter de faire les montages AFP. Pour cela, il recherche la présence de cette adresse IP sur le réseau via un ping.

    - Certains postes qui se connectent au NAS sont des portables. Le script étant exécuté à chaque démarrage de l’ordinateur, je ne voulais pas qu’il tente des commandes AFP sur une machine ayant une adresse IP égale à celle de NAS lorsque l’ordinateur portable est connecté à un réseau privé autre que le mien (ce qui est courant avec une adresse IP en 192.168). J’ai donc rajouté un test vérifiant que l’adresse MAC de la machine se trouvant derrière l’adresse 192.168.0.1 est bien celle de mon NAS (j’ai donc saisi « en dur » dans mon script l’adresse MAC du NAS

    - Je peux me connecter à mon NAS via un VPN. Le script tente donc tout d’abord de se connecter au NAS via son adresse en 192.168, puis à l’adresse VPN du NAS (10.8.0.1)

    - Les dossiers du NAS son tous montés dans le répertoire «~/DiskStation » de l’ordinateur sur lequel le script est exécuté

    - Pour la gestion des mots de passe, il faut aller dans le trousseau d’accès, et créer à la main un nouveau mot de passe. Cette nouvelle entrée du trousseau doit impérativement s’appeler « NAS.automount.user », où user correspond au nom d’utilisateur de votre session (attention à bien respecter la casse). Si vous n’êtes pas sûr de ce nom, ouvrir un terminal et taper la commande « whoami ». Si vous avez plusieurs utilisateurs sur votre ordinateur, il faudra créer autant d’entrée dans le trousseau d’accès que d’utilisateurs. Par exemple, dans le cas de 2 utilisateurs ben et lili, il faudra une entrée NAS.automount.ben et une entrée NAS.automount.lili. Dans chacune de ses entrées, il faudra saisir le mot de passe de l’utilisateur concerné tel que déclaré sur le NAS. Remarque complémentaire : bien évidemment, cette méthode sous-entend que les comptes utilisateurs utilisés pour monter les dossiers du NAS aient le même nom que ceux sur votre ordinateur.

    - Enfin, j’ai rajouté un affichage afin de savoir si le script s’exécutait bien. Pour cela, je me suis appuyé sur le notification center de MAC OSX (les messages du script apparaissent dedans). Pour que cela fonctionne, il faut installer l’utilitaire shell « terminal-notifier » dans le dossier Applications de votre mac (utilitaire gratuit trouvable facilement sur Internet). Remarque complémentaire : cette option d’affichage limite la compatibilité de cet applescript à MAC OS 10.7 ou ultérieur (puisque le notification center n’existait pas avant). Si vous enlevez les lignes d’affichage, le script devrait fonctionner sur MAC OS 10.6.

    - Pour que le script soit exécuté à chaque ouverture de session, je l’ai enregistré en tant qu’exécutable et l’ai déclaré dans la liste d’ouverture, située dans les préférences système, utilisateurs et groupes.

    Voilà, je pense qu’entre ces explications et les commentaires du code, les utilisateurs un peu aguerris devraient s’en sortir. Pour les plus néophytes, j’imagine que ça sera peut-être un peu plus rugueux ;-)

    N’hésitez pas si vous avez des questions ou des remarques !

    -- =============== DECLARATION DES VARIABLES ===============

    -- Version et nom du script

    set script_name to "NAS automount"

    set script_version to "2.5"

    -- Adresse IP par défaut du serveur

    set default_server_on_lan to "192.168.0.1"

    set default_server_on_vpn to "10.8.0.1"

    -- Adresse MAC du serveur (Attention, si vous avez des 0 (chiffre zéro) dans votre adresse MAC, ne pas les mettre. Par exempe si vous adresse MAC est 01:11:22:33:00:60, il faudra mettre ici 1:11:22:33::6)

    set server_mac_address to "11:22:33:44:55:66"

    -- Racine de la clé à rechercher dans le trousseau d'accès

    set keychain_key_root to "NAS.automount"

    -- Delai d'attente pour la détection du serveur (en seconde)

    set wait_for_server_delay to 1

    -- Répertoire racine de montage pour l'ordinateur sur lequel est exécuté le script

    set root_directory to "~/DiskStation"

    -- Répertoire de terminal-notifier

    set notifier_directory to "/Applications"

    -- Volumes à monter et points de montage

    -- item 1 : volume du NAS à monter (chemin absolu sur le NAS)

    -- item 2 : chemin relatif du point de montage sur la machine sur lequel est exécuté le script (hors rootDirectory déclaré plus haut)

    set volumes_to_mount to {{"/videos", "/videos"}, {"/photos", "/photos"}}

    -- =============== CORPS DU SCRIPT ===============

    -- Test de la presence du serveur sur le réseau

    set server to is_server_present_fct(wait_for_server_delay, default_server_on_lan, default_server_on_vpn, server_mac_address)

    if server is equal to "-1" then

    -- Serveur absent du réseau => on arrête là le script

    notifier_fct(notifier_directory, script_name & " " & script_version, "Serveur absent")

    return

    end if

    -- Récupération du nom d'utilisateur

    set user to do shell script "whoami"

    -- Affichage d'informations avant la saisie du mot de passe

    notifier_fct(notifier_directory, script_name & " " & script_version, "Serveur DiskStation trouvé sur " & server & " (Utilisateur : " & user & ")")

    -- Récupération du mot de passe

    set passwd to get_user_password_from_keychain_fct(script_name, script_version, user, keychain_key_root, root_directory)

    if passwd is equal to "-1" then

    return

    end if

    -- Boucle de montage de tous les volumes

    repeat with this_volume in volumes_to_mount

    set return_value to "-1"

    repeat until return_value is equal to "0"

    set return_value to mount_try_fct(this_volume, user, passwd, server, root_directory)

    if return_value is equal to "-1" then

    -- Le mot de passe est incorrect => on arrête là le script

    notifier_fct(notifier_directory, script_name & " " & script_version, "Mot de passe incorrect")

    return

    else

    notifier_fct(notifier_directory, script_name & " " & script_version, "Dossier " & item 1 of this_volume & " monté", script_name)

    end if

    end repeat

    end repeat

    -- =============== FONCTIONS ===============

    -- Fonction d'envoi d'une notification

    on notifier_fct(notifier_directory, notification_title, notification_description)

    try

    do shell script notifier_directory & "/terminal-notifier.app/Contents/MacOS/terminal-notifier -title "" & notification_title & "" -message "" & notification_description & """

    end try

    end notifier_fct

    -- Fonction de recherche du serveur NAS sur le réseau (sur réseau local, puis, à défaut, sur VPN)

    -- Valeurs de retour

    -- Si serveur trouve : l'adresse IP du serveur

    -- Si serveur non trouve : -1

    on is_server_present_fct(wait_for_server_delay, server_on_lan, server_on_vpn, server_mac_address)

    -- On commence par tester la présence du serveur sur LAN

    try

    do shell script "ping -o -t " & wait_for_server_delay & " " & server_on_lan

    set server_is_present to do shell script "echo $?"

    on error

    set server_is_present to "1"

    end try

    if server_is_present is equal to "0" then

    -- L'adresse IP du serveur a répondu => on test que c'est bien le serveur avec son adresse MAC

    if check_server_mac_adress_fct(server_on_lan, server_mac_address) is equal to "1" then

    -- Il s'agit bien du serveur, accessible via LAN

    return server_on_lan

    end if

    end if

    -- Si on arrive ici, on test la présence du serveur sur VPN

    try

    do shell script "ping -o -t " & wait_for_server_delay & " " & server_on_vpn

    set server_is_present to do shell script "echo $?"

    on error

    set server_is_present to "1"

    end try

    if server_is_present is equal to "0" then

    -- Le test de présence d'une adresse IP dans un VPN ne fonctionnant pas (ARP ne marche pas sur les interfaces VPN)

    -- on consiède par défaut que l'adresse IP VPN est celle du serveur

    return server_on_vpn

    end if

    -- Aucun serveur détecté => on quitte le script

    return "-1"

    end is_server_present_fct

    -- Fonction permettant de vérifier l'identité du serveur à partir de son adresse MAC

    -- Valeurs de retour

    -- 0 : l'adresse MAC liée à l'adresse IP passée en argument n'est pas celle du serveur

    -- 1 : l'adresse MAC liée à l'adresse IP passée en argument est celle du serveur

    on check_server_mac_adress_fct(server_ip_address, server_mac_address)

    -- On récupère l'adresse MAC du liée à l'adresse IP donnée en argument, et on la compare avec SED à celle du serveur NAS

    set mac_address_comparison to do shell script "arp " & server_ip_address & " | sed -n '/" & server_mac_address & "/='"

    if mac_address_comparison is equal to "1" then

    return "1"

    else

    return "0"

    end if

    end check_server_mac_adress_fct

    -- Fonction permettant la récupération du mot de passe depuis le trousseau d'accès

    -- Valeurs de retour

    -- Si erreur : -1

    -- Si OK : le mot de passe

    on get_user_password_from_keychain_fct(script_name, script_version, user, keychain_key_root, root_directory)

    try

    -- Commande qui ne fonctionne qu'à partir de MAC OS X 10.8 (et peut-être 10.7)

    -- set user_password to do shell script "security find-generic-password -w -g -s " & keychain_key_root & "." & user

    -- Commande qui fonctionne avec les versions 10.6, 10.7 et 10.8 de MAC OS X

    set user_password to do shell script "security find-generic-password -g -s " & keychain_key_root & "." & user & " 2>&1 | sed -n '1p' | sed 's/password: "//g' | sed 's/"//g'"

    return user_password

    on error

    notifier_fct(notifier_directory, script_name & " " & script_version, "Impossible de récupérer le mot de passe de " & user, script_name)

    end try

    return "-1"

    end get_user_password_from_keychain_fct

    -- Fonction de montage d'un volume

    -- Valeurs de retour

    -- 0 : tout s'est bien passé

    -- -1 : ça s'est mal passé

    on mount_try_fct(this_volume, user, passwd, server, root_directory)

    try

    -- Création du point de montage

    set mount_point to item 2 of this_volume

    do shell script "/bin/mkdir -p " & root_directory & mount_point

    -- Deconnexion éventuelle de ce point de montage

    try

    do shell script "/sbin/umount " & root_directory & mount_point

    end try

    -- Récupération du volume à monter

    set volume_to_mount to item 1 of this_volume

    -- Création des arguments à passer à la commande shell mount_afp

    set afp_args to "afp://" & user & ":" & passwd & "@" & server & volume_to_mount & " " & root_directory & mount_point

    -- Montage du volume

    try

    do shell script "/sbin/mount_afp " & afp_args

    return "0"

    on error

    -- Echec du montage

    return "-1"

    end try

    end try

    return "-1"

    end mount_try_fct