!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/efs/   drwxr-xr-x
Free 318.35 GB of 458.09 GB (69.5%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     dir.c (2.53 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
 * dir.c
 *
 * Copyright (c) 1999 Al Smith
 */

#include <linux/efs_fs.h>

static int efs_readdir(struct file *, void *, filldir_t);

struct file_operations efs_dir_operations = {
    read:        generic_read_dir,
    readdir:    efs_readdir,
};

struct inode_operations efs_dir_inode_operations = {
    lookup:        efs_lookup,
};

static int efs_readdir(struct file *filp, void *dirent, filldir_t filldir) {
    struct inode *inode = filp->f_dentry->d_inode;
    struct buffer_head *bh;

    struct efs_dir        *dirblock;
    struct efs_dentry    *dirslot;
    efs_ino_t        inodenum;
    efs_block_t        block;
    int            slot, namelen;
    char            *nameptr;

    if (inode->i_size & (EFS_DIRBSIZE-1))
        printk(KERN_WARNING "EFS: WARNING: readdir(): directory size not a multiple of EFS_DIRBSIZE\n");

    /* work out where this entry can be found */
    block = filp->f_pos >> EFS_DIRBSIZE_BITS;

    /* each block contains at most 256 slots */
    slot  = filp->f_pos & 0xff;

    /* look at all blocks */
    while (block < inode->i_blocks) {
        /* read the dir block */
        bh = sb_bread(inode->i_sb, efs_bmap(inode, block));

        if (!bh) {
            printk(KERN_ERR "EFS: readdir(): failed to read dir block %d\n", block);
            break;
        }

        dirblock = (struct efs_dir *) bh->b_data; 

        if (be16_to_cpu(dirblock->magic) != EFS_DIRBLK_MAGIC) {
            printk(KERN_ERR "EFS: readdir(): invalid directory block\n");
            brelse(bh);
            break;
        }

        while (slot < dirblock->slots) {
            if (dirblock->space[slot] == 0) {
                slot++;
                continue;
            }

            dirslot  = (struct efs_dentry *) (((char *) bh->b_data) + EFS_SLOTAT(dirblock, slot));

            inodenum = be32_to_cpu(dirslot->inode);
            namelen  = dirslot->namelen;
            nameptr  = dirslot->name;

#ifdef DEBUG
            printk(KERN_DEBUG "EFS: readdir(): block %d slot %d/%d: inode %u, name \"%s\", namelen %u\n", block, slot, dirblock->slots-1, inodenum, nameptr, namelen);
#endif
            if (namelen > 0) {
                /* found the next entry */
                filp->f_pos = (block << EFS_DIRBSIZE_BITS) | slot;

                /* copy filename and data in dirslot */
                filldir(dirent, nameptr, namelen, filp->f_pos, inodenum, DT_UNKNOWN);

                /* sanity check */
                if (nameptr - (char *) dirblock + namelen > EFS_DIRBSIZE) {
                    printk(KERN_WARNING "EFS: directory entry %d exceeds directory block\n", slot);
                    slot++;
                    continue;
                }

                /* store position of next slot */
                if (++slot == dirblock->slots) {
                    slot = 0;
                    block++;
                }
                brelse(bh);
                filp->f_pos = (block << EFS_DIRBSIZE_BITS) | slot;
                return 0;
            }
            slot++;
        }
        brelse(bh);

        slot = 0;
        block++;
    }

    filp->f_pos = (block << EFS_DIRBSIZE_BITS) | slot;
    return 0;
}


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