Examen de Langages de script n o 2 : 2011/2012



Documents pareils
Présentation du langage et premières fonctions

TP 1. Prise en main du langage Python

STAGE IREM 0- Premiers pas en Python

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Compte-rendu de projet de Système de gestion de base de données

Recherche dans un tableau

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

1. Structure d'un programme FORTRAN 95

Initiation à la programmation en Python

Raja Bases de données distribuées A Lire - Tutoriel

Programmation Web. Madalina Croitoru IUT Montpellier

Programme awk------introduction rapide

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

I. Introduction aux fonctions : les fonctions standards

OCL - Object Constraint Language

TP 1 : 1 Calculs en binaire, octal et hexadécimal

Licence Sciences et Technologies Examen janvier 2010

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Compléments de documentation Scilab : affichage de texte et formatage de nombres

1 Recherche en table par balayage

Utilisation d objets : String et ArrayList

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Editer un script de configuration automatique du proxy

Représentation d un entier en base b

Algorithmique et Programmation, IMA

Cours d initiation à la programmation en C++ Johann Cuenin

Client Kiwi Backup : procédures d'installation et de mise à jour. Gilles Arnoult, Clément Varaldi

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

DM 1 : Montre Autoquartz ETA

1 Démarrage de Marionnet

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

TP3 : Manipulation et implantation de systèmes de fichiers 1

Cours 7 : Utilisation de modules sous python

Introduction...3. Objectif...3. Manipulations...3. Gestion des utilisateurs et des groupes...4. Introduction...4. Les fichiers de base...

Atelier La notion de session utilisateur sous Linux

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Initiation à la Programmation en Logique avec SISCtus Prolog


Formulaire pour envoyer un mail

Introduction à JDBC. Accès aux bases de données en Java

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Stockage du fichier dans une table mysql:

Cours Informatique Master STEP

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Télécom Nancy Année

Tp 1 correction. Structures de données (IF2)

TPS 4 Objectifs du programme aide à la lecture et à l'écriture Les fonctions principales lecture à haute voix

Introduction à MATLAB R

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Découverte de Python

Les bases du langage Python

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Approche Contract First

Cours Langage C/C++ Programmation modulaire

Chapitre 2 Devine mon nombre!

Table des matières Hakim Benameurlaine 1

1 TD 2 : Construction d'une chier Acrobat et envoi par

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Programme Compte bancaire (code)

Documentation Cobian

Exonet : sauvegarde automatisée d une base de données

LES TYPES DE DONNÉES DU LANGAGE PASCAL

TD3: tableaux avancées, première classe et chaînes

Perl Orienté Objet BioPerl There is more than one way to do it

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

PHP. PHP et bases de données

Module : Informatique Générale 1. Les commandes MS-DOS

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

SweetyPix, mode d'emploi

.NET - Classe de Log

Les Boitiers de Vote Electroniques (Clickers)

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

AWS avancé. Surveiller votre utilisation d EC2

Les différents types de données et leurs opérations de base

L informatique en BCPST

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

SQL MAP. Etude d un logiciel SQL Injection

Pluridisciplinarité. Classe de BTS DATR

MIS 102 Initiation à l Informatique

Travail collaboratif à distance

Système clients serveur Kwartz Vulgarisation, identification, dossier personnel

Conditions générales. Utilisateurs de machine à affranchir

Initiation à l algorithmique

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Chapitre 10. Les interfaces Comparable et Comparator 1

Gestion des utilisateurs : Active Directory

Langage SQL : créer et interroger une base

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Création d objet imbriqué sous PowerShell.

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

2. RAPPEL DES TECHNIQUES DE CALCUL DANS R

Projet Matlab : un logiciel de cryptage

Chapitre 1 Qu est-ce qu une expression régulière?

Transcription:

