Aller au contenu

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

Lien vers le commentaire
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
Lien vers le commentaire
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 ?

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

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
Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

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
Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

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

Lien vers le commentaire
Partager sur d’autres sites

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.

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.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.