ShellBanner
System:Linux MiraNet 3.0.0-14-generic-pae #23-Ubuntu SMP Mon Nov 21 22:07:10 UTC 2011 i686
Software:Apache. PHP/5.3.6-13ubuntu3.10
ID:uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Safe Mode:OFF
Open_Basedir:OFF
Freespace:24.4 GB of 70.42 GB (34.65%)
MySQL: ON MSSQL: OFF Oracle: OFF PostgreSQL: OFF Curl: OFF Sockets: ON Fetch: OFF Wget: ON Perl: ON
Disabled Functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

/ usr/ src/ courier-0.66.1/ maildir/ - drwxrwxrwx

Directory:
Viewing file:     maildirkw.c (5.7 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
** Copyright 2003-2004 Double Precision, Inc.
** See COPYING for distribution information.
*/


#if    HAVE_CONFIG_H
#include    "config.h"
#endif
#include    <stdio.h>
#include    <string.h>
#include    <stdlib.h>
#include    <errno.h>

#if HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <sys/stat.h>
#include    "maildirkeywords.h"
#include    "maildirwatch.h"

static void usage()
{
    printf("Usage: maildirkw [ options ] maildir [+/-]flag [+/-]flag...\n");
    exit(1);
}

static int doit_locked(const char *maildir,
               const char *filename,
               int lockflag, int plusminus,
               char **argv,
               int optind, int argc)
{
    char *tmpname, *newname;

    if (!plusminus)
    {
        struct libmail_kwHashtable kwh;
        struct libmail_kwMessage *kwm;

        struct libmail_kwGeneric g;
        int rc;

        libmail_kwgInit(&g);

        /* Make sure courierimapkeywords directory exists */

        libmail_kwEnabled=0;
        rc=libmail_kwgReadMaildir(&g, maildir);
        libmail_kwEnabled=1;
        libmail_kwgDestroy(&g);

        if (rc)
            return -1;


        libmail_kwhInit(&kwh);

        if (!(kwm=libmail_kwmCreate()))
        {
            perror("libmail_kwmCreate");
            return -1;
        }

        while (optind < argc)
            if (libmail_kwmSetName(&kwh, kwm,
                           argv[optind++]) < 0)
            {
                libmail_kwmDestroy(kwm);
                perror("libmail_kwmSetName");
                return -1;
            }

        if (maildir_kwSave(maildir, filename, kwm,
                   &tmpname, &newname, 0) < 0)
        {
            perror(maildir);
            libmail_kwmDestroy(kwm);
            return -1;
        }
        libmail_kwmDestroy(kwm);

        if (rename(tmpname, newname) < 0)
        {
            perror(newname);
            free(tmpname);
            free(newname);
            return -1;
        }
        free(tmpname);
        free(newname);
        return 0;
    }
    else
    {
        struct libmail_kwGeneric g;
        int rc;
        struct libmail_kwGenericEntry *e;
        struct libmail_kwMessage *kwm, *kwm_alloced;

        libmail_kwgInit(&g);

        rc=libmail_kwgReadMaildir(&g, maildir);

        if (rc != 0)
            return rc;

        e=libmail_kwgFindByName(&g, filename);

        kwm_alloced=NULL;

        if (e && e->keywords)
            kwm=e->keywords;
        else
        {
            if ((kwm=kwm_alloced=libmail_kwmCreate()) == NULL)
            {
                perror("libmail_kwmCreate");
                libmail_kwgDestroy(&g);
                return -1;
            }
        }

        while (optind < argc)
        {
            const char *f=argv[optind++];

            if ( plusminus == '+')
            {
                if (libmail_kwmSetName(&g.kwHashTable,
                               kwm, f) < 0)
                {
                    perror("libmail_kwmSetName");
                    if (kwm_alloced)
                        libmail_kwmDestroy(kwm_alloced
                                   );
                    libmail_kwgDestroy(&g);
                    return -1;
                }
            } else
            {
                struct libmail_keywordEntry *kwe=
                    libmail_kweFind(&g.kwHashTable,
                            f, 0);

                if (kwe)
                    libmail_kwmClear(kwm, kwe);
            }
        }

        rc=maildir_kwSave(maildir, filename, kwm,
                  &tmpname, &newname, 1);

        if (rc == 0)
        {
            if (link(tmpname, newname) == 0)
            {
                struct stat stat_buf;

                if (stat(tmpname, &stat_buf) == 0 &&
                    stat_buf.st_nlink == 2)
                    unlink(tmpname);
                else
                    rc=1; /* What's up? */
            }
            else
            {
                if (errno == EEXIST)
                    rc=1;
                else
                    rc= -1;
                unlink(tmpname);
            }
        }

        if (kwm_alloced)
            libmail_kwmDestroy(kwm_alloced);
        libmail_kwgDestroy(&g);

        return rc;
    }
}

static int list_locked(const char *maildir)
{
    struct libmail_kwGeneric g;
    int rc;
    size_t n;

    libmail_kwgInit(&g);

    rc=libmail_kwgReadMaildir(&g, maildir);

    if (rc)
        return rc;

    for (n=0; n<g.nMessages; n++)
    {
        struct libmail_kwGenericEntry *e=
            libmail_kwgFindByIndex(&g, n);
        struct libmail_kwMessageEntry *k;

        if (!e)
            continue;

        printf("%s", e->filename);

        for (k=e->keywords ? e->keywords->firstEntry:NULL; k;
             k=k->next)
            printf(" %s", keywordName(k->libmail_keywordEntryPtr));
        printf("\n");
    }
    return 0;
}

static int doit(const char *maildir, const char *filename, int lockflag,
        int plusminus,
        char **argv, int optind, int argc)
{
    if (lockflag)
    {
        struct maildirwatch *w=maildirwatch_alloc(maildir);
        int tryAnyway;
        char *lockname;
        int rc;

        if (!w)
        {
            perror(maildir);
            return -1;
        }

        lockname=maildir_lock(maildir, w, &tryAnyway);

        if (!lockname)
        {
            perror(maildir);
            if (!tryAnyway)
            {
                maildirwatch_free(w);
                maildirwatch_cleanup();
                return -1;
            }
        }

        rc=doit_locked(maildir, filename, 1, plusminus,
                   argv, optind, argc);
        if (lockname)
        {
            unlink(lockname);
            free(lockname);
        }
        maildirwatch_free(w);
        maildirwatch_cleanup();
        return rc;
    }

    return doit_locked(maildir, filename, 0, plusminus,
               argv, optind, argc);
}

static int dolist(const char *maildir, int lockflag)
{
    if (lockflag)
    {
        struct maildirwatch *w=maildirwatch_alloc(maildir);
        int tryAnyway;
        char *lockname;
        int rc;

        if (!w)
        {
            perror(maildir);
            return -1;
        }

        lockname=maildir_lock(maildir, w, &tryAnyway);

        if (!lockname)
        {
            perror(maildir);
            if (!tryAnyway)
            {
                maildirwatch_free(w);
                maildirwatch_cleanup();
                return -1;
            }
        }

        rc=list_locked(maildir);
        if (lockname)
        {
            unlink(lockname);
            free(lockname);
        }
        maildirwatch_free(w);
        maildirwatch_cleanup();
        return rc;
    }

    return list_locked(maildir);
}

int main(int argc, char *argv[])
{
    int lockflag=0;
    int optc;
    const char *maildir;
    const char *filename;
    int list=0;
    int plusminus=0;
    int n;

    libmail_kwCaseSensitive=0;

    while ((optc=getopt(argc, argv, "arLlhc")) != -1)
        switch (optc) {
        case 'c':
            libmail_kwCaseSensitive=1;
            break;
        case 'l':
            lockflag=1;
            break;
        case 'L':
            list=1;
            break;
        case 'a':
            plusminus='+';
            break;
        case 'r':
            plusminus='-';
            break;
        default:
            usage();
        }

    if (optind >= argc)
        usage();

    maildir=argv[optind++];

    if (list)
    {
        exit (dolist(maildir, lockflag));
    }

    if (optind >= argc)
        usage();

    filename=argv[optind++];

    while ((n=doit(maildir, filename, lockflag, plusminus,
               argv, optind, argc)) > 0)
        ;

    exit(-n);
    return (0);
}
Command:
Quick Commands:
Upload:
[OK] Max size: 100MB
PHP Filesystem: <@ Ú
Search File:
regexp
Create File:
Overwrite [OK]
View File:
Mass Defacement:
[+] Main Directory: [+] Defacement Url:
LmfaoX Shell - Private Build [BETA] - v0.1 -; Generated: 0.1678 seconds