Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <pwd.h>
- #include <sys/types.h>
- #include <grp.h>
- #include <string.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <syslog.h>
- #include <stdarg.h>
- int main() {
- struct passwd newuser;
- struct group *g;
- struct group newgroup;
- char groupName[256] = "";
- FILE *fgroup;
- FILE *fpass;
- newuser.pw_name = "stuser"; // nazwa usera
- newuser.pw_dir = "/home/stuser"; // katalog usera
- newuser.pw_shell = "/bin/bash"; // powloka
- newuser.pw_passwd = "haslo"; // haslo
- newuser.pw_gecos = "Testowy"; // prawdziwa nazwa
- newuser.pw_uid = 9002; // user ID
- newgroup.gr_name = "stgroup"; // nazwa grupy
- newgroup.gr_passwd = "x"; // haslo grupy
- newgroup.gr_mem = NULL; // czlonkowie :)
- newgroup.gr_gid = 9001; // id grupy
- struct passwd *p;
- int trufols = 0;
- int userExists = 0;
- // ------------------------------------
- printf("Sprawdzanie czy istnieje uzytkownik '%s'... ", newuser.pw_name);
- setpwent(); // dostep do bazy uzytkownikow
- while ((p = getpwent()) != NULL) { // pobieranie uzytkownikow z passwd i sprawdzanie
- if (strcmp(p->pw_name, newuser.pw_name) == 0) { // czy jest juz uzytkownik "stuser"
- printf("istnieje\n");
- newuser = *p; // szybka podmianka :)
- userExists = 1;
- }
- }
- if (userExists == 0) {
- printf("nie istnieje\n");
- }
- endpwent(); // opuszczenie bazy
- printf("Dostepne grupy użytkowników:\n");
- while ((g = getgrent()) != NULL) { // czytaj do końca
- printf("\t%s\n", g->gr_name);
- }
- trufols = 0;
- while (trufols == 0) {
- printf("Wybierz istniejącą grupe lub wpisz nazwe grupy ktorą chcesz utworzyc:\n\t");
- fflush(stdin);
- scanf("%s", groupName);
- if (strcmp(groupName, "root") != 0) {
- trufols = 1;
- } else {
- printf("Nie można wybrać grupy 'root'!\n");
- }
- }
- trufols = 0;
- printf("Wybrano grupę '%s'\n", groupName);
- printf("Sprawdzanie czy grupa '%s' istnieje... ", groupName);
- if ((g = getgrnam(groupName)) == NULL) { //jesli taka grupa nie istnieje
- printf("nie istnieje\n");
- int wputgrent = -100;
- printf("Dodawanie grupy '%s' do '/etc/group'... ", groupName);
- fgroup = fopen("/etc/group", "a+");
- if (fgroup == NULL) {
- printf("blad!\nZakonczenie programu.\n");
- return 1;
- }
- newgroup.gr_name = groupName;
- wputgrent = putgrent(&newgroup, fgroup);
- fclose(fgroup);
- if (wputgrent >= 0) {
- printf("ok\n");
- } else {
- printf("blad [%d]", wputgrent);
- }
- g = &newgroup;
- newuser.pw_gid = g->gr_gid; //dodaj grupe do usera
- } else {
- printf("istnieje\n");
- newuser.pw_gid = g->gr_gid; //dodaj istniejaca grupe do usera
- }
- //dodaj usera do pliku
- if (userExists == 0) {
- printf("Dodawanie uzytkownika do pliku '/etc/passwd'... ");
- fpass = fopen("/etc/passwd", "a+");
- if (fpass == NULL) {
- printf("blad!\nZakonczenie programu.\n");
- return 1;
- }
- int wynik = -100;
- wynik = putpwent(&newuser, fpass); //dodaj usera do pliku passwd
- fclose(fpass);
- if (wynik >= 0) {
- printf("ok\n");
- } else {
- printf("blad [%d]", wynik);
- }
- }
- //utworz folder domowy
- printf("Tworzenie folderu domowego użytkownika... ");
- int dirstatus = -100;
- dirstatus = mkdir(newuser.pw_dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
- if (dirstatus < 0) {
- printf("blad. folder '%s' istnieje?\n", newuser.pw_dir);
- } else {
- printf("utworzono folder '%s'\n", newuser.pw_dir);
- }
- printf("Zmiana katalogu na '%s'... ", newuser.pw_dir);
- char folderChange[256];
- sprintf(folderChange, "cd %s", newuser.pw_dir);
- if (system(folderChange) != 0)
- printf("blad!\n");
- else
- printf("ok\n");
- // zmiana uprawnien do katalogu na usera stuser
- printf("Zmiana uprawnien do katalogu na uzytkownika... ");
- setpwent(); // dostep do bazy uzytkownikow
- int wchown = -100;
- p = getpwnam(newuser.pw_name);
- endpwent();
- p = &newuser;
- wchown = chown(newuser.pw_dir, p->pw_uid, p->pw_gid);
- char folderChmod[256];
- sprintf(folderChmod, "chmod 777 %s", newuser.pw_dir);
- system(folderChmod);
- if (wchown != 0) {
- printf("blad!\n");
- } else {
- printf("ok\n");
- }
- printf("Otworzenie nowej powloki... ok\n");
- system("sh");
- printf("\nUsuwanie uzytkownika '%s'... ", newuser.pw_name);
- char userDel[256];
- sprintf(userDel, "userdel %s", newuser.pw_name);
- if (system("userdel stuser") != 0) {
- printf("blad!\n");
- } else {
- printf("ok\n");
- }
- printf("Usuwanie grupy '%s'... ", groupName);
- char grupaDel[256];
- sprintf(grupaDel, "groupdel %s", groupName);
- if (system(grupaDel) != 0) {
- printf("blad!\n");
- } else {
- printf("ok\n");
- }
- printf("Zamykanie programu.\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement