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.

smadon

Authentification Pour Le Group Et Pas Sur Le User

Messages recommandés

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par CoolRaoul

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par nexius2

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par starIst

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.