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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vldap.c

?? 相當優秀的 UNIX 進程管理工具
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * $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 {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人在线网站| 国产视频一区二区三区在线观看| 欧美日韩国产免费| 久久精品欧美日韩| 亚洲va国产va欧美va观看| 成人综合激情网| 日韩亚洲欧美在线| 一区二区在线免费观看| 国产福利一区二区三区在线视频| 欧美日韩在线三级| 亚洲欧洲99久久| 国产精品911| 精品国产91久久久久久久妲己| 一区二区三区四区激情| 波多野结衣中文字幕一区二区三区| 欧美一级日韩不卡播放免费| 亚洲国产wwwccc36天堂| 色综合一个色综合亚洲| 亚洲欧洲精品成人久久奇米网| 精品一区二区三区不卡| 欧美一级在线免费| 青娱乐精品在线视频| 日韩三级中文字幕| 天堂影院一区二区| 欧美精品乱码久久久久久 | 91玉足脚交白嫩脚丫在线播放| 日韩欧美国产午夜精品| 日韩av网站免费在线| 欧美日韩国产123区| 亚洲午夜视频在线| 7777精品伊人久久久大香线蕉 | 成人h版在线观看| 亚洲国产成人一区二区三区| 国产精品12区| 国产日韩欧美高清| 国产成人精品免费在线| 久久久不卡网国产精品二区| 蜜臀av一区二区三区| 欧美电视剧免费观看| 中文字幕一区二区在线播放| 成人精品高清在线| 久久久久久一级片| 国产美女在线精品| 日韩欧美精品在线| 国产成人在线视频网站| 正在播放亚洲一区| 精品亚洲国内自在自线福利| 欧美一区二区日韩| 成人污污视频在线观看| 久久精品免视看| 色综合天天综合给合国产| 综合久久一区二区三区| 欧美无砖专区一中文字| 午夜影院久久久| 精品成人免费观看| 国产伦精品一区二区三区在线观看| 亚洲国产成人私人影院tom| 成人久久视频在线观看| 亚洲二区在线观看| 日韩一区二区在线播放| 国产成人av网站| 亚洲乱码中文字幕综合| 日韩精品一区二区三区在线播放 | 亚洲精品综合在线| 欧美老肥妇做.爰bbww| 国产一区二区视频在线| 中文字幕亚洲欧美在线不卡| 欧美日韩精品综合在线| 久草在线在线精品观看| 亚洲精品综合在线| 日韩一本二本av| 91丨porny丨户外露出| 亚洲视频网在线直播| 欧美mv日韩mv国产网站app| 韩国理伦片一区二区三区在线播放| 自拍偷拍亚洲激情| 制服丝袜日韩国产| 色呦呦一区二区三区| 日韩高清一区二区| 亚洲日本va午夜在线影院| 久久综合999| 色综合久久88色综合天天6| 天天亚洲美女在线视频| 国产欧美日韩不卡免费| 欧美日韩夫妻久久| 国产v综合v亚洲欧| 天天影视涩香欲综合网| 国产精品久久久久精k8| 久久综合久久综合久久综合| 色偷偷久久人人79超碰人人澡| 国内精品免费**视频| 亚洲综合偷拍欧美一区色| 国产精品入口麻豆九色| 欧美videos中文字幕| 欧美精品丝袜中出| jlzzjlzz欧美大全| 成人一级片网址| 麻豆极品一区二区三区| 国产精品久久久久久久久免费相片 | 色av一区二区| 国产福利一区在线| 天天影视涩香欲综合网| 亚洲成人久久影院| 一区二区三区波多野结衣在线观看| 久久蜜桃一区二区| 欧美一区二区啪啪| 欧美最新大片在线看 | 国产乱码一区二区三区| 午夜精品福利在线| 亚洲男人的天堂网| 国产色一区二区| 亚洲国产精品成人久久综合一区| 1024国产精品| 精品久久久久久久久久久久久久久久久| 成人av影院在线| 午夜精品久久久久久不卡8050| 中文字幕日韩精品一区| 国产日产亚洲精品系列| 日韩欧美一二区| 91精品蜜臀在线一区尤物| 欧美在线|欧美| 欧美在线不卡视频| 91黄色在线观看| 色久优优欧美色久优优| 99re这里只有精品首页| 成人免费av在线| 风间由美一区二区三区在线观看 | 久久人人超碰精品| 日韩午夜激情av| 日韩区在线观看| 欧美挠脚心视频网站| 日韩一区二区免费电影| 日韩一区二区中文字幕| 欧美一区二区三区影视| 欧美tk丨vk视频| 久久亚区不卡日本| 国产亚洲女人久久久久毛片| 亚洲天堂精品在线观看| 亚洲欧美电影一区二区| 一区二区三区欧美在线观看| 亚洲精品少妇30p| 亚洲午夜成aⅴ人片| 日精品一区二区三区| 男男成人高潮片免费网站| 美女看a上一区| 国产精品99久久久| 99re亚洲国产精品| 欧美性感一类影片在线播放| 欧美日韩国产综合草草| 精品国产亚洲在线| 中文字幕乱码亚洲精品一区| 亚洲久草在线视频| 美女脱光内衣内裤视频久久影院| 精品在线你懂的| 99久久综合狠狠综合久久| 欧美中文字幕不卡| 日韩精品一区二区三区在线观看 | 日韩久久久精品| 亚洲色图制服丝袜| 天天操天天干天天综合网| 粉嫩一区二区三区在线看| 91在线观看视频| 久久久影院官网| 亚洲精选视频免费看| 国内外精品视频| 欧美性生活影院| 国产精品久久久久精k8| 婷婷六月综合网| 在线视频综合导航| 91精品国产综合久久久久久久久久| 中文在线资源观看网站视频免费不卡 | 国产精品麻豆网站| 一卡二卡欧美日韩| 不卡一区二区中文字幕| 欧美亚洲日本国产| 国产精品伦一区二区三级视频| 蜜桃av一区二区| 色婷婷精品久久二区二区蜜臀av| 精品久久免费看| 亚洲福利视频导航| 在线观看区一区二| 亚洲国产成人一区二区三区| 精品一区二区三区香蕉蜜桃| 欧美性猛交xxxx黑人交| 一区二区视频在线| 国产精品一卡二| 国产亚洲一区二区三区在线观看| 视频一区欧美日韩| 4438成人网| 亚洲人成精品久久久久| 风间由美一区二区三区在线观看 | 国产成人亚洲综合a∨婷婷图片| 欧美v日韩v国产v| 亚洲国产wwwccc36天堂| 欧美午夜免费电影| 亚洲欧美综合色| 91香蕉视频污| 国产精品久久久久久久浪潮网站| 成人在线视频一区二区| 精品播放一区二区|