All pastes #752035 Raw Edit

Unnamed

public text v1 · immutable
#752035 ·published 2007-10-27 23:33 UTC
rendered paste body
#define SUID printf("uid==%d euid==%d\n",getuid(),geteuid())
#define error(MSG) _error(MSG,__LINE__,__FILE__)
void _error(const char*msg,int line,const char* file){
        printf("%s:%d %s\n",file,line,msg);
        exit(1);
}
int main(int argc,char *argv[],char* envp[]){
        signed int feedoutfd=-1,feedinfd=-1;
        struct sockaddr_in adrs[2];
        char arga[512],argb[512];
        char*args[7];
        int ret;
        args[0]="/usr/bin/valgrind";
        args[1]="-v";
        args[2]="./feedmain";
        args[3]="-proper";
        args[4]=arga;
        args[5]=argb;
        args[6]=0;
        printf("starting feed program\n");
        SUID;
        feedoutfd=socket(PF_INET,SOCK_STREAM,0);
        feedinfd=socket(PF_INET,SOCK_STREAM,0);
        if ((feedoutfd <0) | (feedinfd <0)) {
                printf("error 1 %d %d\n",feedoutfd,feedinfd);
                return(1);
        }
        bzero((char *) &adrs[0],sizeof(adrs[0]));
        adrs[0].sin_family = AF_INET;
        adrs[1].sin_family = AF_INET;
        adrs[0].sin_port = htons(98);
        adrs[1].sin_port = htons(104);
        adrs[0].sin_addr.s_addr = INADDR_ANY;
        adrs[1].sin_addr.s_addr = INADDR_ANY;
        if (bind(feedoutfd, (struct sockaddr *) &adrs[0],sizeof(adrs[0])) < 0) error("ERROR on bindingA");
        if (bind(feedinfd, (struct sockaddr *) &adrs[1],sizeof(adrs[1])) < 0) error("ERROR on bindingB");
        snprintf(arga,500,"%d",feedoutfd);
        snprintf(argb,500,"%d",feedinfd);
        seteuid(getuid());
        SUID;
        ret=execve("/usr/bin/valgrind",args,envp);
        if (ret){
                printf("ERROR %d on execve\n",ret);
                return -1;
        }
}