Advertisement
Guest User

Untitled

a guest
Mar 7th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. #define _XOPEN_SOURCE
  2.  
  3. #include <iostream>
  4. #include <stdlib.h>
  5. #include <crypt.h>
  6. #include <unistd.h>
  7. #include <pwd.h>
  8. #include <shadow.h>
  9. #include <fstream>
  10. #include <grp.h>
  11. #include <cstring>
  12. #include <sys/types.h>
  13. #include <sys/stat.h>
  14. #include <unistd.h>
  15. #include <iostream>
  16. #include <exception>
  17.  
  18. using namespace std;
  19.  
  20. int GetLastUserID()
  21. {
  22. struct passwd *test = NULL;
  23. int uid = 0;
  24.  
  25. setpwent();
  26. while((test = getpwent()) != NULL)
  27. uid = test->pw_uid;
  28. endpwent();
  29.  
  30. return uid;
  31. }
  32.  
  33. int GetLastGroupID()
  34. {
  35. struct group *group = NULL;
  36. int gid = 0;
  37. setgrent();
  38. while ((group = getgrent()) != NULL)
  39. gid = group->gr_gid;
  40. endgrent();
  41.  
  42. return gid;
  43. }
  44.  
  45. int main(int argc, char **argv){
  46.  
  47. if ((strcmp(argv[1], "-h")) == 0)
  48. {
  49. cout << endl << "Тут гениальное описание" << endl;
  50.  
  51. return 0;
  52. }
  53.  
  54.  
  55. if ((strcmp(argv[1], "-f") == 0))
  56. {
  57. cout << endl << "Тут что-то про работу с "<< argv[2] << " но что с ним сделать я не понял" << endl;
  58.  
  59. return 0;
  60. }
  61.  
  62.  
  63. string parol;
  64. system("bash Test.sh -l 7 -n 1");
  65. ifstream file("testfile");
  66. getline(file, parol);
  67. remove("testfile");
  68. file.close();
  69.  
  70. char *chparol = new char(parol.length() + 1);
  71. strcpy(chparol, parol.c_str());
  72. char* cpswd = crypt(chparol, "$6$Z/JMdYuG$");
  73.  
  74. passwd *pswd = new passwd;
  75. spwd *shd = new spwd;
  76. group *grop = new group;
  77.  
  78. char *dir = new char(strlen(argv[1]) + 7); // имя пользователя + /home/
  79. strcat(dir, "/home/");
  80. strcat(dir, argv[1]);
  81.  
  82. pswd->pw_name = argv[1];
  83. pswd->pw_uid = GetLastUserID() + 1;
  84. pswd->pw_passwd = "x";
  85. pswd->pw_gid = GetLastGroupID() + 1;
  86. pswd->pw_gecos = argv[2];
  87. pswd->pw_dir = dir;
  88. pswd->pw_shell = "/bin/bash";
  89.  
  90. mkdir(dir, 755);
  91. chown(dir, pswd->pw_uid, pswd->pw_gid);
  92.  
  93. shd->sp_namp = pswd->pw_name;
  94. shd->sp_pwdp = cpswd;
  95. shd->sp_lstchg = time(NULL);
  96. shd->sp_inact = -1;
  97. shd->sp_expire = -1;
  98. shd->sp_min = 0;
  99. shd->sp_max = 99999;
  100. shd->sp_warn = 7;
  101. shd->sp_flag = -1;
  102.  
  103.  
  104. grop->gr_name = pswd->pw_name;
  105. grop->gr_passwd = "x";
  106. grop->gr_gid = pswd->pw_gid;
  107.  
  108. FILE *user = fopen("/etc/passwd", "a+");
  109. FILE *shadow = fopen("/etc/shadow", "a+");
  110. FILE *grp = fopen("/etc/group", "a+");
  111.  
  112. putpwent(pswd,user);
  113. putspent(shd, shadow);
  114. putgrent(grop, grp);
  115.  
  116. fclose(user);
  117. fclose(shadow);
  118. fclose(grp);
  119.  
  120. cout << pswd->pw_gecos << " login: " << pswd->pw_name << " password: " << chparol << " uid: " << pswd->pw_uid
  121. << " gid: " << pswd->pw_gid << " homedir: " << pswd->pw_dir << "\n";
  122.  
  123. return 0;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement