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

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

?? vpgsql.c

?? 相當優秀的 UNIX 進程管理工具
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * $Id: vpgsql.c,v 1.20.2.3 2004/06/26 02:20:56 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 <pwd.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <string.h>#include <time.h>#include <errno.h>#include <libpq-fe.h> /* required pgsql front-end headers */#include "config.h"#include "vpopmail.h"#include "vauth.h"#include "vlimits.h"#include "vpgsql.h"/* pgsql has no built-in replication, yet.   #ifdef PGSQL_REPLICATION   static PGconn *pgc_read;   #else   #define pgc_read pgc_update   #endif   #ifdef PGSQL_REPLICATION   static int read_open = 0;   #else   #define read_open update_open   #endif   #ifdef PGSQL_REPLICATION	   static PGresult *res_read = NULL;   #else   #define res_read res_update   #endif*//*    read-only and read-write connections    to be implemented later...static PGconn *pgc_update;static PGconn *pgc_read;static PGconn *pgc_read_getall;*/static PGconn *pgc; /* pointer to pgsql connection */static int is_open = 0;#define SQL_BUF_SIZE 2048static char SqlBufRead[SQL_BUF_SIZE];static char SqlBufUpdate[SQL_BUF_SIZE];#define SMALL_BUFF 200char IUser[SMALL_BUFF];char IPass[SMALL_BUFF];char IGecos[SMALL_BUFF];char IDir[SMALL_BUFF];char IShell[SMALL_BUFF];char IClearPass[SMALL_BUFF];void vcreate_dir_control(char *domain);void vcreate_vlog_table();#ifdef POP_AUTH_OPEN_RELAYvoid vcreate_relay_table();#endif#ifdef VALIASPGresult *pgvalias = NULL;void vcreate_valias_table();#endif#ifdef ENABLE_AUTH_LOGGINGvoid vcreate_lastauth_table();#endif/* pgsql BEGIN TRANSACTION ********/int pg_begin(void){  PGresult *pgres;  pgres=PQexec(pgc, "BEGIN");  if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) {    fprintf(stderr, "pg_begin: %s\n", PQerrorMessage(pgc));    if (pgres) PQclear (pgres);    return -1;  }  PQclear(pgres);  return 0;}                                       /* pgsql END TRANSACTION ********/int pg_end(void){  PGresult *pgres;  pgres=PQexec(pgc, "END");  if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) {    fprintf(stderr, "pg_end: %s\n", PQerrorMessage(pgc));    if (pgres) PQclear (pgres);    return -1;  }  PQclear(pgres);  return 0;}                                                   /*** Open a connection to pgsql ***/int vauth_open(){  if ( is_open != 0 ) return(0);  is_open = 1;  verrori = 0;  /* Try to connect to the pgserver with the specified database. */  pgc = PQconnectdb(PG_CONNECT);  if( PQstatus(pgc) == CONNECTION_BAD) {    fprintf(stderr, "vauth_open: can't connect: %s\n", PQerrorMessage(pgc));    return VA_NO_AUTH_CONNECTION;  }	  return(0);}int vauth_create_table (char *table, char *layout, int showerror){  int err;  PGresult *pgres;  char SqlBufCreate[SQL_BUF_SIZE];    if ( err = vauth_open()) return (err);  snprintf(SqlBufCreate, SQL_BUF_SIZE,    "CREATE TABLE %s ( %s )", table, layout);  pgres=PQexec(pgc, SqlBufCreate);  if (!pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK) {    err = -1;    if (showerror)      fprintf (stderr, "vpgsql: error creating table '%s': %s\n", table,         PQerrorMessage(pgc));  } else err = 0;    if (pgres) PQclear (pgres);  return err;}int vauth_adddomain( char *domain ){#ifndef MANY_DOMAINS  vset_default_domain( domain );  return (vauth_create_table (vauth_munch_domain( domain ), TABLE_LAYOUT, 1));#else  /* if creation fails, don't show an error */  vauth_create_table (PGSQL_DEFAULT_TABLE, TABLE_LAYOUT, 0);  return (0);#endif}int vauth_adduser(char *user, char *domain, char *pass, char *gecos, 		  char *dir, int apop ){  char *domstr;  char dom_dir[156];  uid_t uid;   gid_t gid;  char dirbuf[200];  char quota[30];  char Crypted[100];  int err;  PGresult *pgres;      if ( (err=vauth_open()) != 0 ) return(err);  vset_default_domain( domain );  strncpy( quota, "NOQUOTA", 30 );#ifndef MANY_DOMAINS  domstr = vauth_munch_domain( domain );#else  domstr = PGSQL_DEFAULT_TABLE;#endif  if ( domain == NULL || domain[0] == 0 ) {    domstr = PGSQL_LARGE_USERS_TABLE;  }  if ( strlen(domain) <= 0 ) {    if ( strlen(dir) > 0 ) {      snprintf(dirbuf, SQL_BUF_SIZE, 	       "%s/users/%s/%s", VPOPMAILDIR, dir, user);    } else {      snprintf(dirbuf, SQL_BUF_SIZE, "%s/users/%s", VPOPMAILDIR, user);    }  } else {    vget_assign(domain, dom_dir, 156, &uid, &gid );    if ( strlen(dir) > 0 ) {      snprintf(dirbuf,SQL_BUF_SIZE, "%s/%s/%s", dom_dir, dir, user);    } else {      snprintf(dirbuf,SQL_BUF_SIZE, "%s/%s", dom_dir, user);    }  }  if ( pass[0] != 0 ) {    mkpasswd3(pass,Crypted, 100);  } else {    Crypted[0] = 0;  }  qnprintf( SqlBufUpdate, SQL_BUF_SIZE, INSERT, 	    domstr, user, #ifdef MANY_DOMAINS	    domain,#endif	    Crypted, apop, gecos, dirbuf, quota#ifdef CLEAR_PASS	    ,pass#endif	    );  if(! ( pgres=PQexec(pgc,SqlBufUpdate) )||     PQresultStatus(pgres)!=PGRES_COMMAND_OK )  {    fprintf(stderr, "vauth_adduser: %s\npgsql: %s\n", 	    SqlBufUpdate, PQerrorMessage(pgc));  }  if( pgres )  PQclear(pgres);  return(0);}struct vqpasswd *vauth_getpw(char *user, char *domain){  char in_domain[156];  char *domstr;  static struct vqpasswd vpw;  int err;  PGresult *pgres;  verrori = 0;  if ( (err=vauth_open()) != 0 ) {    verrori = err;    return(NULL);  }  lowerit(user);  lowerit(domain);  snprintf (in_domain, sizeof(in_domain), "%s", domain);  vset_default_domain( in_domain );#ifndef MANY_DOMAINS  domstr = vauth_munch_domain( in_domain );#else  domstr = PGSQL_DEFAULT_TABLE; #endif  if ( domstr == NULL || domstr[0] == 0 ) {    domstr = PGSQL_LARGE_USERS_TABLE;  }  qnprintf(SqlBufRead, SQL_BUF_SIZE, USER_SELECT, domstr, user#ifdef MANY_DOMAINS	   ,in_domain#endif		   );  pgres=PQexec(pgc, SqlBufRead);  if ( ! pgres || PQresultStatus(pgres)!=PGRES_TUPLES_OK) {#ifdef DEBUG    fprintf(stderr, 	    "vauth_getpw: failed select: %s : %s\n", 	    SqlBufRead, PQerrorMessage(pgc));#endif    if( pgres ) PQclear(pgres);	    return NULL;  }  if ( PQntuples(pgres) <= 0 ) { /* rows count */    PQclear(pgres);    return NULL;  }  memset(IUser, 0, sizeof(IUser));  memset(IPass, 0, sizeof(IPass));  memset(IGecos, 0, sizeof(IGecos));  memset(IDir, 0, sizeof(IDir));  memset(IShell, 0, sizeof(IShell));  memset(IClearPass, 0, sizeof(IClearPass));  vpw.pw_name   = IUser;  vpw.pw_passwd = IPass;  vpw.pw_gecos  = IGecos;  vpw.pw_dir    = IDir;  vpw.pw_shell  = IShell;  vpw.pw_clear_passwd  = IClearPass;  strncpy(vpw.pw_name,PQgetvalue( pgres, 0, 0 ),SMALL_BUFF);  strncpy(vpw.pw_passwd,PQgetvalue( pgres, 0, 1 ),SMALL_BUFF);  vpw.pw_uid    = atoi(PQgetvalue( pgres, 0, 2 ));  vpw.pw_gid    = atoi(PQgetvalue( pgres, 0, 3 ));  strncpy(vpw.pw_gecos,PQgetvalue( pgres, 0, 4 ),SMALL_BUFF);  strncpy(vpw.pw_dir,PQgetvalue( pgres, 0, 5 ),SMALL_BUFF);  strncpy(vpw.pw_shell, PQgetvalue( pgres, 0, 6 ),SMALL_BUFF);#ifdef CLEAR_PASS  if ( PQgetvalue( pgres, 0, 7 ) != 0 )    strncpy(vpw.pw_clear_passwd, PQgetvalue( pgres, 0, 7 ),SMALL_BUFF);#endif  vlimits_setflags (&vpw, in_domain);  return(&vpw);}int vauth_deldomain( char *domain ){  PGresult *pgres;  char *tmpstr;  int err;      if ( (err=vauth_open()) != 0 ) return(err);  vset_default_domain( domain );#ifndef MANY_DOMAINS  tmpstr = vauth_munch_domain( domain );  snprintf( SqlBufUpdate, SQL_BUF_SIZE, "drop table %s", tmpstr);#else  tmpstr = PGSQL_DEFAULT_TABLE;  qnprintf(SqlBufUpdate,SQL_BUF_SIZE,	   "delete from %s where pw_domain = '%s'",	   tmpstr, domain );#endif   pgres=PQexec(pgc, SqlBufUpdate);  if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK){    fprintf(stderr,"vauth_deldomain: pgsql query: %s",	    PQerrorMessage(pgc));    if(pgres) PQclear(pgres);    return(-1);  }   if(pgres) PQclear(pgres);#ifdef VALIAS     valias_delete_domain( domain);#endif#ifdef ENABLE_AUTH_LOGGING    qnprintf( SqlBufUpdate, SQL_BUF_SIZE,         "delete from lastauth where domain = '%s'", domain );    pgres=PQexec(pgc, SqlBufUpdate);    if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK) {      return(-1);    } 	    if(pgres) PQclear(pgres);#endif    return(0);}int vauth_deluser( char *user, char *domain ){  PGresult *pgres;  char *tmpstr;  int err = 0;      if ( (err=vauth_open()) != 0 ) return(err);  vset_default_domain( domain );#ifndef MANY_DOMAINS  if ( domain == NULL || domain[0] == 0 ) {    tmpstr = PGSQL_LARGE_USERS_TABLE;  } else {    tmpstr = vauth_munch_domain( domain );  }#else  tmpstr = PGSQL_DEFAULT_TABLE;#endif  qnprintf( SqlBufUpdate, SQL_BUF_SIZE, DELETE_USER, tmpstr, user#ifdef MANY_DOMAINS	    , domain#endif	    );  pgres=PQexec(pgc, SqlBufUpdate);  if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) {    err = -1;  }   if( pgres ) PQclear(pgres);#ifdef ENABLE_AUTH_LOGGING  qnprintf( SqlBufUpdate, SQL_BUF_SIZE, 	    "delete from lastauth where user = '%s' and domain = '%s'", 	    user, domain );  pgres=PQexec(pgc, SqlBufUpdate);  if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) {    err = -1;  }  if( pgres ) PQclear(pgres);#endif  return(err);}int vauth_setquota( char *username, char *domain, char *quota){  PGresult *pgres;  char *tmpstr;  int err;  if ( strlen(username) > MAX_PW_NAME ) return(VA_USER_NAME_TOO_LONG);#ifdef USERS_BIG_DIR  if ( strlen(username) == 1 ) return(VA_ILLEGAL_USERNAME);#endif  if ( strlen(domain) > MAX_PW_DOMAIN ) return(VA_DOMAIN_NAME_TOO_LONG);  if ( strlen(quota) > MAX_PW_QUOTA )    return(VA_QUOTA_TOO_LONG);      if ( (err=vauth_open()) != 0 ) return(err);  vset_default_domain( domain );#ifndef MANY_DOMAINS  tmpstr = vauth_munch_domain( domain );#else  tmpstr = PGSQL_DEFAULT_TABLE; #endif  qnprintf( SqlBufUpdate, SQL_BUF_SIZE, SETQUOTA, tmpstr, quota, username#ifdef MANY_DOMAINS	    , domain#endif			    );  pgres = PQexec(pgc, SqlBufUpdate);  if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) {    fprintf(stderr, 	    "vauth_setquota: query failed: %s\n", PQerrorMessage(pgc));    if( pgres ) PQclear(pgres);    return(-1);  }   if( pgres ) PQclear(pgres);  return(0);}struct vqpasswd *vauth_getall(char *domain, int first, int sortit){  static PGresult *pgres=NULL;   /* ntuples - number of tuples ctuple - current tuple */  static unsigned ntuples=0, ctuple=0;        char *domstr = NULL;  static struct vqpasswd vpw;  int err;  vset_default_domain( domain );#ifdef MANY_DOMAINS  domstr = PGSQL_DEFAULT_TABLE; #else  domstr = vauth_munch_domain( domain );#endif  if ( first == 1 ) {    if ( (err=vauth_open()) != 0 ) return(NULL);    qnprintf(SqlBufRead,  SQL_BUF_SIZE, GETALL, domstr#ifdef MANY_DOMAINS	     ,domain#endif	     );    if ( sortit == 1 ) {      strncat( SqlBufRead, " order by pw_name", SQL_BUF_SIZE);    }    if ( pgres ) { /* reset state if we had previous result */      PQclear(pgres);    // clear previous result	      pgres=NULL;      ntuples=ctuple=0;	    }	    pgres = PQexec(pgc, SqlBufRead);    if( !pgres || PQresultStatus(pgres) != PGRES_TUPLES_OK ) {      fprintf(stderr, "vauth_getall:query failed[5]: %s\n", PQerrorMessage(pgc));      if( pgres ) {         PQclear(pgres);        pgres=NULL;      }      return (NULL);    }    ntuples = PQntuples( pgres );  }  if ( ctuple == ntuples ) {    PQclear(pgres);    pgres=NULL;    ctuple=ntuples=0;    return NULL;  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
捆绑调教美女网站视频一区| 欧美视频第二页| 91偷拍与自偷拍精品| 91免费在线看| 久久久99精品免费观看不卡| 亚洲第一久久影院| 高清国产午夜精品久久久久久| 欧美午夜在线观看| 亚洲同性gay激情无套| 国内外成人在线| 欧美一区二区三区爱爱| 亚洲综合丁香婷婷六月香| 成人激情免费视频| 久久这里只有精品6| 日本美女一区二区三区视频| 欧美日韩综合在线免费观看| 亚洲少妇中出一区| av一区二区三区| 欧美韩日一区二区三区四区| 国产在线精品一区在线观看麻豆| 欧美日韩精品免费| 一区二区三国产精华液| 99精品视频一区| 中文字幕中文乱码欧美一区二区| 国产精品综合视频| 久久亚洲一区二区三区明星换脸 | 欧美日韩激情一区二区三区| 国产精品久久久一本精品 | 久久福利视频一区二区| 欧美高清www午色夜在线视频| 亚洲一线二线三线视频| 91视频国产资源| 亚洲欧美激情小说另类| av毛片久久久久**hd| 中文一区在线播放| 国产成人av一区二区三区在线观看| 日韩精品一区二区三区在线播放 | 亚洲黄色小视频| 欧美午夜片在线观看| 亚洲成a人片综合在线| 欧美在线观看视频一区二区三区| 亚洲人成在线播放网站岛国| 91久久香蕉国产日韩欧美9色| 一区二区三区自拍| 欧美日韩专区在线| 日韩av高清在线观看| 欧美一区二区三区免费在线看| 久久精品99国产国产精| 欧美精品一区二区久久久| 激情欧美一区二区| 中文字幕免费观看一区| 91久久精品国产91性色tv| 日韩精品一二三| 精品国产髙清在线看国产毛片| 国产精品18久久久久久久久 | 色吧成人激情小说| 亚洲成人一区二区在线观看| 欧美一区二区成人| 国产精品18久久久久久久网站| 中文字幕一区视频| 欧美日韩一本到| 国产一区福利在线| 最新日韩av在线| 欧美人与z0zoxxxx视频| 理论电影国产精品| 综合激情成人伊人| 538prom精品视频线放| 成人午夜激情片| 日本特黄久久久高潮| 久久久影院官网| 欧洲亚洲国产日韩| 国产成人精品免费视频网站| 亚洲一线二线三线视频| 久久精品视频一区二区| 欧美日本乱大交xxxxx| 成人av电影免费观看| 免费在线观看成人| 一区二区三区中文免费| 久久精品一二三| 欧美美女一区二区| 91免费观看在线| 国产一区久久久| 日本一道高清亚洲日美韩| 国产精品对白交换视频| 精品毛片乱码1区2区3区| 在线观看日韩毛片| 99在线热播精品免费| 久久99精品国产91久久来源| 亚洲成av人片在线观看| 亚洲欧美区自拍先锋| 久久精品夜色噜噜亚洲aⅴ| 3atv在线一区二区三区| 91视频免费播放| 国产成人亚洲综合色影视| 日本欧美加勒比视频| 中文字幕一区av| 久久久精品影视| 欧美哺乳videos| 欧美日精品一区视频| 91成人在线精品| 91色综合久久久久婷婷| www.视频一区| 99麻豆久久久国产精品免费 | 国产精品理伦片| 久久久久久麻豆| 精品成人免费观看| 日韩一区二区麻豆国产| 在线播放/欧美激情| 欧美三级电影一区| 欧美日韩一级片在线观看| 欧美综合天天夜夜久久| 91天堂素人约啪| 色婷婷亚洲婷婷| 在线观看欧美日本| 欧美日韩国产小视频在线观看| 一本色道亚洲精品aⅴ| 色综合一区二区三区| 色综合久久九月婷婷色综合| www.色精品| 在线观看一区日韩| 欧美性猛交xxxxxxxx| 欧美日韩一区国产| 91精品黄色片免费大全| 欧美日本国产一区| 日韩一区二区在线看| 精品国产电影一区二区| 久久久电影一区二区三区| 久久日韩粉嫩一区二区三区| 久久婷婷成人综合色| 欧美国产一区在线| 亚洲免费在线观看视频| 婷婷亚洲久悠悠色悠在线播放 | 亚洲午夜久久久久久久久久久| 一区二区三区波多野结衣在线观看 | 亚洲人成网站精品片在线观看| 尤物在线观看一区| 免费成人性网站| 国产一区二区精品在线观看| 国产成人欧美日韩在线电影| 色综合视频在线观看| 91麻豆精品国产自产在线观看一区 | 成人一区二区视频| 91麻豆国产精品久久| 555www色欧美视频| 国产精品美女久久久久久2018| 亚洲免费在线电影| 久久精品国产精品亚洲精品| 99精品欧美一区二区三区小说 | 美女视频网站久久| 成人少妇影院yyyy| 欧美午夜精品久久久久久孕妇| 日韩美女主播在线视频一区二区三区| 久久久99精品久久| 亚洲乱码中文字幕| 久久精品国产免费看久久精品| 99精品视频一区二区三区| 日韩区在线观看| 亚洲欧美二区三区| 国产高清亚洲一区| 欧美精品第一页| 中文字幕在线不卡一区二区三区 | 一区二区三区四区不卡在线| 久久精品久久综合| 色欧美日韩亚洲| 久久男人中文字幕资源站| 亚洲第一av色| av电影在线观看完整版一区二区| 7777精品伊人久久久大香线蕉完整版| 中文字幕一区二区三区蜜月| 久久99久久99| 欧美日韩美女一区二区| 国产精品免费aⅴ片在线观看| 日韩国产精品大片| 91福利资源站| 国产精品久久久久aaaa樱花| 韩国v欧美v亚洲v日本v| 欧美日韩国产一区| 一区二区三区四区中文字幕| 国产精品996| 精品成人在线观看| 蜜桃免费网站一区二区三区| 欧洲国内综合视频| 亚洲人被黑人高潮完整版| 国产xxx精品视频大全| 精品国产污污免费网站入口| 偷拍亚洲欧洲综合| 欧美亚洲一区二区在线观看| 亚洲人成电影网站色mp4| 丁香激情综合五月| 久久色中文字幕| 国产中文一区二区三区| 日韩一区二区三区视频在线观看 | 亚洲人午夜精品天堂一二香蕉| 国产乱码精品一区二区三区忘忧草 | 一二三区精品福利视频| 91在线观看免费视频| 最新久久zyz资源站| 99re这里都是精品| 日韩一区日韩二区| 一本色道久久加勒比精品 |