#include #include #include #include #include #include int main(int argc, char **argv) { char fn[PATH_MAX]; struct stat buf; int rc; snprintf(fn, PATH_MAX, "/var/teammail/%s", argv[1]); /* Zugriffsrecht pruefen */ rc = stat(fn, &buf); if (rc != 0 && rc != ENOENT) { fprintf(stderr, "Fehler\n"); return 1; } if (rc == 0 && buf.st_gid != getgid()) { fprintf(stderr, "Zugriff verweigert\n"); return 1; } /* Datei erzeugen oder abschneiden */ if (fopen(fn, "w+") == NULL) { return 1; } /* Eigentuemer und Rechte setzen */ rc = chown(fn, buf.st_uid, getgid()); if (rc != 0) { remove(fn); return 1; } rc = chmod(fn, 0066); if (rc != 0) { remove(fn); return 1; } return 0; } /* Fehler im Programm: * * 1. Berechtigungen prüfen * 2. Dateien öffnen * 3. Dateien erzeugen * 5. Berechtigungen setzen * 7. Dateien löschen */