Outils pour utilisateurs

Outils du site


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>

#define MAX_SCRIPTS 100
#define MAX_SCRIPT_LENGTH 256

// Chemin fixe vers le fichier des scripts valides
#define VALID_SCRIPTS_FILE "/path/to/valid_scripts.txt"

// Liste des scripts valides par défaut
const char *default_scripts[] = {"toto.sh", "titi.sh", "tata.sh"};
const size_t default_scripts_count = sizeof(default_scripts) / sizeof(default_scripts[0]);

// Liste externe pour stocker les scripts supplémentaires
char external_scripts[MAX_SCRIPTS][MAX_SCRIPT_LENGTH];
size_t external_scripts_count = 0;

// Fonction pour vérifier que le programme est lancé par un script shell
void check_parent_process() {
    char path[256];
    char parent_executable[256] = {0};
    FILE *file;

    // Obtenir le PPID (Parent Process ID)
    pid_t ppid = getppid();

    // Lire le nom du processus parent dans /proc/[PPID]/comm
    snprintf(path, sizeof(path), "/proc/%d/comm", ppid);
    file = fopen(path, "r");
    if (!file) {
        perror("Error: Unable to check parent process");
        exit(1);
    }

    if (fgets(parent_executable, sizeof(parent_executable), file)) {
        // Supprimer le saut de ligne
        parent_executable[strcspn(parent_executable, "\n")] = 0;
    }
    fclose(file);

    // Vérifier si le processus parent est un shell (bash, sh, etc.)
    if (strcmp(parent_executable, "bash") != 0 && strcmp(parent_executable, "sh") != 0) {
        fprintf(stderr, "Error: This program must be launched by a shell script (bash or sh).\n");
        exit(1);
    }
}

// Fonction pour charger les scripts valides depuis un fichier
int load_external_scripts() {
    FILE *file = fopen(VALID_SCRIPTS_FILE, "r");
    if (!file) {
        perror("Error opening the valid scripts file");
        return 1;
    }

    char line[MAX_SCRIPT_LENGTH];
    while (fgets(line, sizeof(line), file)) {
        line[strcspn(line, "\n")] = 0; // Supprimer le saut de ligne

        if (external_scripts_count >= MAX_SCRIPTS) {
            fprintf(stderr, "Error: Too many scripts in the external list.\n");
            fclose(file);
            return 1;
        }

        strncpy(external_scripts[external_scripts_count], line, MAX_SCRIPT_LENGTH - 1);
        external_scripts[external_scripts_count][MAX_SCRIPT_LENGTH - 1] = '\0';
        external_scripts_count++;
    }

    fclose(file);
    return 0;
}

// Fonction pour vérifier si le script est valide
int is_valid_script(const char *script) {
    for (size_t i = 0; i < default_scripts_count; i++) {
        if (strcmp(script, default_scripts[i]) == 0) {
            return 1;
        }
    }
    for (size_t i = 0; i < external_scripts_count; i++) {
        if (strcmp(script, external_scripts[i]) == 0) {
            return 1;
        }
    }
    return 0;
}

// Fonction pour décoder en base64
void decode_base64(const char *input) {
    char command[512];
    snprintf(command, sizeof(command), "echo %s | base64 -d", input);
    system(command);
}

int main(int argc, char *argv[]) {
    // Vérifier si le programme est lancé par un script shell
    check_parent_process();

    // Charger la liste externe des scripts valides
    if (load_external_scripts() != 0) {
        return 1;
    }

    // Vérifier que la variable d'environnement SCRIPT est définie
    const char *script = getenv("SCRIPT");
    if (script == NULL) {
        fprintf(stderr, "Error: Environment variable SCRIPT is not set.\n");
        return 1;
    }

    // Vérifier si le script est valide
    if (!is_valid_script(script)) {
        fprintf(stderr, "Error: Script '%s' is not allowed.\n", script);
        return 1;
    }

    // Vérifier qu'un argument pour le décodage a été fourni
    if (argc < 2) {
        fprintf(stderr, "Missing argument for base64 decoding.\n");
        return 1;
    }

    // Décoder l'argument en base64
    decode_base64(argv[1]);
    printf("\n");

    return 0;
}

bloc_note.1734437431.txt.gz · Dernière modification : 2024/12/17 13:10 de admin