/* Das Set-Uid-Root Bit muss gesetzt sein. * Die Passwörter sind in /etc/Passworte im * Zeilenformat "user-id:passwort". */ #include #include #include int main(void) { char pwd[9], suche[99], zeile[99]; uid_t uid; FILE *df; /* 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 */ } setreuid(uid, uid); /* Root abgeben */ execl("/bin/Skript", 0); /* starten */ return 255; }