bloc_note
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
bloc_note [2024/12/18 08:01] – admin | bloc_note [2025/03/24 15:27] (Version actuelle) – admin | ||
---|---|---|---|
Ligne 2: | Ligne 2: | ||
< | < | ||
- | # | + | <g id=" |
- | #include <stdlib.h> | + | <ellipse cx=" |
- | #include <string.h> | + | < |
- | #include <unistd.h> | + | < |
- | # | + | < |
- | + | < | |
- | // Liste codée en dur des scripts autorisés | + | </g> |
- | const char *hardcoded_script_names[] | + | </g> |
- | | + | </g> |
- | | + | |
- | 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, | + | |
- | for (int i = 0; script_list[i] != NULL; i++) { | + | |
- | if (strcmp(script_name, script_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, | + | |
- | FILE *file = fopen(file_path, | + | |
- | if (!file) { | + | |
- | perror(" | + | |
- | return | + | |
- | } | + | |
- | + | ||
- | char line[256]; | + | |
- | while (fgets(line, sizeof(line), file)) { | + | |
- | // Supprimer le saut de ligne | + | |
- | line[strcspn(line, " | + | |
- | if (strcmp(script_name, line) == 0) { | + | |
- | | + | |
- | | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | 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] | + | |
- | FILE *file; | + | |
- | + | ||
- | // Construire le chemin vers / | + | |
- | snprintf(path, | + | |
- | + | ||
- | // Ouvrir le fichier cmdline pour lire la commande du parent | + | |
- | file = fopen(path, "r"); | + | |
- | if (!file) { | + | |
- | perror(" | + | |
- | exit(1); | + | |
- | } | + | |
- | + | ||
- | // Lire le contenu de cmdline | + | |
- | if (fgets(cmdline, sizeof(cmdline), file) != NULL) { | + | |
- | fclose(file); | + | |
- | + | ||
- | | + | |
- | char *script_path | + | |
- | if (*script_path != ' | + | |
- | // Extraire le nom du script (basename) | + | |
- | char *script_name | + | |
- | + | ||
- | // Vérifier le nom dans la liste codée en dur ou le fichier | + | |
- | if (!is_script_in_list(script_name, hardcoded_script_names) && | + | |
- | !is_script_in_file(script_name, authorized_scripts_file)) { | + | |
- | fprintf(stderr, " | + | |
- | exit(1); | + | |
- | } | + | |
- | } else { | + | |
- | fprintf(stderr, " | + | |
- | exit(1); | + | |
- | } | + | |
- | } else { | + | |
- | fclose(file); | + | |
- | perror("Error: Unable to read parent process command line." | + | |
- | exit(1); | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | int main(int argc, char *argv[]) { | + | |
- | | + | |
- | if (argc < 2) { | + | |
- | | + | |
- | | + | |
- | } | + | |
- | + | ||
- | | + | |
- | const char *authorized_scripts_file = argv[1]; | + | |
- | + | ||
- | // Vérifier le script parent | + | |
- | check_parent_script_name(authorized_scripts_file); | + | |
- | + | ||
- | printf(" | + | |
- | + | ||
- | // Logique principale du programme ici | + | |
- | return 0; | + | |
- | } | + | |
</ | </ |
bloc_note.1734505296.txt.gz · Dernière modification : 2024/12/18 08:01 de admin