!C99Shell v. 1.0 pre-release build #13!

Software: Apache/2.0.54 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.54 OpenSSL/0.9.7l DAV/2 FrontPage/5.0.2.2635 PHP/4.4.0 mod_gzip/2.0.26.1a 

uname -a: Linux snow.he.net 4.4.276-v2-mono-1 #1 SMP Wed Jul 21 11:21:17 PDT 2021 i686 

uid=99(nobody) gid=98(nobody) groups=98(nobody) 

Safe-mode: OFF (not secure)

/usr/src/linux-2.4.18-xfs-1.1/fs/   drwxr-xr-x
Free 318.34 GB of 458.09 GB (69.49%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     fifo.c (3.26 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
 *  linux/fs/fifo.c
 *
 *  written by Paul H. Hargrove
 *
 *  Fixes:
 *    10-06-1999, AV: fixed OOM handling in fifo_open(), moved
 *            initialization there, switched to external
 *            allocation of pipe_inode_info.
 */

#include <linux/mm.h>
#include <linux/slab.h>
#include <linux/smp_lock.h>

static void wait_for_partner(struct inode* inode, unsigned int* cnt)
{
    int cur = *cnt;    
    while(cur == *cnt) {
        pipe_wait(inode);
        if(signal_pending(current))
            break;
    }
}

static void wake_up_partner(struct inode* inode)
{
    wake_up_interruptible(PIPE_WAIT(*inode));
}

static int fifo_open(struct inode *inode, struct file *filp)
{
    int ret;

    ret = -ERESTARTSYS;
    lock_kernel();
    if (down_interruptible(PIPE_SEM(*inode)))
        goto err_nolock_nocleanup;

    if (!inode->i_pipe) {
        ret = -ENOMEM;
        if(!pipe_new(inode))
            goto err_nocleanup;
    }
    filp->f_version = 0;

    switch (filp->f_mode) {
    case 1:
    /*
     *  O_RDONLY
     *  POSIX.1 says that O_NONBLOCK means return with the FIFO
     *  opened, even when there is no process writing the FIFO.
     */
        filp->f_op = &read_fifo_fops;
        PIPE_RCOUNTER(*inode)++;
        if (PIPE_READERS(*inode)++ == 0)
            wake_up_partner(inode);

        if (!PIPE_WRITERS(*inode)) {
            if ((filp->f_flags & O_NONBLOCK)) {
                /* suppress POLLHUP until we have
                 * seen a writer */
                filp->f_version = PIPE_WCOUNTER(*inode);
            } else 
            {
                wait_for_partner(inode, &PIPE_WCOUNTER(*inode));
                if(signal_pending(current))
                    goto err_rd;
            }
        }
        break;
    
    case 2:
    /*
     *  O_WRONLY
     *  POSIX.1 says that O_NONBLOCK means return -1 with
     *  errno=ENXIO when there is no process reading the FIFO.
     */
        ret = -ENXIO;
        if ((filp->f_flags & O_NONBLOCK) && !PIPE_READERS(*inode))
            goto err;

        filp->f_op = &write_fifo_fops;
        PIPE_WCOUNTER(*inode)++;
        if (!PIPE_WRITERS(*inode)++)
            wake_up_partner(inode);

        if (!PIPE_READERS(*inode)) {
            wait_for_partner(inode, &PIPE_RCOUNTER(*inode));
            if (signal_pending(current))
                goto err_wr;
        }
        break;
    
    case 3:
    /*
     *  O_RDWR
     *  POSIX.1 leaves this case "undefined" when O_NONBLOCK is set.
     *  This implementation will NEVER block on a O_RDWR open, since
     *  the process can at least talk to itself.
     */
        filp->f_op = &rdwr_fifo_fops;

        PIPE_READERS(*inode)++;
        PIPE_WRITERS(*inode)++;
        PIPE_RCOUNTER(*inode)++;
        PIPE_WCOUNTER(*inode)++;
        if (PIPE_READERS(*inode) == 1 || PIPE_WRITERS(*inode) == 1)
            wake_up_partner(inode);
        break;

    default:
        ret = -EINVAL;
        goto err;
    }

    /* Ok! */
    up(PIPE_SEM(*inode));
    unlock_kernel();
    return 0;

err_rd:
    if (!--PIPE_READERS(*inode))
        wake_up_interruptible(PIPE_WAIT(*inode));
    ret = -ERESTARTSYS;
    goto err;

err_wr:
    if (!--PIPE_WRITERS(*inode))
        wake_up_interruptible(PIPE_WAIT(*inode));
    ret = -ERESTARTSYS;
    goto err;

err:
    if (!PIPE_READERS(*inode) && !PIPE_WRITERS(*inode)) {
        struct pipe_inode_info *info = inode->i_pipe;
        inode->i_pipe = NULL;
        free_page((unsigned long)info->base);
        kfree(info);
    }

err_nocleanup:
    up(PIPE_SEM(*inode));

err_nolock_nocleanup:
    unlock_kernel();
    return ret;
}

/*
 * Dummy default file-operations: the only thing this does
 * is contain the open that then fills in the correct operations
 * depending on the access mode of the file...
 */
struct file_operations def_fifo_fops = {
    open:        fifo_open,    /* will set read or write pipe_fops */
};

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0089 ]--