bloc_note
Ceci est une ancienne révision du document !
Bloc Note rapide
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <libgen.h> // Liste des noms de scripts autorisés const char *authorized_script_names[] = { "authorized_script1.sh", "authorized_script2.sh", NULL // Marqueur de fin de liste }; // Fonction pour vérifier si un script est autorisé int is_script_name_authorized(const char *script_name) { for (int i = 0; authorized_script_names[i] != NULL; i++) { if (strcmp(script_name, authorized_script_names[i]) == 0) { return 1; // Script trouvé dans la liste } } return 0; // Non autorisé } void check_parent_script_name() { 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("Error: Unable to open parent process info."); exit(1); } // Lire le contenu de cmdline if (fgets(cmdline, sizeof(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); // Valider le nom du script if (!is_script_name_authorized(script_name)) { 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("Error: Unable to read parent process command line."); exit(1); } } int main(int argc, char *argv[]) { // Vérifier le script parent check_parent_script_name(); printf("Program successfully launched by an authorized script.\n"); // Logique principale du programme ici return 0; }
bloc_note.1734504809.txt.gz · Dernière modification : 2024/12/18 07:53 de admin