Examen de Langages de script n o 2 : 2011/2012 Durée de l'examen : 2h Vous devez éteindre et ranger vos téléphones. Les programmes sont à faire en Python 3. L'annexe du sujet contient des rappels de Python ; la documentation du module re. Exercice 1 : 1. Écrire une fonction alterner(l,s) qui reçoit deux listes de même longueur en argument, et renvoie une liste contenant les éléments des deux arguments en alternance, c'est-à-dire dire alterner([1,2,3],[4,5,6]) renvoie [1,4,2,5,3,6], par exemple. 2. Écrire une fonction flatten(l) qui reçoit une liste de listes l en argument, et renvoie la concaténation des listes dans l. Par exemple, flatten([[2,3,4],[3,5],[1]]) renvoie [2,3,4,3,5,1]. 3. Écrire une fonction diffsym(a,b) qui recoit deux ensembles a,b en argument, et renvoie leur diérence symétrique, c'est-à-dire leur union sans leur intersection. Autrement dit, x est dans l'union symétrique de a et b, si x est dans l'un des deux, mais pas dans les deux en même temps. Par exemple, diffsym({1,2,4,7},{1,3,4}) renvoie {2,3,7}. 4. Qu'imprime le programme suivant? a=sorted(list({x//2 for x in range(10)})) b=sorted(list({x//2 for x in range(10,0,-1)})) c=sorted(list({x//2 for x in range(10,0,-2)})) print(a) print(b) print(c) 5. Qu'imprime le programme suivant? print(len({(a,b,c) for a in range(3) for b in range(4) for c in range(5)})) 6. Qu'imprime le programme suivant? def p(l): if len(l) == 0: return [[]] r = p(l[1:]) x = l[0] s = [] for m in r: for j in range(len(l)): s.append(m[:j]+[x]+m[j:]) return s print(p([0,1,2])) Expliquez votre réponse. 7. Écrire une fonction csum(n) qui étant donné un entier positif retourne la somme de ses chires. Par exemple pour 1234, la fonction renvoie 10.

Exercice 2 : Sécurité An d'aider les utilisateurs à choisir des mots de passe plus sécurisés, on se propose de programmer un script testant la vulnérabilité du mot de passe. An de contourner les attaques par force brute, un mot de passe doit vérier certaines propriétés que nous allons tester. Pour répondre à cet exercice, vous devez rédiger d'une part un module python nommé security.py et d'autre part donner les explications nécessaires à la compréhension de votre code. Dans ce module vous pouvez ajouter tout le code que vous jugerez nécessaire (import de module, fonctions auxiliaires,). Ce module devra contenir les fonctions suivantes qui prennent en argument un mot de passe sous la forme d'une chaîne de caractère et renvoie un booléen true ou false si le mot de passe vérie le test décrit : mdp1 : Le mot de passe est assez long (plus de 8 caractères) mdp2 : Le mot de passe contient au moins deux caractères non-alphanumériques. mdp3 : Le mot de passe ne contient pas de mot issu d'un des lexiques suivants capitales.txt, francais.txt, anglais.txt, annuaire.txt. On supposera que ces lexiques sont des - chiers textes contenus dans le répertoire courant et dont chaque ligne contient un seul mot. On justiera les structures de données choisies en terme d'ecacité. mdp4 : Le mot de passe ne contient pas une variante d'un des mots issu des lexiques ci-dessus. La variante étant obtenue en remplaçant le caractère a par @ ; et la chaîne de caractères et par &. On pourra faire appel à la fonction précédente. mdp5 : Le mot de passe ne contient pas le miroir d'un mot issu d'un des lexiques précédemment cité (le miroir de passe est essap ). Le module security.py se terminera par la partie principale du code qui ne sera exécutée que lorsque le module est lancé en ligne de commande à partir d'un terminal unix. Ce morceau de code demandera à l'utilisateur d'entrer son mot de passe et imprimera une note entre 1 et 5 selon le nombre de tests passés. Exercice 3 : Mot de passe Cet exercice propose d'écrire des scripts pour gérer les mots de passe. Dans le système Unix, les identiants des utilisateurs et leur mot de passe sont sauvegardés dans les chiers /etc/passwd sous la forme suivante : utilisateur1:x:1000:1000:nom Utilisateur1,,,:/home/utilisateur1:/bin/bash utilisateur2:x:1001:1001:nom Utilisateur2,,,:/home/utilisateur2:/bin/bash et /etc/shadow sous la forme suivante : utilisateur1:$1$xop0fyh9$ifxyqwbe9b8tiyikt2p4f/:13262:0:99999:7::: utilisateur2:$1$vxgzlvbs$elyernf/agudsm1dehjms/:13261:0:99999:7::: Les entrées du chier passwd sont séparées par des :, elles ont la signication suivante : 2

