- goto getout;
- }
- if (!(readfp = fopen("/etc/group", "rt")))
- {
- priv(OFF);
- fputs("Ne mogu otvoriti /etc/group datoteku!\n", stderr);
- goto getout;
- }
- unlink("/tmp/group");
- if (!(writefp = fopen("/tmp/group", "wt")))
- {
- fclose(readfp);
- priv(OFF);
- fputs("Ne mogu otvoriti privremenu datoteku!\n", stderr);
- goto getout;
- }
- while (fgets(line, 2048, readfp))
- {
- if (strstr(line, group) == line && line[strlen(group)] == ':')
- {
- char *ptr, left, right;
-
- if ((ptr = strstr(line, loginname)))
- {
-
- left = *(ptr - 1);
- right = *(ptr + strlen(loginname));
- if ((left == ':' || left == ',') &&
- (right == ',' || right == '\n'))
- {
- fclose(readfp);
- fclose(writefp);
- unlink("/tmp/group");
- priv(OFF);
- fputs("Korisnik je vec u unesenoj grupi!\n", stderr);
- goto getout;
- }
- }
- if ((ptr = strrchr(line, '\n')))
- *ptr = 0;
- else
- {
- fclose(readfp);
- fclose(writefp);
- unlink("/tmp/group");
- priv(OFF);
- fputs("Problem s datotekom /etc/group!\n", stderr);
- goto getout;
- }
- if (*(ptr - 1) != ':')
- strcat(line, ",");
- strcat(line, loginname);
- strcat(line, "\n");
- found = 1;
- }
- fputs(line, writefp);
- if (ferror(writefp))
- {
- fclose(readfp);
- fclose(writefp);
- unlink("/tmp/group");
- priv(OFF);
- fputs("Problem prilikom pisanja privremene datoteke!\n", stderr);
- goto getout;
- }
- }
- fclose(readfp);
- fclose(writefp);
- if (found)
- {
- system("/bin/mv /tmp/group /etc/group");
- priv(OFF);
- fputs("Korisnik uspjesno dodan u grupu.\n", stderr);
- }
- else
- {
- unlink("/tmp/group");
- priv(OFF);
- fputs("Ne postoji unesena grupa!\n", stderr);
- }
- }
- }
- else
- fputs("Ne postoji uneseni korisnik!\n", stderr);
- }
- getout:
- priv(ON);
- unlockpw();
- priv(OFF);
- waitkey();
- break;
- case '3':
- getuser("Brisanje korisnika iz grupe:");
- if (testuser(ALL) == OK)
- {
- if (getpwnam(loginname))
- {
- getgroup("");
- if (testgroup() == OK)
- {
- FILE *readfp, *writefp;
- char line[2048];
- int found = 0, empty = 0;
-
- logger("REMOVE USER FROM GROUP: user %s, group %s", loginname, group);
- priv(ON);
- if (lockpw() == ERROR)
- {
- priv(OFF);
+ goto getout;
+ }
+ if (!(readfp = fopen(GROUPFILE, "rt")))
+ {
+ priv(OFF);
+ fputs("Ne mogu otvoriti /etc/group datoteku!\n", stderr);
+ goto getout;
+ }
+ if (stat(GROUPFILE, &fl) == -1)
+ {
+ priv(OFF);
+ fputs("Ne mogu pogledati dozvole na /etc/group datoteci!\n", stderr);
+ goto getout;
+ }
+ unlink(GROUPTMPFILE);
+ if (!(writefp = fopen(GROUPTMPFILE, "wt")))
+ {
+ fclose(readfp);
+ priv(OFF);
+ fputs("Ne mogu otvoriti privremenu datoteku!\n", stderr);
+ goto getout;
+ }
+ while (fgets(line, 2048, readfp))
+ {
+ if (strstr(line, group) == line && line[strlen(group)] == ':')
+ {
+ char *ptr, left, right;
+
+ if ((ptr = strstr(line + strlen(group) + 1, loginname)))
+ {
+ left = *(ptr - 1);
+ right = *(ptr + strlen(loginname));
+ if ((left == ':' || left == ',') &&
+ (right == ',' || right == '\n'))
+ {
+ fclose(readfp);
+ fclose(writefp);
+ unlink(GROUPTMPFILE);
+ priv(OFF);
+ fputs("Korisnik je vec u unesenoj grupi!\n", stderr);
+ goto getout;
+ }
+ }
+ if ((ptr = strrchr(line, '\n')))
+ *ptr = 0;
+ else
+ {
+ fclose(readfp);
+ fclose(writefp);
+ unlink(GROUPTMPFILE);
+ priv(OFF);
+ fputs("Problem s datotekom /etc/group!\n", stderr);
+ goto getout;
+ }
+ if (*(ptr - 1) != ':')
+ strcat(line, ",");
+ strcat(line, loginname);
+ strcat(line, "\n");
+ found = 1;
+ }
+ fputs(line, writefp);
+ if (ferror(writefp))
+ {
+ fclose(readfp);
+ fclose(writefp);
+ unlink(GROUPTMPFILE);
+ priv(OFF);
+ fputs("Problem prilikom pisanja privremene datoteke!\n", stderr);
+ goto getout;
+ }
+ }
+ fclose(readfp);
+ fclose(writefp);
+ if (found)
+ {
+ system("/bin/mv /tmp/group /etc/group");
+ chmod(GROUPFILE, fl.st_mode);
+ chown(GROUPFILE, fl.st_uid, fl.st_gid);
+ priv(OFF);
+ fputs("Korisnik uspjesno dodan u grupu.\n", stderr);
+ }
+ else
+ {
+ unlink(GROUPTMPFILE);
+ priv(OFF);
+ fputs("Ne postoji unesena grupa!\n", stderr);
+ }
+ }
+ }
+ else
+ fputs("Ne postoji uneseni korisnik!\n", stderr);
+ }
+getout:
+ priv(ON);
+ unlockpw();
+ priv(OFF);
+ waitkey();
+ break;
+ case '3':
+ getuser("Brisanje korisnika iz grupe:");
+ if (testuser(ALL) == OK)
+ {
+ if (getpwnam(loginname))
+ {
+ getgroup("");
+ if (testgroup() == OK)
+ {
+ FILE *readfp, *writefp;
+ char line[2048];
+ int found = 0, empty = 0;
+ struct stat fl;
+
+ logger("REMOVE USER FROM GROUP: user %s, group %s", loginname, group);
+ priv(ON);
+ if (lockpw() == ERROR)
+ {
+ priv(OFF);