完了,快来帮忙,求求各位高手!!!详情内见!!!SOS!!!hem!!!

leechie 2001-06-22 08:30:00
有谁知道如果不小心将sco-unix的/etc/passwd删除,如何恢复!!!
...全文
68 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
leechie 2001-06-26
  • 打赏
  • 举报
回复
/***************************************************************
* Author : leechie *
* Date : 2001/06/22 *
* Email : leechie@263.net *
* Descriptions : This is the FTP application use FTP API *
****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <dirent.h>
#include <net/libftp.h>

#define NORMAL 0
#define ABNORMAL 1
#define ON 1
#define OFF 0

char DownLoadDir[256];
char UpLoadDir[256];
char HostName[256];
char UserName[256];
char PassWord[256];
FTPINFO ftpinfo;

void check_n_close();
char *ScanStr(char *sstr,char *dstr);
char *PraseFile(char *filename);
char *readline(int fd);
int dirfun(char *dirname,int fd1,int fd2);
char *GetConfig(char *InVal);
int PutFile();
int MkDir();

int main(int argc,char *argv[])
{
int fd1,fd2;

strcpy(DownLoadDir,GetConfig("DownLoadDir"));
strcpy(UpLoadDir,GetConfig("UpLoadDir"));
strcpy(HostName,GetConfig("HostName"));
strcpy(UserName,GetConfig("UserName"));
strcpy(PassWord,GetConfig("PassWord"));

ftpinfo.debug = ON;
ftpinfo.transf_calc = ON;
ftpinfo.linger = OFF;

printf("%s\t%s\t%s\t%s\n",DownLoadDir,UpLoadDir,HostName,UserName,PassWord);

unlink("/tmp/myftpfile.tmp");
unlink("/tmp/myftpdir.tmp");
fd1=open("/tmp/myftpfile.tmp",O_RDWR|O_CREAT|O_EXCL,0666);
if(fd1<0)
{
perror("Open");
exit(1);
}

fd2=open("/tmp/myftpdir.tmp",O_RDWR|O_CREAT|O_EXCL,0666);
if(fd2<0)
{
perror("Open");
exit(1);
}
dirfun(DownLoadDir,fd1,fd2);
close(fd1);
close(fd2);
MkDir();
PutFile();
exit(0);
}

char *GetConfig(char *InVal)
{
char *tmpbuf;
char workbuf[256];

if((tmpbuf=getenv(InVal))==NULL)
{
fprintf(stderr,"[%s]\t>",InVal);
gets(workbuf);
tmpbuf=&workbuf[0];
}

return(tmpbuf);
}

char *readline(int fd)
{
char ch,tmpbuf[256];
int i=0;

memset(tmpbuf,'\0',256);
while(read(fd,&ch,1)==1)
{
if(ch=='\n')
break;
else if(ch==EOF)
{
tmpbuf[0]='\0';
return(NULL);
}
else
tmpbuf[i++]=ch;
}
tmpbuf[i]='\0';

return(&tmpbuf[0]);
}

char *ScanStr(char *sstr,char *dstr)
{
while(*(sstr++)==(*dstr++))
;

printf("str=[%s]\n",dstr);

return(dstr);
}

char *PraseFile(char *filename)
{
char *workbuffer;

workbuffer=ScanStr(DownLoadDir,filename);

return(&workbuffer[0]);
}

int MkDir()
{
char *dirname;
int fd;

fd=open("/tmp/myftpdir.tmp",O_RDWR,0666);
if(fd<0)
return(1);

if (ftp_login ( &ftpinfo, HostName, UserName,PassWord , NULL ) < 0)
{
fprintf(stderr,"error: ftp_login failed.\n");
check_n_close ( &ftpinfo, ABNORMAL );
}

if (ftp_chdir( &ftpinfo, UpLoadDir ) < 0)
{
fprintf(stderr,"error: ftp_chdir failed.\n");
(void) check_n_close ( &ftpinfo, ABNORMAL );
}

if (ftp_pwd ( &ftpinfo ) < 0)
{
fprintf(stderr,"error: ftp_pwd failed.\n");
(void) check_n_close ( &ftpinfo, ABNORMAL );
}

while((dirname=readline(fd))!=NULL)
{
if(dirname[0]=='\0')
break;
dirname=PraseFile(dirname);
printf("dirname:[%s]\n",dirname);

if (ftp_mkdir ( &ftpinfo,dirname ) < 0)
{
fprintf(stderr,"error: ftp_mkdir failed.\n");
check_n_close ( &ftpinfo, ABNORMAL );
return(1);
}

}

if (ftp_bye( &ftpinfo ) < 0)
{
fprintf(stderr,"error: ftp_bye failed.\n");
(void) check_n_close ( &ftpinfo, ABNORMAL );
}

close(fd);
return(0);
}

int PutFile()
{
char *filename,*dfilename;
int fd;

filename=(char *)malloc(sizeof(char)*256);
dfilename=(char *)malloc(sizeof(char)*256);

fd=open("/tmp/myftpfile.tmp",O_RDWR,0666);
if(fd<0)
return(1);

if (ftp_login ( &ftpinfo, HostName, UserName, PassWord, NULL ) < 0)
{
fprintf(stderr,"error: ftp_login failed.\n");
(void) check_n_close ( &ftpinfo, ABNORMAL );
return(2);
}

if (ftp_chdir( &ftpinfo, UpLoadDir ) < 0)
{
fprintf(stderr,"error: ftp_chdir failed.\n");
(void) check_n_close ( &ftpinfo, ABNORMAL );
}

while((filename=readline(fd))!=NULL)
{
dfilename=PraseFile(filename);
printf("filename:[%s] dfilename:[%s]\n",filename,dfilename);
if (ftp_putfile ( &ftpinfo,"/etc/passwd","/tmp/passwd" ) < 0)
{
fprintf(stderr,"error: ftp_putfile failed.\n");
(void) check_n_close ( &ftpinfo, ABNORMAL );
}
else
{
fprintf(stderr,"transfer speed: \n");
fprintf(stderr,"\t\tbytes transferred = %ld\n",
ftpinfo.speed.size_bytes);
fprintf(stderr,"\t\ttime taken = %.2g seconds\n",
ftpinfo.speed.seconds);
fprintf(stderr,"\t\trate = %.2g Kbytes/s\n",
ftpinfo.speed.kbs);
}

}

if (ftp_bye( &ftpinfo ) < 0)
{
fprintf(stderr,"error: ftp_bye failed.\n");
(void) check_n_close ( &ftpinfo, ABNORMAL );
}
close(fd);

return(0);
}

int dirfun(char *dirname,int fd1,int fd2)
{
DIR *dp;
char namebuf[256],tmpname[256];
struct dirent *dirp;
struct stat buf;

memset(namebuf,0,256);
strcpy(namebuf,dirname);
if((dp=opendir(namebuf))==NULL)
return(1);
while((dirp=readdir(dp))!=NULL)
{
memset(namebuf,0,256);
strcpy(namebuf,dirname);
if(!strncmp(dirp->d_name,".",1))
continue;
strcat(namebuf,"/");
strcat(namebuf,dirp->d_name);

if(stat(namebuf,&buf)<0)
continue;
else
{
if(S_ISREG(buf.st_mode))
{
strcpy(tmpname,namebuf);
strcat(tmpname,"\n");
write(fd1,tmpname,strlen(tmpname));
}
else if(S_ISDIR(buf.st_mode))
{
strcpy(tmpname,namebuf);
strcat(tmpname,"\n");
write(fd2,tmpname,strlen(tmpname));
dirfun(namebuf,fd1,fd2);
}
else
{
continue;
}
}
}
close(dp);

return(0);
}

void check_n_close ( ftpinfo, status )
FTPINFO *ftpinfo;
int status;
{
if (ftpinfo -> sockfd >= 0)
close (ftpinfo -> sockfd);
if (status == ABNORMAL)
fprintf(stderr,"error: %s\n", ftpinfo -> ftp_msg);
else
fprintf(stderr,"success: %s\n", ftpinfo -> ftp_msg);

fprintf(stderr,"final reply from server: %d\n", ftpinfo -> reply);
fflush ( stdout );

exit (status);
}


都是他惹的祸!!!
DaNiao 2001-06-25
  • 打赏
  • 举报
回复
一个可能的解决办法:用diskedit找,比如你记得几个人的口令,让diskedit在整个硬盘上找一遍,如果运气好的话还能找到,但如果已经被别的什么东西给覆盖了,就完全没办法了(除非拿到FBI专业试验室去——好象也有专门做这个的私营公司,不过中国没有)。
如果你的passwd是加密了的,就比较难办了,我没研究过passwd文件,不过我猜其中会有些部分是固定的,可以找找看。
fredrick 2001-06-25
  • 打赏
  • 举报
回复
这样的情况下说明你是以root身份删除的这个文件,已经没有办法恢复了,这个完全属于你的责任了。

19,610

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