identiant de l'utilisateur entrée de spécication du mot de passe identiant numérique de l'utilisateur identiant numérique du groupe nom de l'utilisateur ou champ de commentaire répertoire personnel de l'utilisateur interpréteur de commandes, optionnel, de l'utilisateur. Les entrées du chier shadow ont la signication suivante : identiant de l'utilisateur mot de passe chiré (le 1 du début indique l'utilisation d'un chirement MD5. Le signe * indique que le compte ne peut pas se connecter) les autres données ne seront pas utilisées, elles correspondent à un nombre de jours, à partir du 1er janvier 1970. Dans la suite, on supposera l'existence d'un module python crypto.py contenant une fonction de cryptage chiffre et une fonction de décryptage dechiffre que l'on pourra utiliser à condition de les avoir importés. 1. Écrire une fonction lecture qui prend en argument le nom d'un chier et renvoie la liste de ses lignes. Écrire une fonction ecriture qui prend en entrée une liste de lignes et le nom d'un chier et qui écrit les lignes à la suite des autres dans le chier donné. 2. An de manipuler les chiers /etc/passwd et /etc/shadow/, on propose d'utiliser un dictionnaire ayant comme clé l'identiant de l'utilisateur et comme valeur un autre dictionnaire associant aux clefs suivantes : id_num : identiant numérique nom : nom de l'utilisateur mdp : mot de passe chiré de l'utilisateur Écrire une fonction permettant d'initialiser ce dictionnaire. Écrire une fonction permettant de sauvegarder ce dictionnaire dans les chiers /etc/passwd et /etc/shadow/. Certaines des données n'étant pas stockées dans le dictionnaire, vous pouvez les remplacer par une valeur arbitraire. 3. Écrire un script adduser qui permet de créer un nouvel utilisateur en demandant successivement l'identiant de l'utilisateur, le nom de l'utilisateur, le mot de passe de l'utilisateur, et une conrmation de ce mot de passe. Le script devra au fur et à mesure vérier que l'identiant n'est pas déjà attribué, vérier que les deux mots de passe sont identiques, vérier que le mot de passe est un bon mot de passe, déterminer un identiant numérique qui n'est pas déjà attribué avant d'entrer les données du nouvel utilisateur dans le dictionnaire. 4. Écrire un script passwd qui permet à un utilisateur existant de modier son mot de passe. 5. Décrire les opérations à eectuer an que les commandes suivantes./adduser et./passwd lancées à partir d'un terminal lancent les scripts correspondants. 3

A Annexe a) Rappel de quelques éléments de Python range(i,j,l) permet de parcourir les entiers de i à j exclu avec un pas de l. >>> for i in range(3,-4,-1): print(i) 3 2 1 0-1 -2-3 L'opérateur // en python calcule la partie entière de la division. Par exemple, 5//2 donne 2, et 3//4 a valeur 0. b) Module re - descriptif basé sur le livre de Harold Erbin Syntaxe Les regex répondent à une syntaxe très codiée et possèdent de nombreux symboles ayant un sens particulier. Pour débuter, tout caractère alphanumérique n'a pas de signication spéciale : A correspond simplement à la lettre A, 1 au chire 1, etc. Quant aux principaux symboles spéciaux, il sont :. : désigne n'importe quel caractère ; ^ : indique que le début de la chaine doit correspondre ; $ : indique que la n de la chaine doit correspondre ; {n} : indique que le caractère précédent doit être répété n fois. {n,m} : indique que le caractère précédent doit être répété entre n et m fois. * : le caractère précédent peut être répété aucune ou plusieurs fois. Par exemple, à ab* peuvent correspondre : a, ab, ou a suivi d'un nombre quelconque de b. + : le caractère précédent peut être répété une ou plusieurs fois. Par exemple, à ab+ correspond un a suivi d'un nombre quelconque de b.? : le caractère précédent peut être répété zéro ou une fois. Par exemple, à ab? correspondent ab et a. L'antislash permet d'échapper tous ces caractères spéciaux. Les crochets [] permettent d'indiquer une plage de caractère, par exemple [e-h] correspondra à e, f, g ou h. Finalement, il reste quelques caractères spéciaux assez utiles : \w : il correspond à tout caractère alphanumérique, c'est à dire qu'il est similaire à [a-za-z0-9_] ; \W : il correspond à tout ce qui n'est pas un caractère alphanumérique ; \b : il correspond à la frontière (début ou n) d'un mot ; \d : il correspond à tout caractère numérique, c'est à dire qu'il est similaire à [0-9] ; \D : il correspond à tout ce qui n'est pas un caractère numérique. 4

Utilisation re.search(pattern, string) Cherche le motif dans la chaîne passée en argument et retourne un MatchObject si des correspondances sont trouvées, sinon retourne None. re.split(pattern, string) Découpe la chaine string selon les occurences du motif. >>> re.split(r'\w', 'Truth is beautiful, without doubt.') ['Truth', 'is', 'beautiful', '', 'without', 'doubt', ''] re.findall(pattern, string) Retourne toutes les sous-chaines de string correspondant au motif. re.sub(pattern, repl, string) Retourne la chaîne string où le motif a été remplacé par repl. 5