!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/nfs/   drwxr-xr-x
Free 318.39 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:     mount_clnt.c (4.13 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
 * linux/fs/nfs/mount_clnt.c
 *
 * MOUNT client to support NFSroot.
 *
 * Copyright (C) 1997, Olaf Kirch <okir@monad.swb.de>
 */

#include <linux/types.h>
#include <linux/socket.h>
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/uio.h>
#include <linux/net.h>
#include <linux/in.h>
#include <linux/inet.h>
#include <linux/sunrpc/clnt.h>
#include <linux/sunrpc/xprt.h>
#include <linux/sunrpc/sched.h>
#include <linux/nfs_fs.h>

#ifdef RPC_DEBUG
# define NFSDBG_FACILITY    NFSDBG_ROOT
#endif

/*
#define MOUNT_PROGRAM        100005
#define MOUNT_VERSION        1
#define MOUNT_MNT        1
#define MOUNT_UMNT        3
 */

static int            nfs_gen_mount(struct sockaddr_in *,
                          char *, struct nfs_fh *, int);
static struct rpc_clnt *    mnt_create(char *, struct sockaddr_in *, int);
extern struct rpc_program    mnt_program;

struct mnt_fhstatus {
    unsigned int        status;
    struct nfs_fh *        fh;
};

/*
 * Obtain an NFS file handle for the given host and path
 */
int
nfs_mount(struct sockaddr_in *addr, char *path, struct nfs_fh *fh)
{
    return nfs_gen_mount(addr, path, fh, NFS_MNT_VERSION);
}

int
nfs3_mount(struct sockaddr_in *addr, char *path, struct nfs_fh *fh)
{
    return nfs_gen_mount(addr, path, fh, NFS_MNT3_VERSION);
}

static int
nfs_gen_mount(struct sockaddr_in *addr, char *path, struct nfs_fh *fh, int version)
{
    struct rpc_clnt        *mnt_clnt;
    struct mnt_fhstatus    result = { 0, fh };
    char            hostname[32];
    int            status;
    int            call;

    dprintk("NFS:      nfs_mount(%08x:%s)\n",
            (unsigned)ntohl(addr->sin_addr.s_addr), path);

    strcpy(hostname, in_ntoa(addr->sin_addr.s_addr));
    if (!(mnt_clnt = mnt_create(hostname, addr, version)))
        return -EACCES;

    call = (version == 3) ? MOUNTPROC3_MNT : MNTPROC_MNT;
    status = rpc_call(mnt_clnt, call, path, &result, 0);
    return status < 0? status : (result.status? -EACCES : 0);
}

static struct rpc_clnt *
mnt_create(char *hostname, struct sockaddr_in *srvaddr, int version)
{
    struct rpc_xprt    *xprt;
    struct rpc_clnt    *clnt;

    if (!(xprt = xprt_create_proto(IPPROTO_UDP, srvaddr, NULL)))
        return NULL;

    clnt = rpc_create_client(xprt, hostname,
                &mnt_program, version,
                RPC_AUTH_NULL);
    if (!clnt) {
        xprt_destroy(xprt);
    } else {
        clnt->cl_softrtry = 1;
        clnt->cl_chatty   = 1;
        clnt->cl_oneshot  = 1;
        clnt->cl_intr = 1;
    }
    return clnt;
}

/*
 * XDR encode/decode functions for MOUNT
 */
static int
xdr_error(struct rpc_rqst *req, u32 *p, void *dummy)
{
    return -EIO;
}

static int
xdr_encode_dirpath(struct rpc_rqst *req, u32 *p, const char *path)
{
    p = xdr_encode_string(p, path);

    req->rq_slen = xdr_adjust_iovec(req->rq_svec, p);
    return 0;
}

static int
xdr_decode_fhstatus(struct rpc_rqst *req, u32 *p, struct mnt_fhstatus *res)
{
    struct nfs_fh *fh = res->fh;

    memset((void *)fh, 0, sizeof(*fh));
    if ((res->status = ntohl(*p++)) == 0) {
        fh->size = NFS2_FHSIZE;
        memcpy(fh->data, p, NFS2_FHSIZE);
    }
    return 0;
}

static int
xdr_decode_fhstatus3(struct rpc_rqst *req, u32 *p, struct mnt_fhstatus *res)
{
    struct nfs_fh *fh = res->fh;

    memset((void *)fh, 0, sizeof(*fh));
    if ((res->status = ntohl(*p++)) == 0) {
        int size = ntohl(*p++);
        if (size <= NFS3_FHSIZE) {
            fh->size = size;
            memcpy(fh->data, p, size);
        } else
            res->status = -EBADHANDLE;
    }
    return 0;
}

#define MNT_dirpath_sz        (1 + 256)
#define MNT_fhstatus_sz        (1 + 8)

static struct rpc_procinfo    mnt_procedures[2] = {
    { "mnt_null",
        (kxdrproc_t) xdr_error,    
        (kxdrproc_t) xdr_error,    0, 0 },
    { "mnt_mount",
        (kxdrproc_t) xdr_encode_dirpath,    
        (kxdrproc_t) xdr_decode_fhstatus,
        MNT_dirpath_sz << 2, 0 },
};

static struct rpc_procinfo mnt3_procedures[2] = {
    { "mnt3_null",
        (kxdrproc_t) xdr_error,
        (kxdrproc_t) xdr_error, 0, 0 },
    { "mnt3_mount",
        (kxdrproc_t) xdr_encode_dirpath,
        (kxdrproc_t) xdr_decode_fhstatus3,
        MNT_dirpath_sz << 2, 0 },
};


static struct rpc_version    mnt_version1 = {
    1, 2, mnt_procedures
};

static struct rpc_version       mnt_version3 = {
    3, 2, mnt3_procedures
};

static struct rpc_version *    mnt_version[] = {
    NULL,
    &mnt_version1,
    NULL,
    &mnt_version3,
};

static struct rpc_stat        mnt_stats;

struct rpc_program    mnt_program = {
    "mount",
    NFS_MNT_PROGRAM,
    sizeof(mnt_version)/sizeof(mnt_version[0]),
    mnt_version,
    &mnt_stats,
};

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