Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _XOPEN_SOURCE
- #include <iostream>
- #include <stdlib.h>
- #include <crypt.h>
- #include <unistd.h>
- #include <pwd.h>
- #include <shadow.h>
- #include <fstream>
- #include <grp.h>
- #include <cstring>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
- #include <iostream>
- #include <exception>
- using namespace std;
- int GetLastUserID()
- {
- struct passwd *test = NULL;
- int uid = 0;
- setpwent();
- while((test = getpwent()) != NULL)
- uid = test->pw_uid;
- endpwent();
- return uid;
- }
- int GetLastGroupID()
- {
- struct group *group = NULL;
- int gid = 0;
- setgrent();
- while ((group = getgrent()) != NULL)
- gid = group->gr_gid;
- endgrent();
- return gid;
- }
- int main(int argc, char **argv){
- if ((strcmp(argv[1], "-h")) == 0)
- {
- cout << endl << "Тут гениальное описание" << endl;
- return 0;
- }
- if ((strcmp(argv[1], "-f") == 0))
- {
- cout << endl << "Тут что-то про работу с "<< argv[2] << " но что с ним сделать я не понял" << endl;
- return 0;
- }
- string parol;
- system("bash Test.sh -l 7 -n 1");
- ifstream file("testfile");
- getline(file, parol);
- remove("testfile");
- file.close();
- char *chparol = new char(parol.length() + 1);
- strcpy(chparol, parol.c_str());
- char* cpswd = crypt(chparol, "$6$Z/JMdYuG$");
- passwd *pswd = new passwd;
- spwd *shd = new spwd;
- group *grop = new group;
- char *dir = new char(strlen(argv[1]) + 7); // имя пользователя + /home/
- strcat(dir, "/home/");
- strcat(dir, argv[1]);
- pswd->pw_name = argv[1];
- pswd->pw_uid = GetLastUserID() + 1;
- pswd->pw_passwd = "x";
- pswd->pw_gid = GetLastGroupID() + 1;
- pswd->pw_gecos = argv[2];
- pswd->pw_dir = dir;
- pswd->pw_shell = "/bin/bash";
- mkdir(dir, 755);
- chown(dir, pswd->pw_uid, pswd->pw_gid);
- shd->sp_namp = pswd->pw_name;
- shd->sp_pwdp = cpswd;
- shd->sp_lstchg = time(NULL);
- shd->sp_inact = -1;
- shd->sp_expire = -1;
- shd->sp_min = 0;
- shd->sp_max = 99999;
- shd->sp_warn = 7;
- shd->sp_flag = -1;
- grop->gr_name = pswd->pw_name;
- grop->gr_passwd = "x";
- grop->gr_gid = pswd->pw_gid;
- FILE *user = fopen("/etc/passwd", "a+");
- FILE *shadow = fopen("/etc/shadow", "a+");
- FILE *grp = fopen("/etc/group", "a+");
- putpwent(pswd,user);
- putspent(shd, shadow);
- putgrent(grop, grp);
- fclose(user);
- fclose(shadow);
- fclose(grp);
- cout << pswd->pw_gecos << " login: " << pswd->pw_name << " password: " << chparol << " uid: " << pswd->pw_uid
- << " gid: " << pswd->pw_gid << " homedir: " << pswd->pw_dir << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement