#include #include #include FILE *f; void oeffne_briefkasten(char *mode) { f = fopen("/var/lib/tb", mode); if (f == NULL) { exit(1); } } int main(void) { int len; char eingabe[1000]; char zeile[1000]; if (!gets(eingabe)) { return 1; } len = strlen(eingabe); if (eingabe[len - 1] == '\r') { eingabe[len - 1] = 0; len = len - 1; } if (strchr(eingabe, ':')) { /* "key:botschaft" -> speichern */ oeffne_briefkasten("a"); fprintf(f, "%s\n", eingabe); } else { /* "key" -> botschaften lesen */ oeffne_briefkasten("r"); while (fgets(zeile, 1000, f)) { if (strncmp(zeile, eingabe, len) == 0 && zeile[len] == ':') { /* key stimmt -> anzeigen */ printf(zeile); } } } return 0; } /* Fehler: * * 1. Formatstring-Bug in "printf(zeile). * 2. Buffer-Overflow mit "gets()". * 3. Off-By-One in "eingabe[len - 1]" wenn len = 0. */