smadon Posté(e) le 20 juin 2013 Partager Posté(e) le 20 juin 2013 Hello, Question Programation sur le Syno J'ai crée un paquet base sur couchpotatoes assz simple pour faire du rsync, mais par defaut le fichier index.cgi gere l'authentification sur le compte Admin, or je voudrais juste verifier que le user fasse partie du group Administrator, mais je ne sais pas comment verifier cela. :-( Donc ma question est comment changer le code pour faire une authentication sur le group et non pas sur le user ?? code : index.cgi #!/usr/bin/perl use File::Copy; print "Content-type: text/htmlnn"; # Are we authenticated yet ? if (open (IN,"/usr/syno/synoman/webman/modules/authenticate.cgi|")) { $user=<IN>; chop($user); close(IN); } # if not admin or no user at all...no authentication...so, bye-bye if ($user ne 'admin') { print "<HTML><HEAD><TITLE>Login Required</TITLE></HEAD><BODY>Please login as admin first, before using this webpage</BODY></HTML>n"; die; } D'avance merci pour votre aide. Smadon 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
bud77 Posté(e) le 20 juin 2013 Partager Posté(e) le 20 juin 2013 Faut modifier le script pour récupérer le GID du user (via la fichier /etc/passwd), et pas son ID, et adapter le IF en conséquence 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 21 juin 2013 Partager Posté(e) le 21 juin 2013 (modifié) Pour compléter la réponse de Bud, Ajouter ces deux fonctions dans le script: sub usergroups { my $user = shift; my @groups = scalar getgrgid((getpwnam $user)[3]); # init group list to user main group while (my ($name, $users) = (getgrent)[0, -1]) { $users =~ /b$userb/ and push @groups, $name } return @groups; } sub havegroup { my $user=shift; my $whichgroup=shift; foreach my $groupname (usergroups($user)) { return 1 if $whichgroup eq $groupname; } return undef; } et ensuite remplacer $user ne 'admin' par havegroup($user, 'administrators') Modifié le 21 juin 2013 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
smadon Posté(e) le 21 juin 2013 Auteur Partager Posté(e) le 21 juin 2013 Super, Merci pour les réponses, je test ca ce soir. :-) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
smadon Posté(e) le 22 juin 2013 Auteur Partager Posté(e) le 22 juin 2013 Hello, Je viens de tester, et ca marche. :-) Par contre, j'ai utilisé la function unless pur avoir la bonne condition avec havegroup, c'est correct ?? voila resultat : # Are we authenticated yet ? if (open (IN,"/usr/syno/synoman/webman/modules/authenticate.cgi|")) { $user=<IN>; chop($user); close(IN); } # test if member of the group sub havegroup { my $user=shift; my $whichgroup=shift; foreach my $groupname (usergroups($user)) { return 1 if $whichgroup eq $groupname; } return undef; } # Find the group sub usergroups { my $user = shift; my @groups = scalar getgrgid((getpwnam $user)[3]); # init group list to user main group while (my ($name, $users) = (getgrent)[0, -1]) { $users =~ /b$userb/ and push @groups, $name } return @groups; } # if not in administrator groups ...no authentication...so, bye-bye unless (havegroup($user, 'administrators')) { print "<HTML><HEAD><TITLE>Access forbidden</TITLE></HEAD><BODY>You need to be part of the administrators group to view this webpage.</BODY></HTML>n"; die; } C'est correct ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 22 juin 2013 Partager Posté(e) le 22 juin 2013 Je viens de tester, et ca marche. :-) Par contre, j'ai utilisé la function unless pur avoir la bonne condition avec havegroup, c'est correct ?? C'est correct ? Oui c'est bien ça, j'avais mal explicité cette partie en effet. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 21 novembre 2014 Partager Posté(e) le 21 novembre 2014 (modifié) hello, je galere sur le sujet.... pour mon applis, je cherche a recuperer le nom du user et savoir s'il est admin ou non, sinon, l'applis marche pas.... apres avoir essayer plein de méthodes et de bout de script, j'en viens a demander de l'aide..... avec le code ci dessus, ca marche..... pour tout le monde..... juste avant, je testais ceci : if (open (IN,"/usr/syno/synoman/webman/login.cgi|")) { while(<IN>) { if (/SynoToken/) { ($token)=/SynoToken" *: *"([^"]+)"/; } } close(IN); } $TMPENV=$ENV{QUERY_STRING}; $ENV{QUERY_STRING}="SynoToken=$token"; if (open (IN,"/usr/syno/synoman/webman/modules/authenticate.cgi|")) { $user=<IN>; chop($user); close(IN); } $ENV{QUERY_STRING}=$TMPENV; # if not admin or no user at all...no authentication...so, bye-bye if ($user ne 'admin') { print "<HTML><HEAD><TITLE>Login Required</TITLE></HEAD><BODY>Please login as admin first, before using this webpage</BODY></HTML>n"; die; } mais le resultat etait que l'identification marchait, mais plus mon applis.... HELP ! Modifié le 21 novembre 2014 par nexius2 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
starIst Posté(e) le 1 juin 2016 Partager Posté(e) le 1 juin 2016 (modifié) Je suis en train de modifier le package nClone pour faire fonctionner sur le DSM6, j'ai réussi mais je souhaiterais le modifier, notamment sur l'authentification, en effet pour le moment on ne peut pas lancer l'icone nClone si on est pas avec le compte admin hors je voudrais que cela soit n'importe qui du groupe Admin (ou un autre groupe), donc je souhaite modifier le script nclone.cgi qui est le suivant : #!/usr/bin/php -nqd safe_mode_exec_dir="/usr/syno/synoman/webman/modules" <?php /** * nClone (free edition) GUI * * Copyright (C) Maxnet 2012 * All rights reserved */ /* Ugly workarounds when running under php-cli */ if (PHP_SAPI == 'cli') { /* Parse CGI variables */ parse_str($_SERVER['QUERY_STRING'], $_GET); if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_SERVER['CONTENT_LENGTH'])) { parse_str(fread(STDIN, $_SERVER['CONTENT_LENGTH']), $_POST); } else { $_POST = array(); } ini_set('date.timezone', 'Europe/Amsterdam'); echo "Content-Type: text/html\n\n"; } /* Authentication */ if (isset($_POST['token'])) { $token = $_POST['token']; putenv("REQUEST_URI=/nclone.cgi?SynoToken=$token"); } else if (isset($_GET['SynoToken'])) { $token = $_GET['SynoToken']; } else { ?> <html><head> <script type="text/javascript" src="/scripts/ext-3/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="/scripts/ext-3/ext-all.js"></script> <script type="text/javascript" src="/webman/dsmtoken.cgi"></script> <script type="text/javascript"> location.href = location.href+"?SynoToken="+SYNO.SDS.Session.SynoToken; </script> </head></html> <?php exit(0); } $synology_username = exec("/usr/syno/synoman/webman/modules/authenticate.cgi"); if ($synology_username != 'admin') { die("Not authorized. Only user 'admin' is allowed access"); } Comment faire pour tester le groupe et non le user, j'ai essayé le code plus haut mais cela ne semble pas fonctionner... Modifié le 1 juin 2016 par starIst 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
starIst Posté(e) le 3 juin 2016 Partager Posté(e) le 3 juin 2016 Personne pour m'aider svp ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
411ebay Posté(e) le 29 avril 2018 Partager Posté(e) le 29 avril 2018 Bonjour StarLst Le seul moyen que j'ai trouvé et de mettre en commentaire la partie ci-dessous. /* # Are we authenticated yet ? $synology_username = exec("/usr/syno/synoman/webman/modules/authenticate.cgi"); if ($synology_username != 'admin') { die("Not authorized. Only user 'admin' is allowed access"); } */ Malgré mes recherches je n'ai trouvé à remplacer par le group admin 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.