Advertisement
Guest User

Untitled

a guest
May 19th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pwd.h>
  4. #include <sys/types.h>
  5. #include <grp.h>
  6. #include <string.h>
  7. #include <sys/stat.h>
  8. #include <unistd.h>
  9. #include <syslog.h>
  10. #include <stdarg.h>
  11.  
  12. int main() {
  13. struct passwd newuser;
  14. struct group *g;
  15. struct group newgroup;
  16.  
  17. char groupName[256] = "";
  18. FILE *fgroup;
  19. FILE *fpass;
  20.  
  21. newuser.pw_name = "stuser"; // nazwa usera
  22. newuser.pw_dir = "/home/stuser"; // katalog usera
  23. newuser.pw_shell = "/bin/bash"; // powloka
  24. newuser.pw_passwd = "haslo"; // haslo
  25. newuser.pw_gecos = "Testowy"; // prawdziwa nazwa
  26. newuser.pw_uid = 9002; // user ID
  27.  
  28. newgroup.gr_name = "stgroup"; // nazwa grupy
  29. newgroup.gr_passwd = "x"; // haslo grupy
  30. newgroup.gr_mem = NULL; // czlonkowie :)
  31. newgroup.gr_gid = 9001; // id grupy
  32.  
  33. struct passwd *p;
  34. int trufols = 0;
  35. int userExists = 0;
  36. // ------------------------------------
  37.  
  38. printf("Sprawdzanie czy istnieje uzytkownik '%s'... ", newuser.pw_name);
  39. setpwent(); // dostep do bazy uzytkownikow
  40. while ((p = getpwent()) != NULL) { // pobieranie uzytkownikow z passwd i sprawdzanie
  41. if (strcmp(p->pw_name, newuser.pw_name) == 0) { // czy jest juz uzytkownik "stuser"
  42. printf("istnieje\n");
  43. newuser = *p; // szybka podmianka :)
  44. userExists = 1;
  45. }
  46. }
  47. if (userExists == 0) {
  48. printf("nie istnieje\n");
  49. }
  50. endpwent(); // opuszczenie bazy
  51.  
  52. printf("Dostepne grupy użytkowników:\n");
  53. while ((g = getgrent()) != NULL) { // czytaj do końca
  54. printf("\t%s\n", g->gr_name);
  55. }
  56.  
  57. trufols = 0;
  58. while (trufols == 0) {
  59. printf("Wybierz istniejącą grupe lub wpisz nazwe grupy ktorą chcesz utworzyc:\n\t");
  60. fflush(stdin);
  61. scanf("%s", groupName);
  62. if (strcmp(groupName, "root") != 0) {
  63. trufols = 1;
  64. } else {
  65. printf("Nie można wybrać grupy 'root'!\n");
  66. }
  67. }
  68. trufols = 0;
  69. printf("Wybrano grupę '%s'\n", groupName);
  70.  
  71. printf("Sprawdzanie czy grupa '%s' istnieje... ", groupName);
  72. if ((g = getgrnam(groupName)) == NULL) { //jesli taka grupa nie istnieje
  73. printf("nie istnieje\n");
  74.  
  75. int wputgrent = -100;
  76.  
  77. printf("Dodawanie grupy '%s' do '/etc/group'... ", groupName);
  78. fgroup = fopen("/etc/group", "a+");
  79. if (fgroup == NULL) {
  80. printf("blad!\nZakonczenie programu.\n");
  81. return 1;
  82. }
  83. newgroup.gr_name = groupName;
  84. wputgrent = putgrent(&newgroup, fgroup);
  85. fclose(fgroup);
  86. if (wputgrent >= 0) {
  87. printf("ok\n");
  88. } else {
  89. printf("blad [%d]", wputgrent);
  90. }
  91.  
  92. g = &newgroup;
  93. newuser.pw_gid = g->gr_gid; //dodaj grupe do usera
  94. } else {
  95. printf("istnieje\n");
  96. newuser.pw_gid = g->gr_gid; //dodaj istniejaca grupe do usera
  97. }
  98.  
  99. //dodaj usera do pliku
  100. if (userExists == 0) {
  101. printf("Dodawanie uzytkownika do pliku '/etc/passwd'... ");
  102. fpass = fopen("/etc/passwd", "a+");
  103. if (fpass == NULL) {
  104. printf("blad!\nZakonczenie programu.\n");
  105. return 1;
  106. }
  107. int wynik = -100;
  108. wynik = putpwent(&newuser, fpass); //dodaj usera do pliku passwd
  109. fclose(fpass);
  110. if (wynik >= 0) {
  111. printf("ok\n");
  112. } else {
  113. printf("blad [%d]", wynik);
  114. }
  115. }
  116.  
  117. //utworz folder domowy
  118. printf("Tworzenie folderu domowego użytkownika... ");
  119. int dirstatus = -100;
  120. dirstatus = mkdir(newuser.pw_dir, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
  121. if (dirstatus < 0) {
  122. printf("blad. folder '%s' istnieje?\n", newuser.pw_dir);
  123. } else {
  124. printf("utworzono folder '%s'\n", newuser.pw_dir);
  125. }
  126.  
  127. printf("Zmiana katalogu na '%s'... ", newuser.pw_dir);
  128. char folderChange[256];
  129. sprintf(folderChange, "cd %s", newuser.pw_dir);
  130. if (system(folderChange) != 0)
  131. printf("blad!\n");
  132. else
  133. printf("ok\n");
  134.  
  135.  
  136. // zmiana uprawnien do katalogu na usera stuser
  137. printf("Zmiana uprawnien do katalogu na uzytkownika... ");
  138. setpwent(); // dostep do bazy uzytkownikow
  139. int wchown = -100;
  140. p = getpwnam(newuser.pw_name);
  141. endpwent();
  142. p = &newuser;
  143. wchown = chown(newuser.pw_dir, p->pw_uid, p->pw_gid);
  144. char folderChmod[256];
  145. sprintf(folderChmod, "chmod 777 %s", newuser.pw_dir);
  146. system(folderChmod);
  147. if (wchown != 0) {
  148. printf("blad!\n");
  149. } else {
  150. printf("ok\n");
  151. }
  152.  
  153. printf("Otworzenie nowej powloki... ok\n");
  154. system("sh");
  155.  
  156. printf("\nUsuwanie uzytkownika '%s'... ", newuser.pw_name);
  157. char userDel[256];
  158. sprintf(userDel, "userdel %s", newuser.pw_name);
  159. if (system("userdel stuser") != 0) {
  160. printf("blad!\n");
  161. } else {
  162. printf("ok\n");
  163. }
  164.  
  165. printf("Usuwanie grupy '%s'... ", groupName);
  166. char grupaDel[256];
  167. sprintf(grupaDel, "groupdel %s", groupName);
  168. if (system(grupaDel) != 0) {
  169. printf("blad!\n");
  170. } else {
  171. printf("ok\n");
  172. }
  173.  
  174. printf("Zamykanie programu.\n");
  175. return 0;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement