Toon posts:

[C] Vreemde segmentation fault.

Pagina: 1
Acties:
  • 60 views sinds 30-01-2008

Verwijderd

Topicstarter
Oi,

ik ben bezig met een stuk c code schrijven dat je user rechten veranderd naar root bij het aanroepen, hij controleerd het user id van de gebruiker die het aanroept met wat uid's die in een file staan (/etc/access). Alleen mijn prog segfault steeds als je een argument meegeeft. Hij laat wel alle output zien.

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>

/* Een functie die de gebruker root maakt */
int makeroot(void) {
        
        setreuid(0,0);
        setgid(0);
        setgroups(0);

        return 0;
}

int main( int argc, char *argv[] ) {
        int r_uid=-1, f_uid=-2, toegang=0, i=1;
        char *line;
        FILE *fp;

        /* Lees de file uit en kijk of de UID er in voorkomt */

        r_uid = getuid();
        fp = fopen("/etc/access","r");
        while (fscanf(fp,"%s",line) != EOF) {

                f_uid = atoi(line);
                if (r_uid == f_uid) {
                        toegang = 1;
                        break;
                }
        }

        /* Kijk of de user access heeft, zo niet stop het programma,
                dit zorgt er voor dat als de user geen toegang heeft hij
                er meteen uit gegooid wordt en dus niet de kans heeft
                iets te exploiten */

        if (toegang != 1) {
                fprintf(stderr,"Geen toegang\n");
                return 1;
        }

        /* Kijk of er commandline argumenten zijn meegegeven, zo
                niet open een shell met root rechten */

        if (argc == 1) {
                makeroot();
                execl("/bin/bash","bash",0);
                return 0;
        }

        /* Kijk of er switches in de commandline voorkomen, hier
                moet ik nog een loopje voor bouwen die alle argumenten
                langsgaat. */

        if (strncmp(argv[1],"--add",5) == 0) {
                fprintf(stderr,"Sorry, deze optie werkt nog niet\n");
        }

        /* Programma succesvol */
        return 0;
}


Het vreemde is dat ie niet segfault als je de 'i' weglaat bij de integer definities. (i wordt nog niet gebruikt maar die heb ik later nodig voor een loopje). Wie o wie ziet de fout :/

MrFreeze

[ Voor 16% gewijzigd door Glimi op 17-12-2002 10:09 . Reden: en toen was het leesbaar ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:36
Heb je al eens gedebugged? Op welke lijn wordt die seg-fault gegeven? etc....

Check ook dit

[ Voor 36% gewijzigd door whoami op 17-12-2002 09:44 ]

https://fgheysels.github.io/


Verwijderd

ik denk dat je eerst geheugen moet reserveren voordat je line in scanf gebruikt

Verwijderd

Topicstarter
He ja dat werkt, als ik van line geen pointer maak maar een gewone char array segfault ie niet.

Bedankt

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Mjah, je probeert dus gewoon characters te proppen in een pointer.
Misschien volgende keer even goed kijken waar je mee bezig bent, fscanf opzoeken in de manfile en je conclusies trekken :)
Misschien ook handig om volgende keer zelf even een debugger uit de kast te trekken :)

Dit topic is gesloten.