免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2423 | 回复: 3
打印 上一主题 下一主题

[SCO UNIX] cp命令的源代码 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-01-24 23:15 |只看该作者 |倒序浏览
  1. /*
  2. * cp oldfile newfile
  3. */

  4. main(argc,argv)
  5. char **argv;
  6. {
  7.         static int buf[256];
  8.         int fold, fnew, n;
  9.         register char *p1, *p2, *bp;
  10.         int mode;

  11.         if(argc != 3) {
  12.                 write(1, "Usage: cp oldfile newfile\n", 26);
  13.                 exit(1);
  14.         }
  15.         if((fold = open(argv[1], 0)) < 0) {
  16.                 write(1, "Cannot open old file.\n", 22);
  17.                 exit(1);
  18.         }
  19.         fstat(fold, buf);
  20.         mode = buf[2];
  21.         /* is target a directory? */
  22.         if (stat(argv[2], buf+50)>;=0 && (buf[52]&060000)==040000) {
  23.                 p1 = argv[1];
  24.                 p2 = argv[2];
  25.                 bp = buf+100;
  26.                 while(*bp++ = *p2++);
  27.                 bp[-1] = '/';
  28.                 p2 = bp;
  29.                 while(*bp = *p1++)
  30.                         if(*bp++ == '/')
  31.                                 bp = p2;
  32.                 argv[2] = buf+100;
  33.         }
  34.         if (stat(argv[2], buf+50) >;= 0) {
  35.                 if (buf[0]==buf[50] && buf[1]==buf[51]) {
  36.                         write(1, "Copying file to itself.\n", 24);
  37.                         exit(1);
  38.                 }
  39.         }
  40.         if ((fnew = creat(argv[2], mode)) < 0) {
  41.                 write(1, "Can't create new file.\n", 23);
  42.                 exit(1);
  43.         }
  44.         while(n = read(fold,  buf,  512)) {
  45.         if(n < 0) {
  46.                 write(1, "Read error\n", 11);
  47.                 exit(1);
  48.         } else
  49.                 if(write(fnew, buf, n) != n){
  50.                         write(1, "Write error.\n", 13);
  51.                         exit(1);
  52.                 }
  53.         }
  54.         exit(0);
  55. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2004-01-24 23:39 |只看该作者

cp命令的源代码

这不是cp命令的源代码,充其量只不过是一个简单的实现罢了。代码不符合ansi C标准,而是标准的K&R C。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-01-24 23:56 |只看该作者

cp命令的源代码

mv的如下
  1. /*
  2. mv [-d] file1 file2

  3. unlink file2
  4. link file1 file2
  5. unlink file1
  6. */
  7. int stbuf[42];
  8. struct sbuf {
  9. int dev;
  10. int inum;
  11. int imode;
  12. char nlink;
  13. char uid;
  14. char gid;
  15. char siz0;
  16. char siz1;
  17. int addr[8];
  18. int adate[2];
  19. int mdate[2];
  20. };
  21. char strbuf[70];

  22. main(argc,argv)
  23. int argc;
  24. char *argv[];
  25. {
  26. char **argp;
  27. char *argp1, *argp2, *argp3, *argp4;
  28. char *p, *p1, *p2;
  29. char place[100];
  30. int i;
  31. int status;
  32. int b;
  33. argp = argv;
  34. /*
  35.         check for correct number
  36.         of arguments
  37. */
  38. if(argc != 3){
  39.         write(1,"Usage: mv name1 name2\n",22);
  40.         exit();
  41. }
  42. /*
  43.         is there anything to do?
  44. */
  45. argp3 = argp[1];
  46. argp4 = argp[2];
  47. if(stat(argp[1], stbuf) < 0){
  48.         write(1,"Source file non-existent\n",25);
  49.         exit();
  50. }
  51. /*
  52.         yes, there is a source.
  53.         check whether file or directory
  54. */
  55. if((stbuf[0].imode & 060000) == 040000){
  56. /*
  57.         The source is a directory, so
  58.         we do lots of checking and
  59.         messing around so as not to get
  60.         into trouble.  This patch of
  61.         code contains administrative
  62.         policies rather than system
  63.         restrictions.
  64. */
  65.         if(stat(argp[2], stbuf) >;= 0){
  66.                 write(1,"Directory target exists.\n",25);
  67.                 exit();
  68.         }
  69.         argp1 = argp[1];
  70.         argp2 = argp[2];
  71.         while(*argp1 == *argp2){
  72.                 argp1++;
  73.                 if(*argp2++ == 0){
  74.                         write(1,"???\n",4);
  75.                         exit();
  76.                 }
  77.         }
  78.         while(*argp1)if(*argp1++ == '/'){
  79.                 write(1,"Directory rename only\n",22);
  80.                 exit();
  81.         }
  82.         while(*argp2)if(*argp2++ == '/'){
  83.                 write(1,"Directory rename only\n",22);
  84.                 exit();
  85.         }
  86.         if(*--argp1 == '.'){
  87.                 write(1,"values of B will give rise to dom!\n",37);
  88.                 exit();
  89.         }
  90. }else{
  91. /*
  92.         the source is a file.
  93. */
  94.         setuid(getuid());
  95.         if(stat(argp4, &stbuf[2]) >;= 0){
  96.                 if((stbuf[2].imode & 060000) == 040000){
  97.                         argp2 = strbuf;
  98.                         while(*argp2++ = *argp4++);
  99.                         argp2[-1] = '/';
  100.                         argp4 = argp[1];
  101.                         argp1 = argp[1];
  102.                         while(*argp4)
  103.                                 if(*argp4++ == '/')
  104.                                         argp1 = argp4;
  105.                         while(*argp2++ = *argp1++);
  106.                         argp4 = strbuf;
  107.                 }
  108.                 if(stat(argp4, &stbuf[2]) >;= 0){
  109.                         if((stbuf[0]==stbuf[2]) && (stbuf[1]==stbuf[3])){
  110.                                 write(1,"Files are identical.\n",21);
  111.                                 exit();
  112.                         }
  113.                         if((getuid()&0377) == stbuf[2].uid)
  114.                                 b = 0200; else
  115.                         if((getgid()&0377) == stbuf[2].gid)
  116.                                 b = 020; else
  117.                                 b = 02;
  118.                         if((stbuf[2].imode & b) == 0) {
  119.                                 printf("%s: %o mode ", argp4,
  120.                                         stbuf[2].imode & 07777);
  121.                                 i = b = getchar();
  122.                                 while(b != '\n' && b != '\0')
  123.                                         b = getchar();
  124.                                 if(i != 'y')
  125.                                         exit();
  126.                         }
  127.                         if(unlink(argp4) < 0){
  128.                                 write(1,"Cannot remove target file.\n",27);
  129.                                 exit();
  130.                         }
  131.                 }
  132.         }
  133. }
  134. if(link(argp3, argp4) < 0){
  135.         i = fork();
  136.         if(i == -1){
  137.                 write(1,"Try again.\n",11);
  138.                 exit();
  139.         }
  140.         if(i){
  141.                 while(wait(&status) != i);
  142.         }else{
  143.                 p = place;
  144.                 p1 = p;
  145.                 while(*p++ = *argp3++);
  146.                 p2 = p;
  147.                 while(*p++ = *argp4++);
  148.                 execl("/bin/cp","cp", p1, p2, 0);
  149.                 write(1, "no cp\n", 6);
  150.                 exit(1);
  151.         }
  152.         if((status & 0377) != 0){
  153.                 write(1,"?\n", 2);
  154.                 exit();
  155.         }
  156.         if(status != 0) exit();
  157. }
  158. if(unlink(argp3) < 0){
  159.         write(1,"Cannot unlink source file.\n",27);
  160.         exit();
  161. }
  162. }

  163. putchar(c)
  164. {
  165.         write(1, &c, 1);
  166. }

  167. getchar()
  168. {
  169.         char c;

  170.         if(read(0, &c, 1) != 1) return(0);
  171.         return(c);
  172. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2004-01-25 23:42 |只看该作者

cp命令的源代码

显然这些代码是伪造的!连反汇编的都不是!很拙劣!不要误人子弟了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP