#include #include #include #include "gateguardian.c" int main(void) { char pwd[9], suche[99], zeile[99]; uid_t uid; FILE *df; gateg_cfg_t cfg; int op; /* Standard-Konfiguration */ gateg_init_cfg(&cfg, GATEG_INIT_DFLT); /* Aber dies erst beim 2. Aufruf: */ op = GATEG_OP_SET | GATEG_OP_DELAY_1; cfg.ops.priv_set = op; cfg.ops.priv_drop = op; cfg.ops.sighand_verify = op; /* 1. Aufruf erledigt das meiste */ gateg_safe_init(&cfg); /* Datenbank öffnen */ df = fopen("/etc/Passworte", "r+"); /* Zur Vorsicht: Datenpufferung aus */ setvbuf(df, 0, _IONBF, 0); /* Uid und Passwort einlesen */ printf("\nBitte User-Id eingeben : "); fscanf(stdin, "%d", &uid); printf("Bitte Passwort eingeben: "); fscanf(stdin, "%8s", pwd); /* Eintrag in der Datenbank suchen */ sprintf(suche, "%d:%s", uid, pwd); while (1) { /* Zeilenweise suchen */ if (fscanf(df, "%98s", zeile) != 1) { exit(1); /* Dateiende */ } if (strcmp(zeile, suche) == 0) { break; /* gefunden */ } } /* 2. Aufruf ersetzt setreuid */ cfg.ops.fds_close = op; cfg.priv_uid = uid; gateg_safe_init(&cfg); execl("/bin/Skript", 0); /* starten */ return 255; }