!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:     attr.c (3.6 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
 *  linux/fs/attr.c
 *
 *  Copyright (C) 1991, 1992  Linus Torvalds
 *  changes by Thomas Schoebel-Theuer
 */

#include <linux/sched.h>
#include <linux/mm.h>
#include <linux/string.h>
#include <linux/smp_lock.h>
#include <linux/dnotify.h>
#include <linux/fcntl.h>
#include <linux/quotaops.h>

/* Taken over from the old code... */

/* POSIX UID/GID verification for setting inode attributes. */
int inode_change_ok(struct inode *inode, struct iattr *attr)
{
    int retval = -EPERM;
    unsigned int ia_valid = attr->ia_valid;

    /* If force is set do it anyway. */
    if (ia_valid & ATTR_FORCE)
        goto fine;

    /* Make sure a caller can chown. */
    if ((ia_valid & ATTR_UID) &&
        (current->fsuid != inode->i_uid ||
         attr->ia_uid != inode->i_uid) && !capable(CAP_CHOWN))
        goto error;

    /* Make sure caller can chgrp. */
    if ((ia_valid & ATTR_GID) &&
        (!in_group_p(attr->ia_gid) && attr->ia_gid != inode->i_gid) &&
        !capable(CAP_CHOWN))
        goto error;

    /* Make sure a caller can chmod. */
    if (ia_valid & ATTR_MODE) {
        if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER))
            goto error;
        /* Also check the setgid bit! */
        if (!in_group_p((ia_valid & ATTR_GID) ? attr->ia_gid :
                inode->i_gid) && !capable(CAP_FSETID))
            attr->ia_mode &= ~S_ISGID;
    }

    /* Check for setting the inode time. */
    if (ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET)) {
        if (current->fsuid != inode->i_uid && !capable(CAP_FOWNER))
            goto error;
    }
fine:
    retval = 0;
error:
    return retval;
}

int inode_setattr(struct inode * inode, struct iattr * attr)
{
    unsigned int ia_valid = attr->ia_valid;
    int error = 0;

    if (ia_valid & ATTR_SIZE) {
        error = vmtruncate(inode, attr->ia_size);
        if (error)
            goto out;
    }

    if (ia_valid & ATTR_UID)
        inode->i_uid = attr->ia_uid;
    if (ia_valid & ATTR_GID)
        inode->i_gid = attr->ia_gid;
    if (ia_valid & ATTR_ATIME)
        inode->i_atime = attr->ia_atime;
    if (ia_valid & ATTR_MTIME)
        inode->i_mtime = attr->ia_mtime;
    if (ia_valid & ATTR_CTIME)
        inode->i_ctime = attr->ia_ctime;
    if (ia_valid & ATTR_MODE) {
        inode->i_mode = attr->ia_mode;
        if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID))
            inode->i_mode &= ~S_ISGID;
    }
    mark_inode_dirty(inode);
out:
    return error;
}

static int setattr_mask(unsigned int ia_valid)
{
    unsigned long dn_mask = 0;

    if (ia_valid & ATTR_UID)
        dn_mask |= DN_ATTRIB;
    if (ia_valid & ATTR_GID)
        dn_mask |= DN_ATTRIB;
    if (ia_valid & ATTR_SIZE)
        dn_mask |= DN_MODIFY;
    /* both times implies a utime(s) call */
    if ((ia_valid & (ATTR_ATIME|ATTR_MTIME)) == (ATTR_ATIME|ATTR_MTIME))
        dn_mask |= DN_ATTRIB;
    else if (ia_valid & ATTR_ATIME)
        dn_mask |= DN_ACCESS;
    else if (ia_valid & ATTR_MTIME)
        dn_mask |= DN_MODIFY;
    if (ia_valid & ATTR_MODE)
        dn_mask |= DN_ATTRIB;
    return dn_mask;
}

int notify_change(struct dentry * dentry, struct iattr * attr)
{
    struct inode *inode = dentry->d_inode;
    int error;
    time_t now = CURRENT_TIME;
    unsigned int ia_valid = attr->ia_valid;

    if (!inode)
        BUG();

    attr->ia_ctime = now;
    if (!(ia_valid & ATTR_ATIME_SET))
        attr->ia_atime = now;
    if (!(ia_valid & ATTR_MTIME_SET))
        attr->ia_mtime = now;

    lock_kernel();
    if (inode->i_op && inode->i_op->setattr) 
        error = inode->i_op->setattr(dentry, attr);
    else {
        error = inode_change_ok(inode, attr);
        if (!error) {
            if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||
                (ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid))
                error = DQUOT_TRANSFER(inode, attr) ? -EDQUOT : 0;
            if (!error)
                error = inode_setattr(inode, attr);
        }
    }
    unlock_kernel();
    if (!error) {
        unsigned long dn_mask = setattr_mask(ia_valid);
        if (dn_mask)
            dnotify_parent(dentry, dn_mask);
    }
    return error;
}

:: 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.0213 ]--