📄 vpgsql.c
字号:
level_cur, level_max, \level_start0, level_start1, level_start2, \level_end0, level_end1, level_end2, \level_mod0, level_mod1, level_mod2, \level_index0, level_index1, level_index2, the_dir ) values ( \'%s', %lu, %d, %d, \%d, %d, %d, \%d, %d, %d, \%d, %d, %d, \%d, %d, %d, \'%s')\n", domain, vdir->cur_users, vdir->level_cur, vdir->level_max, vdir->level_start[0], vdir->level_start[1], vdir->level_start[2], vdir->level_end[0], vdir->level_end[1], vdir->level_end[2], vdir->level_mod[0], vdir->level_mod[1], vdir->level_mod[2], vdir->level_index[0], vdir->level_index[1], vdir->level_index[2], vdir->the_dir); pgres=PQexec(pgc, SqlBufUpdate); if ( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { PQclear(pgres); vcreate_dir_control(domain); if ( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { fprintf(stderr, "vwrite_dir_control: %s\n", PQerrorMessage(pgc)); if (pgres) PQclear (pgres); return(-1); } } PQclear(pgres); return pg_end(); /* end transcation */}void vcreate_dir_control(char *domain){ PGresult *pgres; vauth_create_table ("dir_control", DIR_CONTROL_TABLE_LAYOUT, 1); qnprintf(SqlBufUpdate, SQL_BUF_SIZE, "insert into dir_control ( \domain, cur_users, \level_cur, level_max, \level_start0, level_start1, level_start2, \level_end0, level_end1, level_end2, \level_mod0, level_mod1, level_mod2, \level_index0, level_index1, level_index2, the_dir ) values ( \\'%s\', 0, \0, %d, \0, 0, 0, \%d, %d, %d, \0, 2, 4, \0, 0, 0, \\'\')\n", domain, MAX_DIR_LEVELS, MAX_DIR_LIST-1, MAX_DIR_LIST-1, MAX_DIR_LIST-1); pgres = PQexec( pgc, SqlBufUpdate ); if ( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { fprintf(stderr, "vcreate_dir_control: insert failed: %s\n", PQerrorMessage(pgc)); if (pgres) PQclear (pgres); return; } PQclear(pgres);}int vdel_dir_control(char *domain){ PGresult *pgres; int err; if ( (err=vauth_open()) != 0 ) return(err); qnprintf(SqlBufUpdate, SQL_BUF_SIZE, "delete from dir_control where domain = '%s'", domain); pgres=PQexec(pgc, SqlBufUpdate); if ( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { PQclear(pgres); vcreate_dir_control(domain); qnprintf(SqlBufUpdate, SQL_BUF_SIZE, "delete from dir_control where domain = '%s'", domain); if ( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { fprintf(stderr, "vdel_dir_control: delete failed[e]: %s\n", PQerrorMessage(pgc)); err=-1; } } if( pgres ) PQclear(pgres); return err;}#ifdef ENABLE_AUTH_LOGGINGint vset_lastauth(char *user, char *domain, char *remoteip ){ PGresult *pgres; int err=0; if ( (err=vauth_open()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "UPDATE lastauth SET remote_ip='%s', timestamp=%lu " \ "WHERE userid='%s' AND domain='%s'", remoteip, time(NULL), user, domain); #ifdef DEBUGfprintf(stderr,"UPDATE command to run is \n\n%s\n\n", SqlBufUpdate);#endif pgres=PQexec(pgc, SqlBufUpdate); if (pgres && PQresultStatus(pgres) == PGRES_COMMAND_OK && atoi(PQcmdTuples(pgres)) == 0) {#ifdef DEBUGfprintf(stderr,"UPDATE returned OK but had 0 rows\n");#endif if( pgres ) PQclear(pgres); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "INSERT INTO lastauth (userid, domain, remote_ip, timestamp) " \ "VALUES ('%s', '%s', '%s', %lu)", user, domain, remoteip, time(NULL)); #ifdef DEBUGfprintf(stderr,"INSERT command to run is \n\n%s\n\n", SqlBufUpdate);#endif pgres=PQexec(pgc, SqlBufUpdate); }/* UPDATE returned 0 rows and/or INSERT failed. Try creating the table */ if(!pgres || PQresultStatus(pgres) != PGRES_COMMAND_OK) {#ifdef DEBUGfprintf(stderr,"UPDATE and/or INSERT failed. error was %s\n", PQerrorMessage(pgc));#endif if( pgres ) PQclear(pgres);#ifdef DEBUGfprintf(stderr, "update returned 0 and/or insert failed in vset_lastauth()\n");#endif vcreate_lastauth_table();/* and try INSERTing now... */ qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "INSERT INTO lastauth (userid, domain, remote_ip, timestamp) " \ "VALUES ('%s', '%s', '%s', %lu)", user, domain, remoteip, time(NULL)); pgres=PQexec(pgc, SqlBufUpdate); } if ( !pgres || PQresultStatus(pgres) != PGRES_COMMAND_OK ) { fprintf( stderr, "vset_lastauth[f]: %s\n: %s\n", SqlBufUpdate,PQerrorMessage(pgc)); if( pgres ) PQclear(pgres); return (-1); } if( pgres ) PQclear(pgres); return(0);}time_t vget_lastauth(struct vqpasswd *pw, char *domain){ PGresult *pgres; int err, ntuples; time_t mytime; if ( (err=vauth_open()) != 0 ) return(err); qnprintf( SqlBufRead, SQL_BUF_SIZE, "SELECT timestamp FROM lastauth WHERE userid='%s' AND domain='%s'", pw->pw_name, domain); pgres=PQexec(pgc, SqlBufRead); if ( !pgres || PQresultStatus(pgres) != PGRES_TUPLES_OK ) { if( pgres ) PQclear(pgres); vcreate_lastauth_table(); qnprintf( SqlBufRead, SQL_BUF_SIZE, "SELECT timestamp FROM lastauth WHERE userid='%s' AND domain='%s'", pw->pw_name, domain); pgres=PQexec(pgc, SqlBufRead); if ( !pgres || PQresultStatus(pgres) != PGRES_TUPLES_OK ) { fprintf(stderr,"vpgsql: sql error[g]: %s\n", PQerrorMessage(pgc)); return(0); } } ntuples = PQntuples(pgres); mytime = 0; if( ntuples ) { /* got something */ mytime = atol( PQgetvalue(pgres, ntuples-1, 0)); } if( pgres ) PQclear(pgres); return(mytime);}char *vget_lastauthip(struct vqpasswd *pw, char *domain){ PGresult *pgres; static char tmpbuf[100]; int ntuples=0; if ( vauth_open() != 0 ) return(NULL); qnprintf( SqlBufRead, SQL_BUF_SIZE, "select remote_ip from lastauth where userid='%s' and domain='%s'", pw->pw_name, domain); pgres=PQexec(pgc, SqlBufRead); if ( !pgres || PQresultStatus(pgres) != PGRES_TUPLES_OK ) { if( pgres ) PQclear(pgres); vcreate_lastauth_table(); qnprintf( SqlBufRead, SQL_BUF_SIZE, "select remote_ip from lastauth where userid='%s' and domain='%s'", pw->pw_name, domain); pgres=PQexec(pgc, SqlBufRead); if ( !pgres || PQresultStatus(pgres) != PGRES_TUPLES_OK ) { fprintf( stderr,"vpgsql: sql error[h]: %s\n", PQerrorMessage(pgc)); return(NULL); } } ntuples = PQntuples(pgres); if( ntuples ) { /* got something */ strncpy(tmpbuf, PQgetvalue(pgres, ntuples-1, 0),100 ); } if( pgres ) PQclear(pgres); return(tmpbuf);}void vcreate_lastauth_table(){ vauth_create_table ("lastauth", LASTAUTH_TABLE_LAYOUT, 1); return;}#endif /* ENABLE_AUTH_LOGGING */#ifdef VALIASchar *valias_select( char *alias, char *domain ){ int err, verrori; if ( (err=vauth_open()) != 0 ) { verrori = err; return(NULL); } /* if we're already in a query, clear it out before starting a new one */ if (pgvalias) PQclear(pgvalias); qnprintf( SqlBufRead, SQL_BUF_SIZE, "select valias_line from valias where alias='%s' and domain='%s'", alias, domain ); if ( ! (pgvalias=PQexec(pgc, SqlBufRead)) || PQresultStatus(pgvalias) != PGRES_TUPLES_OK ) { if(pgvalias) PQclear(pgvalias); vcreate_valias_table(); if ( ! (pgvalias=PQexec(pgc, SqlBufRead)) || PQresultStatus(pgvalias) != PGRES_TUPLES_OK ) { fprintf(stderr,"vpgsql: sql error[j]: %s\n", PQerrorMessage(pgc)); if (pgvalias) PQclear(pgvalias); return(NULL); } } return valias_select_next();}char *valias_select_next(){ if ( PQntuples(pgvalias) > 0 ) { return( PQgetvalue( pgvalias, 0, 0 ) ); } if(pgvalias) PQclear(pgvalias); return(NULL);}int valias_insert( char *alias, char *domain, char *alias_line){ PGresult *pgres; int err; if ( (err=vauth_open()) != 0 ) return(err); while(*alias_line==' ') ++alias_line; qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "insert into valias(alias,domain,valias_line) values ('%s','%s','%s')", alias, domain, alias_line ); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { if(pgres) PQclear(pgres); vcreate_valias_table(); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "insert into valias(alias,domain,valias_line) values ('%s','%s','%s')", alias, domain, alias_line ); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { fprintf(stderr,"vpgsql: sql error[k]: %s\n", PQerrorMessage(pgc)); if (pgres) PQclear (pgres); return(-1); } if(pgres) PQclear(pgres); return(0); } return(-1);}int valias_delete( char *alias, char *domain){ PGresult *pgres; int err; if ( (err=vauth_open()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from valias where alias='%s' and domain='%s'", alias, domain ); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { if(pgres) PQclear(pgres); vcreate_valias_table(); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from valias where alias='%s' and domain='%s'", alias, domain ); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { fprintf(stderr,"vpgsql: sql error: %s\n", PQerrorMessage(pgc)); if (pgres) PQclear (pgres); return(-1); } } if(pgres) PQclear(pgres); return(0);}int valias_remove( char *alias, char *domain, char *alias_line){ PGresult *pgres; int err; if ( (err=vauth_open()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from valias where alias='%s' and valias_line='%s' and domain='%s'", alias, alias_line, domain ); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { if(pgres) PQclear(pgres); vcreate_valias_table(); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { fprintf(stderr,"vpgsql: sql error: %s\n", PQerrorMessage(pgc)); if (pgres) PQclear (pgres); return(-1); } } if(pgres) PQclear(pgres); return(0);}int valias_delete_domain( char *domain){ PGresult *pgres; int err; if ( (err=vauth_open()) != 0 ) return(err); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from valias where domain='%s'", domain ); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { if(pgres) PQclear(pgres); vcreate_valias_table(); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "delete from valias where domain='%s'", domain ); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { fprintf(stderr,"vpgsql: sql error: %s\n", PQerrorMessage(pgc)); if (pgres) PQclear (pgres); return(-1); } } if(pgres) PQclear(pgres); return(0);}void vcreate_valias_table(){ PGresult *pgres; char SqlBufCreate[SQL_BUF_SIZE]; vauth_create_table ("valias", VALIAS_TABLE_LAYOUT, 1); snprintf( SqlBufCreate, SQL_BUF_SIZE, "create index valias_idx on valias ( %s )", VALIAS_INDEX_LAYOUT ); pgres=PQexec( pgc, SqlBufCreate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { fprintf(stderr,"vpgsql:sql error[n.i]:%s\n", PQerrorMessage(pgc)); if( pgres ) PQclear(pgres); return; } if( pgres ) PQclear(pgres); return;}char *valias_select_all( char *alias, char *domain ){ PGresult *pgres; int err; if ( (err=vauth_open()) != 0 ) return(NULL); qnprintf( SqlBufRead, SQL_BUF_SIZE, "select alias, valias_line from valias where domain = '%s' order by alias", domain ); if ( ! (pgres=PQexec(pgc, SqlBufRead)) || PQresultStatus(pgres) != PGRES_TUPLES_OK ) { if(pgres) PQclear(pgres); vcreate_valias_table(); if ( ! (pgres=PQexec(pgc, SqlBufRead)) || PQresultStatus(pgres) != PGRES_TUPLES_OK ) { fprintf(stderr,"vpgsql: sql error[o]: %s\n", PQerrorMessage(pgc)); if (pgres) PQclear (pgres); return(NULL); } } if ( PQntuples(pgres) > 0 ) { strcpy( alias, PQgetvalue( pgres, 0, 0 ) ); return( PQgetvalue( pgres, 0, 1 ) ); } if(pgres) PQclear(pgres); return(NULL);}char *valias_select_all_next(char *alias){ /* moved to last bit of valias_select_all */}#endif#ifdef ENABLE_PGSQL_LOGGINGint logpgsql( int verror, char *TheUser, char *TheDomain, char *ThePass, char *TheName, char *IpAddr, char *LogLine) { PGresult *pgres; int err; time_t mytime; mytime = time(NULL); if ( (err=vauth_open()) != 0 ) return(err); /* qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "INSERT INTO vlog set userid='%s', passwd='%s', \ domain='%s', logon='%s', remoteip='%s', message='%s', \ error=%i, timestamp=%d", TheUser, ThePass, TheDomain, TheName, IpAddr, LogLine, verror, (int)mytime); */ qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "INSERT INTO vlog (userid,passwd,domain,logon,remoteip,message,error,timestamp values('%s','%s','%s','%s','%s','%s',%i,%d", TheUser, ThePass, TheDomain, TheName, IpAddr, LogLine, verror, (int)mytime); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { if( pgres ) PQclear(pgres); vcreate_vlog_table(); qnprintf( SqlBufUpdate, SQL_BUF_SIZE, "INSERT INTO vlog (userid,passwd,domain,logon,remoteip,message,error,timestamp values('%s','%s','%s','%s','%s','%s',%i,%d", TheUser, ThePass, TheDomain, TheName, IpAddr, LogLine, verror, (int)mytime); pgres=PQexec( pgc, SqlBufUpdate ); if( !pgres || PQresultStatus(pgres)!=PGRES_COMMAND_OK ) { if( pgres ) PQclear(pgres); fprintf(stderr,"error inserting into lastauth table\n"); } } if( pgres ) PQclear(pgres); return(0);}void vcreate_vlog_table(){ vauth_create_table ("vlog", VLOG_TABLE_LAYOUT, 1); return;}#endifint vauth_crypt(char *user,char *domain,char *clear_pass,struct vqpasswd *vpw){ if ( vpw == NULL ) return(-1); return(strcmp(crypt(clear_pass,vpw->pw_passwd),vpw->pw_passwd));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -