Outils pour utilisateurs

Outils du site


bloc_note

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
bloc_note [2024/12/18 08:01] adminbloc_note [2025/03/24 15:27] (Version actuelle) admin
Ligne 2: Ligne 2:
  
 <code> <code>
-#include <stdio.h> +        <g id="SANDOUVILLE" transform="matrix(2.91786,0,0,2.64787,-910.867,-504.816)"
-#include <stdlib.h> + <ellipse cx="475.825" cy="305.328rx="0.902ry="0.994" style="fill:rgb(216,29,29);"/> 
-#include <string.h> + <g transform="matrix(0.0639002,0,0,0.0708526,474.795,304.48)"> 
-#include <unistd.h+ <g> 
-#include <libgen.h> + <path id="Rectangle-24" serif:id="Rectangle-2" d="M24,11L26,11L26,13.686L13.686,26L2,13.686L13.686,2L26,2L26,8L24,8L23,5L14.929,5L6.188,13.741L13.742,21.701L23,12.444L24,11Zstyle="fill:rgb(26,26,26);"/> 
- + <path id="D4" serif:id="D" d="M13.342,17.085C12.996,17.085 12.623,17.074 12.225,17.052C11.827,17.031 11.461,17 11.128,16.96L11.128,9.795C11.504,9.708 11.925,9.64 12.39,9.59C12.855,9.54 13.307,9.515 13.748,9.515C15.191,9.515 16.272,9.823 16.993,10.44C17.713,11.057 18.073,12.01 18.073,13.3C18.073,14.187 17.9,14.908 17.555,15.465C17.21,16.022 16.691,16.431 15.998,16.693C15.304,16.954 14.419,17.085 13.342,17.085ZM13.938,15.34C14.378,15.34 14.737,15.273 15.015,15.14C15.293,15.007 15.502,14.791 15.64,14.493C15.778,14.194 15.848,13.793 15.848,13.29C15.848,12.793 15.775,12.396 15.63,12.098C15.485,11.799 15.272,11.583 14.99,11.45C14.708,11.317 14.353,11.25 13.923,11.25C13.832,11.25 13.728,11.256 13.608,11.268C13.487,11.279 13.386,11.293 13.303,11.31L13.303,15.325C13.456,15.335 13.667,15.34 13.938,15.34Zstyle="fill:rgb(50,50,50);"/> 
-// Liste codée en dur des scripts autorisés + </g> 
-const char *hardcoded_script_names[] + </g
-    "authorized_script1.sh"+ </g>
-    "authorized_script2.sh"+
-    NULL // Marqueur de fin de liste +
-}; +
- +
-// Fonction pour vérifier si un script est dans une liste +
-int is_script_in_list(const char *script_name, const char **script_list) { +
-    for (int i = 0; script_list[i] !NULL; i++) { +
-        if (strcmp(script_namescript_list[i]== 0) { +
-            return 1; // Trouvé dans la liste +
-        } +
-    } +
-    return 0; // Non trouvé +
-+
- +
-// Fonction pour lire les scripts autorisés depuis un fichier +
-int is_script_in_file(const char *script_name, const char *file_path) { +
-    FILE *file fopen(file_path, "r"); +
-    if (!file) { +
-        perror("Error: Unable to open the authorized scripts file."); +
-        return 0; // Considérer comme non autorisé si le fichier est inaccessible +
-    } +
- +
-    char line[256]; +
-    while (fgets(linesizeof(line)file)) { +
-        // Supprimer le saut de ligne +
-        line[strcspn(line"\n")] = '\0'; +
-        if (strcmp(script_nameline== 0) { +
-            fclose(file); +
-            return 1; // Trouvé dans le fichier +
-        } +
-    } +
- +
-    fclose(file); +
-    return 0; // Non trouvé dans le fichier +
-+
- +
-void check_parent_script_name(const char *authorized_scripts_file) { +
-    pid_t ppid = getppid(); // Obtenir le PPID (Parent Process ID) +
-    char path[256]; +
-    char cmdline[1024] {0}; +
-    FILE *file; +
- +
-    // Construire le chemin vers /proc/[PPID]/cmdline +
-    snprintf(path, sizeof(path), "/proc/%d/cmdline", ppid); +
- +
-    // Ouvrir le fichier cmdline pour lire la commande du parent +
-    file = fopen(path, "r"); +
-    if (!file) { +
-        perror("ErrorUnable to open parent process info."); +
-        exit(1); +
-    } +
- +
-    // Lire le contenu de cmdline +
-    if (fgets(cmdlinesizeof(cmdline)file) != NULL) { +
-        fclose(file); +
- +
-        // Extraire le chemin du script (premier argument après le shell) +
-        char *script_path strchr(cmdline, '\0') + 1; +
-        if (*script_path !'\0') { +
-            // Extraire le nom du script (basename) +
-            char *script_name basename(script_path); +
- +
-            // Vérifier le nom dans la liste codée en dur ou le fichier +
-            if (!is_script_in_list(script_namehardcoded_script_names) && +
-                !is_script_in_file(script_nameauthorized_scripts_file)) { +
-                fprintf(stderr"Error: Unauthorized script '%s' tried to launch this program.\n"script_name); +
-                exit(1); +
-            } +
-        } else { +
-            fprintf(stderr"Error: This program must be launched by a shell script.\n"); +
-            exit(1); +
-        } +
-    } else { +
-        fclose(file); +
-        perror("ErrorUnable to read parent process command line."); +
-        exit(1); +
-    } +
-+
- +
-int main(int argc, char *argv[]) { +
-    // Vérifier si un fichier de scripts autorisés est passé en argument +
-    if (argc 2) { +
-        fprintf(stderr, "Usage: %s <authorized_scripts_file>\n", argv[0]); +
-        exit(1); +
-    } +
- +
-    // Chemin du fichier des scripts autorisés +
-    const char *authorized_scripts_file = argv[1]; +
- +
-    // Vérifier le script parent +
-    check_parent_script_name(authorized_scripts_file); +
- +
-    printf("Program successfully launched by an authorized script.\n"); +
- +
-    // Logique principale du programme ici +
-    return 0; +
-+
  
 </code> </code>
bloc_note.1734505296.txt.gz · Dernière modification : 2024/12/18 08:01 de admin