亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? vldap.c

?? 相當(dāng)優(yōu)秀的 UNIX 進(jìn)程管理工具
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/* * $Id: vldap.c,v 1.15 2004/01/07 16:06:16 tomcollins Exp $ * Copyright (C) 1999-2003 Inter7 Internet Technologies, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <unistd.h>#include <string.h>#include <pwd.h>#include <sys/types.h>#include <sys/time.h>#include <time.h>#include <utime.h>#include <lber.h>#include <ldap.h>#include "config.h"#include "vpopmail.h"#include "vauth.h"#include "vlimits.h"#include "vldap.h"LDAP *ld = NULL;LDAPMessage *glm = NULL;#ifdef CLEAR_PASS#  define NUM_LDAP_FIELDS  9#else#  define NUM_LDAP_FIELDS  8#endifchar *ldap_fields[NUM_LDAP_FIELDS] = {                                         "uid",   /* 0 pw_name   */                                         "userPassword",  /* 1 pw_passwd */                                         "qmailUID",   /* 2 pw_uid    */                                         "qmailGID",   /* 3 pw_gid    */                                         "qmaildomain",  /* 4 pw_gecos  */                                         "mailMessageStore",  /* 5 pw_dir    */                                         "mailQuota",   /* 6 pw_shell  */#ifndef CLEAR_PASS                                         "objectclass"   /* 7 ldap      */#else                                         "clearPassword",  /* 7 pw_clear_passwd */                                         "objectclass"   /* 8 ldap      */#endif                                     };/***************************************************************************/struct vqpasswd *vauth_getpw(char *user, char *domain) {    int ret = 0;    size_t len = 0;    struct vqpasswd *vpw = NULL;    LDAPMessage *res = NULL, *msg = NULL;    char *filter = NULL, **vals = NULL, *h = NULL, *t = NULL, *passwd = NULL;    char *dn = NULL;    uid_t myuid;    uid_t uid;    gid_t gid;    verrori = 0;    lowerit(user);    lowerit(domain);    vget_assign(domain,NULL,0,&uid,&gid);    myuid = geteuid();    if ( myuid != 0 && myuid != uid ) {        return(NULL);    }    /* take a given domain, and set dn to be this format :     * ou=somedomain.com,o=vpopmail     */    if (compose_dn(&dn,domain) != 0)        return NULL;    /* take the username and create set filter ot be in this format :     * (&(objectclass=qmailUser)(uid=someusername))     */    len = (strlen(user) + 32 + 1);    filter = (char *)safe_malloc(len);    memset((char *)filter, 0, len);    snprintf(filter, len, "(&(objectclass=qmailUser)(uid=%s))", user);    /* connect to the ldap server (if we havent already got a connection open) */    if (ld == NULL ) {        if (ldap_connect() != 0) {            safe_free((void **) &filter);            return NULL;        }    }    /* perform an ldap search     * int ldap_search_s(ld, base, scope, filter, attrs, attrsonly, res)     *      * Will search synchronously, and not return until the operation completes.     * base : DN of the entry at which to start the search     * scope : scope of the search     *   LDAP_SCOPE_SUBTREE means to search the object and all of its descendents.     * filter : filter to apply to the search     * attrs : attribute types to return from entries that match filter     * attrsonly : set to 0 for attributes and attributetypes are wanted. 1 if only attributes are wanted.     */    ret = ldap_search_s(ld, dn, LDAP_SCOPE_SUBTREE,                        filter, vldap_attrs, 0, &res);    safe_free((void **) &filter);    /* see if the search ran without generating an error */    if (ret != LDAP_SUCCESS ) {        ldap_perror(ld,"Error");        return NULL;    }    /* grab a pointer to the 1st entry in the chain of search results */    msg = ldap_first_entry(ld, res);    if (msg == NULL) {        /* We had an error grabbing the pointer */        return NULL;    }    /* find out how many matches we found */    ret = ldap_count_entries(ld, msg);    if (ret == -1 ) {        /* an error occurred when counting the entries */        ldap_perror(ld,"Error");        return NULL;    }    /*       Fetch userPassword first so we can make sure       we're able to handle it's password encryption (if any)    */    /* userPasswd / pw_password */    vals = ldap_get_values(ld, msg, "userPassword");    if (vals == NULL) {        ldap_perror(ld,"Error");        return NULL;    }    t = h = NULL;    passwd = (char *)safe_malloc((strlen(*vals) + 1));    memset((char *)passwd, 0, (strlen(*vals) + 1));    memcpy((char *)passwd, (char *)(*vals), strlen(*vals));    if (*passwd == '{') {        for (t = h = (passwd + 1); *t; t++) {            if (*t == '}') {                *t++ = '\0';                /* This is not the best, but we keep the pointer as (h - 1) */                passwd = t;                /*                   Check against the encryption method, and if we see something                   we dont recognize or support, invalidate user login.                   vol@inter7.com                */                /* Steki <steki@verat.net> Thu Jan 24 17:27:18 CET 2002                 *  Added check for MD5 crypted passwords                 */                if (strcmp(h, "crypt")&& strcmp(h, "MD5")) {                    free(h - 1);                    ldap_value_free(vals);                    return NULL;                }                break;            }        }        /*           No terminating brace found, or empty password.           vol@inter7.com        */        if (!(*t)) {            ldap_value_free(vals);            return NULL;        }    }    /* create a vpw struct, which we will populate with the data we suck in from ldap */    vpw = (struct vqpasswd *) safe_malloc(sizeof(struct vqpasswd));    memset((struct vqpasswd *)vpw, 0, sizeof(struct vqpasswd));    vpw->pw_passwd = (char *)safe_malloc((strlen(passwd) + 1));    memset((char *)vpw->pw_passwd, 0, (strlen(passwd) + 1));    memcpy((char *)vpw->pw_passwd, (char *)(passwd), strlen(passwd));    if (vpw->pw_passwd == NULL) {        free(h - 1);        ldap_value_free(vals);        return NULL;    }    /*       Old passwd pointer.       ..and don't forget to check if you even set the pointer *smack*       vol@inter7.com    */    if (h)        free(h - 1);    ldap_value_free(vals);    /* uid / pw_name */    vals = ldap_get_values(ld, msg, "uid");    if (vals == NULL) {        safe_free((void **) &vpw->pw_passwd);        ldap_perror(ld,"Error");        return NULL;    }    vpw->pw_name = (char *)safe_malloc((strlen(*vals) + 1));    memset((char *)vpw->pw_name, 0, (strlen(*vals) + 1));    memcpy((char *)vpw->pw_name, (char *)(*vals), strlen(*vals));    ldap_value_free(vals);    /* mailQuota / pw_shell */    vals = ldap_get_values(ld, msg, "mailQuota");    if (vals)        vpw->pw_shell = (char *)safe_malloc((strlen(*vals) + 1));    else        vpw->pw_shell = (char *)safe_malloc(1);    if (vals) {        memset((char *)vpw->pw_shell, 0, (strlen(*vals) + 1));        memcpy((char *)vpw->pw_shell, (char *)(*vals), strlen(*vals));        ldap_value_free(vals);    } else {        *vpw->pw_shell = '\0';        ldap_perror(ld,"Error");    }    /* qmaildomain / pw_gecos */    vals = ldap_get_values(ld, msg, "qmaildomain");    if ( vals ) {        vpw->pw_gecos = (char *)safe_malloc((strlen(*vals) + 1));        memset((char *)vpw->pw_gecos, 0, (strlen(*vals) + 1));        memcpy((char *)vpw->pw_gecos, (char *)(*vals), strlen(*vals));        ldap_value_free(vals);    } else        ldap_perror(ld,"Error");    /* mailMessageStore / pw_dir */    vals = ldap_get_values(ld, msg, "mailMessageStore");    if ( vals ) {        vpw->pw_dir = (char *)safe_malloc((strlen(*vals) + 1));        memset((char *)vpw->pw_dir, 0, (strlen(*vals) + 1));        memcpy((char *)vpw->pw_dir, (char *)(*vals), strlen(*vals));        ldap_value_free(vals);    } else        ldap_perror(ld,"Error");    /* qmailUID / pw_uid */    vals = ldap_get_values(ld, msg, "qmailUID");    if ( vals ) {        vpw->pw_uid = atoi(*vals);        ldap_value_free(vals);    } else        ldap_perror(ld,"Error");    /* qmailGID / pw_gid */    vals = ldap_get_values(ld, msg, "qmailGID");    if ( vals ) {        vpw->pw_gid = atoi(*vals);        ldap_value_free(vals);    } else        ldap_perror(ld,"Error");#ifdef CLEAR_PASS    /* clearPasswd /  pw_clear_passwd */    vals = ldap_get_values(ld, msg, "clearPassword");    if ( vals ) {        vpw->pw_clear_passwd = (char *)safe_malloc((strlen(*vals) + 1));        memset((char *)vpw->pw_clear_passwd, 0, (strlen(*vals) + 1));        memcpy((char *)vpw->pw_clear_passwd, (char *)(*vals), strlen(*vals));        ldap_value_free(vals);    }#endif    vlimits_setflags (vpw, domain);    return vpw;}/***************************************************************************/void vauth_end_getall() {}/***************************************************************************/struct vqpasswd *vauth_getall(char *domain, int first, int sortit) {    int ret = 0;    size_t len = 0;    struct vqpasswd *pw = NULL;    LDAPMessage *res = NULL;    char *filter = NULL, **vals = NULL;    char *basedn = NULL;    /* if 1st time through, extract all users from this chosen domain */    if (first) {        lowerit(domain);        len = (32 + 1);        filter = (char *)safe_malloc(len);        memset((char *)filter, 0, len);        /* set basedn to be of the format :         *   ou=somedomain,o=vpopmail         */        if (compose_dn(&basedn,domain) != 0)  {            safe_free((void **) &filter);            return NULL;        }        snprintf(filter, len, "(objectclass=qmailUser)");        /* connect to the ldap server if we havent already done so */        if (ld == NULL ) {            if (ldap_connect() != 0) {                safe_free((void **) &filter);                return NULL;            }        }        /* perform the lookup for all users in a given domain */        ret = ldap_search_s(ld, basedn, LDAP_SCOPE_SUBTREE,                            filter, vldap_attrs, 0, &res);        safe_free((void **) &basedn);        safe_free((void **) &filter);        if (ret != LDAP_SUCCESS) {            ldap_perror(ld,"Error");            return NULL;        }        /* sort the entries alphabetically by username if required */        if ( sortit ) {            if ( ldap_sort_entries( ld, &res, "uid", &strcasecmp ) != 0)  {                ldap_perror(ld,"Error");                return NULL;            }            if (ret != LDAP_SUCCESS)                return NULL;        }        /* get a pointer to the first user in the list */        glm = ldap_first_entry(ld, res);        if (glm == NULL)            return NULL;        /* grab the ldap properties of this user */        vals = ldap_get_values(ld, glm, "uid");        if (vals == NULL) {            ldap_perror(ld,"Error");            return NULL;        }        /* grab the vpopmail properties of this user */        pw = vauth_getpw(*vals, domain);        return pw;    }    else {        /* not 1st time through, so get next entry from the chain */        if (glm == NULL)  /* Just to be safe. (vol@inter7.com) */            return NULL;        res = glm;        glm = ldap_next_entry(ld, res);        if (glm == NULL)            return NULL;        vals = ldap_get_values(ld, glm, "uid");        if (vals == NULL) {            ldap_perror(ld,"Error");            return NULL;        }        pw = vauth_getpw(*vals, domain);        ldap_value_free(vals);        return pw;    }}/***************************************************************************//*   Higher-level functions no longer crypt.   Lame.    vol@inter7.com*/int vauth_adduser(char *user, char *domain, char *password, char *gecos, char *dir, int apop ) {    char *dn = NULL;    char *dn_tmp = NULL;    LDAPMod **lm = NULL;    char dom_dir[156];    uid_t uid;    gid_t gid;    int ret = 0, vd = 0;    int i,len;    char *b = NULL;    char crypted[100] = { 0 };    if ((dir) && (*dir))        vd = 1;    if ( gecos==0 || gecos[0]==0)        gecos=user;    /* take a given domain, and lookup the dom_dir, uid, gid */    if ( vget_assign(domain, dom_dir, 156, &uid, &gid ) == NULL ) {        fprintf(stderr, "failed to vget_assign the domain : %s", domain);        return (-1);    }    if (vd) {        ret = strlen(dom_dir) + 5 + strlen(dir) + strlen(user);    } else {        ret = strlen(dom_dir) + 5 + strlen(user);    }    b = (char *)safe_malloc(ret);    memset((char *)b, 0, ret);    if (vd) {        snprintf(b, ret, "%s/%s/%s", dom_dir, dir, user);    } else {

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩99亚洲| 中文字幕一区二区三区四区不卡| 欧美一区二区三区免费在线看| 日韩欧美国产综合一区| 久久亚洲综合色一区二区三区| 欧美国产日本韩| 一区二区三区不卡视频| 亚洲v日本v欧美v久久精品| 久久精品国产精品亚洲红杏| 韩国一区二区在线观看| 99视频一区二区| 欧美老年两性高潮| 久久久久免费观看| 欧美蜜桃一区二区三区| 国产亚洲精品资源在线26u| 亚洲美女屁股眼交3| 男女男精品视频| 成人免费高清视频在线观看| 欧美丝袜第三区| 久久久久久久久97黄色工厂| 樱花影视一区二区| 激情综合网av| 91福利社在线观看| 久久伊人蜜桃av一区二区| 亚洲欧美aⅴ...| 国内久久婷婷综合| 久久精品人人爽人人爽| 欧美激情一区在线| 天天综合色天天综合色h| 成人免费毛片嘿嘿连载视频| 欧美精品v国产精品v日韩精品| 天天色综合成人网| 亚洲激情五月婷婷| 国产主播一区二区三区| 欧美写真视频网站| 国产精品免费免费| 久久精品国产精品青草| 欧美性一区二区| 中文一区在线播放| 日韩精品一二三区| 91尤物视频在线观看| 欧美精品一区男女天堂| 午夜国产精品一区| 色综合久久久久网| 91麻豆精东视频| 欧美激情一区二区三区蜜桃视频 | 国产一区二区网址| 欧美三级一区二区| 综合激情网...| 国产黄色成人av| 欧美精品一区在线观看| 日本va欧美va瓶| 欧美日韩在线精品一区二区三区激情| 欧美国产一区二区在线观看| 日日摸夜夜添夜夜添精品视频| 日本韩国精品一区二区在线观看| 日本一区二区三区免费乱视频| 91视频国产观看| 精品国产第一区二区三区观看体验| 亚洲午夜久久久久久久久电影网 | 国产精品福利影院| 国产在线看一区| 日韩欧美一区在线| 天天色天天操综合| 欧美久久久久久久久| 亚洲在线免费播放| 色94色欧美sute亚洲线路一ni| 成人免费在线视频| 欧美日韩高清一区二区三区| 91麻豆精品91久久久久同性| 亚洲成av人在线观看| 欧美性生活大片视频| 亚洲资源在线观看| 日韩国产精品大片| 91精品国产高清一区二区三区 | 91丝袜美女网| 亚洲欧美偷拍三级| 一本色道久久综合亚洲aⅴ蜜桃 | 欧美性猛交一区二区三区精品| 中文字幕佐山爱一区二区免费| 久久久久免费观看| 中文字幕在线不卡一区| 国产精品一二一区| 中文字幕av资源一区| 国产激情视频一区二区在线观看| 欧美变态tickle挠乳网站| 日本中文字幕不卡| 欧美丰满少妇xxxxx高潮对白| 夜色激情一区二区| 精品中文av资源站在线观看| 久久众筹精品私拍模特| 九九国产精品视频| 精品少妇一区二区三区在线视频| 麻豆成人av在线| 日韩色在线观看| 久久超碰97中文字幕| 91精品国产麻豆| 日韩av一二三| 久久欧美一区二区| 中文字幕综合网| 91亚洲精品久久久蜜桃| 亚洲视频狠狠干| 久久这里只有精品6| 亚洲欧洲日本在线| 欧美午夜理伦三级在线观看| 亚洲国产精品久久一线不卡| 欧美日韩小视频| 日韩国产在线一| 欧美大黄免费观看| 国产自产视频一区二区三区| 精品国产sm最大网站| av中文字幕一区| 一区二区三区在线播放| 欧美精品日韩精品| 欧美一级片在线观看| 亚洲成av人片一区二区梦乃| 91精品国产综合久久久久久久久久| 韩国av一区二区三区在线观看| 欧美韩国日本一区| av色综合久久天堂av综合| 一区二区三区四区在线| 欧美成人精品高清在线播放 | 色偷偷成人一区二区三区91| 亚洲国产成人精品视频| 日韩午夜激情视频| 国产99精品国产| 一区二区三区在线不卡| 日韩午夜在线观看| 国产中文一区二区三区| 成人免费一区二区三区视频 | 在线成人免费观看| 看片的网站亚洲| 国产精品久久三区| 欧美人xxxx| 国产成人在线视频网站| 亚洲欧美色图小说| 精品国产青草久久久久福利| 成人av动漫网站| 日韩一区精品视频| 中文字幕精品综合| 欧美群妇大交群中文字幕| 国产一区二区三区精品欧美日韩一区二区三区| 日本一区二区高清| 欧美另类z0zxhd电影| 豆国产96在线|亚洲| 蜜臀av一区二区| 国产精品久久久久久久久图文区 | 欧美一级黄色大片| 色综合久久88色综合天天6| 男人的j进女人的j一区| 欧美激情一区二区三区| 欧美高清视频在线高清观看mv色露露十八| 狂野欧美性猛交blacked| 亚洲精品中文字幕乱码三区| 精品国产一区二区三区久久久蜜月| 91论坛在线播放| 奇米精品一区二区三区四区 | 在线欧美一区二区| 国产老女人精品毛片久久| 另类调教123区| 精品国精品自拍自在线| 亚洲免费av网站| 91福利区一区二区三区| 亚洲精品欧美二区三区中文字幕| 色猫猫国产区一区二在线视频| 美女视频黄a大片欧美| 99久久精品费精品国产一区二区| 奇米影视在线99精品| 亚洲gay无套男同| 国产精品成人一区二区三区夜夜夜 | 91亚洲永久精品| 国产精品亚洲人在线观看| 国产精品996| 一区二区三区产品免费精品久久75| 中国av一区二区三区| 国产日韩av一区二区| 亚洲伦理在线免费看| 欧美自拍偷拍一区| 99视频一区二区| 91视频com| 99re热这里只有精品视频| av一区二区三区在线| 国产一本一道久久香蕉| 国产精品一区二区在线播放| 五月综合激情网| 爽好多水快深点欧美视频| 久久精品人人做| 国产精品拍天天在线| 精品国产免费人成在线观看| 欧美不卡在线视频| 精品污污网站免费看| 欧美日韩一区二区在线观看 | 欧美日韩在线综合| 色中色一区二区| 91欧美激情一区二区三区成人| 国产伦精品一区二区三区免费| 国产精品综合二区| 亚洲黄色小视频| 亚洲bdsm女犯bdsm网站| 午夜电影久久久|