Verständnisprobleme mit open/setuid



  • Hi!
    Kann mir jemand bitte erklären, was dieses Programm andeuten soll?
    Also ich meine diesen Zusammenhang zwischen cf() und seteuid()...
    Danke im voraus!!!

    #include  <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <string.h>
    
    cf(fname)
    char *fname;
    {
        int fd;
        fd=open(fname,O_RDWR|O_CREAT,0644);
        write(fd,fname,strlen(fname));
        write(fd,"\n",1);
        close(fd);
    }
    
    main()
    {  int uid;
       int euid;
       int res;
    
       uid=getuid();
       euid=geteuid();
       printf("Bei Programstart: ") ;
       printf("real uid = %d, effective uid = %d\n", uid, euid);
    
       printf("Erzeuge file1\n");
       cf("file1");
       res=seteuid(uid);
       if (res) printf("res setuid %d\n",res);
       printf("seteuid(%d): real uid = %d, effective uid = %d\n", uid,getuid(), geteuid());
    
       printf("Erzeuge file2\n");
       cf("file2");
       res=seteuid(euid);
       if (res) printf("res seteuid %d\n",res);
       printf("seteuid(%d): real uid = %d, effective uid = %d\n", euid, getuid(), geteuid());
    
       printf("Erzeuge file3\n");
       cf("file3");
       res=seteuid(uid);
       if (res) printf("res seteuid %d\n",res);
       printf("seteuid(%d): real uid = %d, effective uid = %d\n", uid, getuid(), geteuid());
    
       printf("Erzeuge file4\n");
       cf("file4");
       exit(0);
    }
    


  • Der Sinn des Programms erschließt sich mir auch nicht.
    Vll war das früher mal ein exploit.
    Zumindest ist der code wohl schon ziemlich alt

    cf(fname)
    char *fname;
    {
    

    Definition von Funktionen ohne Typ
    und den Typ der Parameter hinter die Funktion geschrieben.
    Das ist ziemlicher "altes" C.
    (Wundert mich eignetlicht das der gcc das noch schluckt)

    Zumindest der output des Programm ist so wie man ihn erwartet:

    storm@localhost ~ $ gcc test.c -o test
    storm@localhost ~ $ ./test
    Bei Programstart: real uid = 1000, effective uid = 1000
    Erzeuge file1
    seteuid(1000): real uid = 1000, effective uid = 1000
    Erzeuge file2
    seteuid(1000): real uid = 1000, effective uid = 1000
    Erzeuge file3
    seteuid(1000): real uid = 1000, effective uid = 1000
    Erzeuge file4
    storm@localhost ~ $ ls -l file*
    -rw-r--r-- 1 storm users 6 23. Jun 12:23 file1
    -rw-r--r-- 1 storm users 6 23. Jun 12:23 file2
    -rw-r--r-- 1 storm users 6 23. Jun 12:23 file3
    -rw-r--r-- 1 storm users 6 23. Jun 12:23 file4
    

Anmelden zum Antworten